In a clustered environment, in which 2 nodes have Application Servers with the same name, an attempt to lookup an EJB in the name space during an EJB invocation finds the wrong server.
The result is that an EJB invocation fails with the following exception:
|Root exception is org.omg.CosNaming.NamingContextPackage.NotFound IDL:omg.org/CosNaming/NamingContext/NotFound:1.0|
Despite running the dumpNameSpace tool (run in the cell level), and finding that the name/object is in the name space, the look up does not work.
This problem is caused by the lack of uniqueness of the host name and server name pair in a clustered environment. That is, 2 servers on the same host (federated in a Network Deployment) but on different nodes, and with the same Server_ID and Server_UUID between the node-agents and thus are not unique according to the ORB. Server IDs used by the ORB are constructed from the host name and the server name.
For example, 2 nodes in a cluster are defined as follows:
- Node 1 has an Application Server named server1 with an EJB deployed on that server.
- Node 2 has an Application Server named server1. It has a Web application that is attempting to invoke the EJB on server1 on Node 1.
These 2 nodes have the same server defined, server1. The ORB on Node 1 successfully finds the EJB since it is on the same node. The Web application on Node 2 gets the error message and NameNotFoundException.
The reason that the problem occurs is that when the ORB code on Node 2 looks up server1 to find this EJB, it finds the instance on Node 2 (the local instance) rather than the server1 on Node 1, which is where the EJB is initiated.
Resolving the problem
The solution for this problem is to have different server names for the servers for 2 different nodes.
|Application Servers||Runtimes for Java Technology||Java SDK|