Look up an EJB home with JNDI

 

 

JNDI lookup from an application running in a container

Applications that run in a container can use java: lookup names. The deployment descriptors for the application provide the mapping from the java: name and the name server lookup name.

The following example shows a lookup of an EJB home where the actual home lookup name is determined by the application's deployment descriptors...

// Get the initial context 
...

// Look up the home interface using the JNDI name

try 
{
   java.lang.Object ejbHome = initialContext.lookup("java:comp/env/com/companyname/vendor/VendorEJB");

   accountHome = (VendorHome)javax.rmi.PortableRemoteObject.narrow((org.omg.CORBA.Object) ejbHome, VendorHome.class);
}
catch  NamingException(e) 
{ 
   // Error getting the home interface
   ...
}

 

JNDI lookup from an application that does not run in a container

Applications that do not run in a container cannot use java: lookup names because it is the container which sets the java: name space up for the application. Instead, an application of this type must look the object up directly from the name server.

Each appserver contains a name server. System artifacts such as EJB homes are bound relative to the server root context in that name server. The various name servers are federated by means of a system name space structure. The recommended way to look up objects on different servers is to qualify the name so that the name resolves from any initial context in the cell. If a relative name is used, the initial context must be the same server root context as the one under which the object is bound. The form of the qualified name depends on whether the qualified name is a topology-based name or a fixed name. A topology based name depends on whether the object resides in a single server or a server cluster. Examples of each form of qualified name follow.

 

Topology-based qualified names

Topology-based qualified names traverse through the system name space to the server root context context under which the target object is bound. A topology-based qualified name resolves from any initial context in the cell.

 

Single server

The following example shows a lookup of an EJB home that is running in the single server, servername, configured in the node, nodename

// Get the initial context as shown in a previous example
// Using the form of lookup name below, it doesn't matter which
// server in the cell is used to obtain the initial context.
...
// Look up the home interface using the JNDI name
try {
   java.lang.Object ejbHome = initialContext.lookup("cell/nodes/nodename/servers/servername/com/companyname/vendor/VendorEJB");

   accountHome = (VendorHome)javax.rmi.PortableRemoteObject.narrow((org.omg.CORBA.Object) ejbHome, VendorHome.class);
}
catch  NamingException(e) 
{ 
   // Error getting the home interface
   ...
}

 

Server cluster

The example below shows a lookup of an EJB home which is running in the cluster, MyCluster. The name can be resolved if any of the cluster members is running

// Get the initial context as shown in a previous example
// Using the form of lookup name below, it doesn't matter which
// server in the cell is used to obtain the initial context.
...
   // Look up the home interface using the JNDI name
try {
   java.lang.Object ejbHome = initialContext.lookup(
      "cell/clusters/MyCluster/com/companyname/vendor/VendorEJB");
   accountHome = (VendorHome)javax.rmi.PortableRemoteObject.narrow(
      (org.omg.CORBA.Object) ejbHome, VendorHome.class);
}
catch  NamingException(e) { // Error getting the home interface
   ...
}

 

Fixed qualified names

If the target object has a cell-scoped fixed name defined for it, you can use its qualified form instead of the topology-based qualified name. Even though the topology-based name works, the fixed name does not change with the specific cell topology or with the movement of the target object to a different server. An example lookup with a qualified fixed name is shown below

// Get the initial context as shown in a previous example
// Using the form of lookup name below, it doesn't matter which
// server in the cell is used to obtain the initial context.
...

// Look up the home interface using the JNDI name
try 
{
   java.lang.Object ejbHome = 
      initialContext.lookup("cell/persistent/com/companyname/vendor/VendorEJB");

   accountHome = (VendorHome)javax.rmi.PortableRemoteObject.narrow(
      (org.omg.CORBA.Object) ejbHome, VendorHome.class);
   }
catch  NamingException(e) { // Error getting the home interface
...
}

 

JNDI lookup with a corbaname URL

A corbaname can be useful at times as a lookup name. If, for example, the target object is not a member of the federated name space and cannot be located with a qualifiied name, a corbaname can be a convenient way to look up the object. A lookup with a corbaname URL follows

// Get the initial context as shown in a previous example 
... 

// Look up the home interface using a corbaname URL 
try { 
   java.lang.Object ejbHome = initialContext.lookup("corbaname:iiop:someHost:2809#com/companyname/vendor/VendorEJB"); 

   accountHome = (VendorHome)javax.rmi.PortableRemoteObject.narrow((org.omg.CORBA.Object) ejbHome, VendorHome.class); 
} 
catch  NamingException(e) { // Error getting the home interface 
   ... 
}