This is more of a Websphere question, however, I was wondering if you have seen a similar problem before or provide us some advise.
We are converting a JBoss based web application to Websphere Portal v5.0. In the application, a stateless session EJB tries to connect to a legacy CORBA server which is using Orbacus ORB (Object Request Broker). In the original application, the stateless session EJB is also using Orbacus ORB and in the classpath there is a Java library provided to us by Orbacus. Everything works fine in the original JBoss based system.
When we converted the web based application to run in WSAD (Websphere Studio Application Developer) Websphere portal 5.0 test environment, the application class loader policy is set to Multiple and the classloader mode of the application is PARENT_FIRST. The jar file that contains the Orbacus ORB library is under a subfolder of the enterprise application and the EJB project has been configured to have dependency on that jar file.
When we run the EJB, it connects to the NamingContext in the legacy server. However, it cannot obtain a reference to any of the objects in the naming repository, throwing an exception that says:
com/ibm/rmi/corba/TypeCodeImpl incompatible with com/ooc/CORBA/TypeCode
(Note: OOC is name of the Orbacus ORB.) When we debug it, it is seen that the singleton member of the ORB object is set to com.ibm.rmi.corba.ORBSingleton even though in the initialization of ORB we have set the singleton class to be com.ooc.CORBA.ORBSingleton as follows:
Properties env = new Properties();
env.put("org.omg.CORBA.ORBClass", "com.ooc.CORBA.ORB");
env.put("org.omg.CORBA.ORBSingletonClass", "com.ooc.CORBA.ORBSingleton");
...
orb = ORB.init(new String[] {}, env);
Our understanding is, the ORB has already been initialized by the EJB container before our initialization takes place and therefore it is not possible to change the singleton class from IBM to Orbacus ORB.
We also tried to force the application server to load Orbacus library first. In the classpath settings of the WSAD Websphere portal 5.0 test environment, we change the classloader mode of the application to PARENT_LAST. In this case, the application server does not even start. It creates a dump file. We guess what is happening here is, the application server picks up the Orbacus ORB library from the classpath first before the IBM ORB library and another form of incompatibility takes place crashing the server.
We would like to know if there is a way to configure Websphere Portal so that the ORB initialized to use Orbacus ORB in the EJB instead of IBM's ORB.
Sincerely,
Konur Unyelioglu
kunyelio <at> trendium.com
Work: (954) 835 9679
Cell: (954) 557 1459