naming
Locating adding replacing removing and renaming a binding in the Naming service
With this example we are going to show you how to perform basic operations over a binding in a Naming service, that is locating adding replacing removing and renaming a binding in the Naming service.
In order to run this example you should first follow the one describing how to implement a simple “calculator” service capable of RMI invocations here.
You must implement, compile, create the CalculatorServiceImpl “stub” class and launch the rmiregistry to use its Naming service.
Let’s see the code:
package com.javacodegeeks.snippets.enterprise; import java.rmi.RemoteException; import java.util.Hashtable; import javax.naming.Binding; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingEnumeration; import javax.naming.NamingException; public class AddLookupReplaceRemoveRenameBindings { public static void main(String[] args) { try { /* * This example uses the RMI Registry naming service provider running on * local host and on the default port (1099) * * For connecting to alternate naming service providers you should construct * a Hashtable containing appropriate environment directives and initialize the * InitialContext Object using the InitialContext(Hashtable env) constructor * injecting the environment table. * * For example; connecting to JBoss naming service running on local host the * environment that should be created is like the one shown below : * * Hashtable env = new Hashtable(); * env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory"); * env.put(Context.PROVIDER_URL, "jnp://localhost:1099"); * env.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces"); * */ Hashtable env = new Hashtable(); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.rmi.registry.RegistryContextFactory"); env.put(Context.PROVIDER_URL, "rmi://localhost:1099"); Context ctx = new InitialContext(env); System.out.println("Initial Context created successfully"); // Add a binding. Object to bind must be Remote, Reference, or Referenceable ctx.bind("Calculator_Service", new CalculatorServiceImpl()); // Display all bindings of the context NamingEnumeration bindings = ctx.listBindings(ctx.getNameInNamespace()); System.out.println("After adding 'Calculator_Service' binding, Naming Context contains :"); while(bindings.hasMore()) { Binding binding = (Binding)bindings.next(); System.out.println("Binding name : " + binding.getName() + ", Binding Object hashCode : " + binding.getObject().hashCode()); } // Replace a binding. Object to bind must be Remote, Reference, or Referenceable ctx.rebind("Calculator_Service", new CalculatorServiceImpl()); // Display all bindings of the context bindings = ctx.listBindings(ctx.getNameInNamespace()); System.out.println("After rebinding 'Calculator_Service', Naming Context contains :"); while(bindings.hasMore()) { Binding binding = (Binding)bindings.next(); System.out.println("Binding name : " + binding.getName() + ", Binding Object hashCode : " + binding.getObject().hashCode()); } // Looking up an object by its binding name CalculatorService calculator = (CalculatorService)ctx.lookup("Calculator_Service"); System.out.println("Calculating 2 + 2 = " + calculator.add(2, 2)); // Rename a binding ctx.rename("Calculator_Service", "New_Calculator_Service"); // Display all bindings of the context bindings = ctx.listBindings(ctx.getNameInNamespace()); System.out.println("After replacing 'Calculator_Service' with 'New_Calculator_Service' binding, Naming Context contains :"); while(bindings.hasMore()) { Binding binding = (Binding)bindings.next(); System.out.println("Binding name : " + binding.getName() + ", Binding Object hashCode : " + binding.getObject().hashCode()); } // Looking up an object by its binding name calculator = (CalculatorService)ctx.lookup("New_Calculator_Service"); System.out.println("Calculating 10 / 2 = " + calculator.div(10, 2)); // Remove a binding ctx.unbind("New_Calculator_Service"); // Display all bindings of the context bindings = ctx.listBindings(ctx.getNameInNamespace()); System.out.println("After removing 'New_Calculator_Service' binding, Naming Context contains :"); while(bindings.hasMore()) { Binding binding = (Binding)bindings.next(); System.out.println("Binding name : " + binding.getName() + ", Binding Object hashCode : " + binding.getObject().hashCode()); } } catch (NamingException e) { System.out.println("Exception occurred while utilizing bindings : " + e.getMessage()); } catch (RemoteException e) { System.out.println("Could not create calculator service : " + e.getMessage()); } } }
Example Output:
Initial Context created successfully
After adding 'Calculator_Service' binding, Naming Context contains :
Binding name : Calculator_Service, Binding Object hashCode : 853137463
After rebinding 'Calculator_Service', Naming Context contains :
Binding name : Calculator_Service, Binding Object hashCode : 394882503
Calculating 2 + 2 = 4
After replacing 'Calculator_Service' with 'New_Calculator_Service' binding, Naming Context contains :
Binding name : New_Calculator_Service, Binding Object hashCode : 394882503
Calculating 10 / 2 = 5.0
After removing 'New_Calculator_Service' binding, Naming Context contains :
This is an example on locating, adding, replacing, removing and renaming a binding in the Naming service.