Link to home
Start Free TrialLog in
Avatar of sandip-mehta83
sandip-mehta83

asked on

How To Call Stateless EJB Deployed On Weblogic From Glassfis

Can somebody please help me with step by step guide of how to call EJB deployed on Weblogic from application deployed on glassfish server.

I have been looking for answers in different forums and never got an satisfactory solutions. All the solutions I tried created new alien problem for me.

Thanks in advance.
Avatar of a_b
a_b

Can you share with us what is it that you tried?
This is a small code snippet that will help, always works like a charm (but make sure your that your properties are set according to your specs) -

Properties properties = new Properties();
properties.put("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
properties.put("java.naming.factory.url.pkgs","=org.jboss.naming:org.jnp.interfaces");
properties.put("java.naming.provider.url","localhost:1099");

Context context;
try
{
context = new InitialContext();
TestBeanRemote beanRemote = (TestBeanRemote)                                    context.lookup(TestBean.RemoteJNDIName);
beanRemote.test();
} catch (NamingException e)
{
      e.printStackTrace();
}
Avatar of sandip-mehta83

ASKER

Thanks for looking into this. I will post the lookup code shortly.
Code that you have mentioned is only for looking up EJB on JBOSS server. Is this correct? If yes I need to lookup the EJB on Weblogic server from glassfish web application. Now Glassfish isn't the only server application needs to support. Webapp can be deployed on other web server such as Liferay and so on...so i am looking for portable code that can be used irrespective of web server to look up the EJB on weblogic.
I donot know if a portable code exists, as far as I know only the bean is portable. The client has to write the code based on the server.

Here is what you need for the weblogic -

java.naming.factory.initial=weblogic.jndi.WLInitialContextFactory
java.naming.provider.url=iiop://localhost:7011
Also,

java.naming.factory.url.pkgs=weblogic.jndi.factories
What jar file do i need to put in WEB-INF/lib for aforementioned context factory?
I tried adding weblogic.jar in server classpath and got following exception.


[#|2009-07-13T08:45:28.708+0530|INFO|sun-appserver9.1|javax.enterprise.system.stream.out|_ThreadID=17;_ThreadName=Thread-80;|<Jul 13, 2009 8:45:28 AM IST> <Error> <IIOP> <BEA-002015> <Using javax.rmi.CORBA.UtilClass com.sun.corba.ee.impl.javax.rmi.CORBA.Util; The IIOP subsystem requires a WebLogic Server-compatible UtilClass.>
|#]

[#|2009-07-13T08:45:28.708+0530|INFO|sun-appserver9.1|javax.enterprise.system.stream.out|_ThreadID=17;_ThreadName=Thread-80;|<Jul 13, 2009 8:45:28 AM IST> <Error> <IIOP> <BEA-002016> <Using javax.rmi.CORBA.PortableRemoteObjectClass com.sun.corba.ee.impl.javax.rmi.PortableRemoteObject, the IIOP subsystem requires a WebLogic Server-compatible PortableRemoteObjectClass.>
|#]

[#|2009-07-13T08:45:30.885+0530|INFO|sun-appserver9.1|javax.enterprise.system.stream.out|_ThreadID=17;_ThreadName=Thread-80;|[2009 Jul 13 08:45:30] DEBUG (com.cvg.icoms.ejb.helpers.ServiceLocator:getWorkshopAPIBean:78) - "Message: Successfully Look Up WS API Home Object...."
|#]

[#|2009-07-13T08:45:33.642+0530|INFO|sun-appserver9.1|javax.enterprise.system.stream.out|_ThreadID=17;_ThreadName=Thread-80;|[2009 Jul 13 08:45:33] DEBUG (com.cvg.icoms.ejb.helpers.ServiceLocator:getWorkshopAPIBean:135) - "Message: Successfully Got The WS API Remote Bean Object...."
|#]

[#|2009-07-13T08:45:34.127+0530|WARNING|sun-appserver9.1|javax.enterprise.system.stream.err|_ThreadID=17;_ThreadName=Thread-80;_RequestID=050f2fcd-658f-436b-bdf0-ace3a2ab5a05;|java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
      java.rmi.RemoteException: EJB Exception: ; nested exception is:
      java.lang.NullPointerException
      at weblogic.iiop.InboundResponseImpl.unmarshalReturn(InboundResponseImpl.java:103)
      at weblogic.iiop.IIOPRemoteRef.invokeInternal(IIOPRemoteRef.java:232)
      at weblogic.iiop.IIOPRemoteRef.invoke(IIOPRemoteRef.java:161)
      at com.ceon.pcc.workshop.WorkshopControllerRemote_IIOP_WLStub.searchCSDs(Unknown Source)
      at com.cvg.icoms.ejb.helpers.WSApiDelegate.searchCSDs(WSApiDelegate.java:634)
      at com.cvg.icoms.ejb.helpers.WSApiHelper.searchCSDs(WSApiHelper.java:227)
      at com.cvg.icoms.entity.processor.RMAndFeatProcessor.processIncrementalSyncEntities(RMAndFeatProcessor.java:195)
      at com.cvg.icoms.entity.processor.RMAndFeatProcessor.processEntities(RMAndFeatProcessor.java:233)
      at com.cvg.icoms.adapters.incrementalsync.IncrementalSyncAdapterImpl.startIncrementalSync(IncrementalSyncAdapterImpl.java:50)
      at com.cvg.icoms.adapters.incrementalsync.SocketMsgProcessor.processMsg(SocketMsgProcessor.java:78)
      at com.cvg.icoms.adapters.incrementalsync.SocketMsgProcessor.run(SocketMsgProcessor.java:378)
      at java.lang.Thread.run(Unknown Source)
Caused by: java.rmi.RemoteException: EJB Exception: ; nested exception is:
      java.lang.NullPointerException
      at weblogic.ejb.container.internal.EJBRuntimeUtils.throwRemoteException(EJBRuntimeUtils.java:95)
      at weblogic.ejb.container.internal.BaseEJBObject.handleSystemException(BaseEJBObject.java:713)
      at weblogic.ejb.container.internal.BaseEJBObject.handleSystemException(BaseEJBObject.java:681)
      at weblogic.ejb.container.internal.BaseEJBObject.postInvoke1(BaseEJBObject.java:447)
      at weblogic.ejb.container.internal.BaseEJBObject.postInvokeTxRetry(BaseEJBObject.java:374)
      at com.ceon.pcc.workshop.WorkshopControllerBean_imz2jq_EOImpl.searchCSDs(WorkshopControllerBean_imz2jq_EOImpl.java:5396)
      at com.ceon.pcc.workshop.WorkshopControllerBean_imz2jq_EOImpl_WLSkel.internalInvoke3(Unknown Source)
      at com.ceon.pcc.workshop.WorkshopControllerBean_imz2jq_EOImpl_WLSkel.internalInvoke2(Unknown Source)
      at com.ceon.pcc.workshop.WorkshopControllerBean_imz2jq_EOImpl_WLSkel.internalInvoke1(Unknown Source)
      at com.ceon.pcc.workshop.WorkshopControllerBean_imz2jq_EOImpl_WLSkel.invoke(Unknown Source)
      at weblogic.rmi.internal.activation.ActivatableServerRef.invoke(ActivatableServerRef.java:85)
      at weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:440)
      at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:363)
      at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:147)
      at weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:436)
      at weblogic.rmi.internal.BasicServerRef.access$300(BasicServerRef.java:58)
      at weblogic.rmi.internal.BasicServerRef$BasicExecuteRequest.run(BasicServerRef.java:975)
      at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)
      at weblogic.work.ExecuteThread.run(ExecuteThread.java:181)
Caused by: java.lang.NullPointerException
      at java.io.ObjectOutputStream$BlockDataOutputStream.getUTFLength(ObjectOutputStream.java)
      at java.io.ObjectOutputStream.writeString(ObjectOutputStream.java:1187)
      at java.io.ObjectOutputStream.writeEnum(ObjectOutputStream.java:1268)
      at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1077)
      at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:302)
      at java.util.ArrayList.writeObject(ArrayList.java:569)
      at sun.reflect.GeneratedMethodAccessor15.invoke(Unknown Source)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      at java.lang.reflect.Method.invoke(Method.java:585)
      at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:917)
      at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1339)
      at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1290)
      at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1079)
      at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1375)
      at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1347)
      at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1290)
      at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1079)
      at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:302)
      at weblogic.rjvm.MsgAbbrevOutputStream.writeObject(MsgAbbrevOutputStream.java:614)
      at weblogic.rjvm.MsgAbbrevOutputStream.writeObjectWL(MsgAbbrevOutputStream.java:605)
      at weblogic.rmi.internal.ObjectIO.writeObject(ObjectIO.java:38)
      at weblogic.rjvm.BasicOutboundRequest.marshalArgs(BasicOutboundRequest.java:87)
      at weblogic.rmi.cluster.ClusterableRemoteRef.invoke(ClusterableRemoteRef.java:332)
      at weblogic.rmi.cluster.ClusterableRemoteRef.invoke(ClusterableRemoteRef.java:252)
      at com.ceon.pcc.cm.CMControllerBean_d804x8_EOImpl_922_WLStub.searchCSDs(Unknown Source)
      at com.ceon.pcc.workshop.WorkshopControllerBean.searchCSDs(WorkshopControllerBean.java:2169)
      at com.ceon.pcc.workshop.WorkshopControllerBean_imz2jq_EOImpl.searchCSDs(WorkshopControllerBean_imz2jq_EOImpl.java:5382)
      at com.ceon.pcc.workshop.WorkshopControllerBean_imz2jq_EOImpl_WLSkel.internalInvoke3(Unknown Source)
      at com.ceon.pcc.workshop.WorkshopControllerBean_imz2jq_EOImpl_WLSkel.internalInvoke2(Unknown Source)
      at com.ceon.pcc.workshop.WorkshopControllerBean_imz2jq_EOImpl_WLSkel.internalInvoke1(Unknown Source)
      at com.ceon.pcc.workshop.WorkshopControllerBean_imz2jq_EOImpl_WLSkel.invoke(Unknown Source)
      at weblogic.rmi.internal.activation.ActivatableServerRef.invoke(ActivatableServerRef.java:85)
|#]

[#|2009-07-13T08:45:34.143+0530|INFO|sun-appserver9.1|javax.enterprise.system.stream.out|_ThreadID=17;_ThreadName=Thread-80;|[2009 Jul 13 08:45:34] ERROR (com.cvg.icoms.ejb.helpers.WSApiDelegate:searchCSDs:640) - "Message: Exception Occurred While Searching CSD : SS1-000"
java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
      java.rmi.RemoteException: EJB Exception: ; nested exception is:
      java.lang.NullPointerException
      at weblogic.iiop.InboundResponseImpl.unmarshalReturn(InboundResponseImpl.java:103)
      at weblogic.iiop.IIOPRemoteRef.invokeInternal(IIOPRemoteRef.java:232)
      at weblogic.iiop.IIOPRemoteRef.invoke(IIOPRemoteRef.java:161)
      at com.ceon.pcc.workshop.WorkshopControllerRemote_IIOP_WLStub.searchCSDs(Unknown Source)
      at com.cvg.icoms.ejb.helpers.WSApiDelegate.searchCSDs(WSApiDelegate.java:634)
      at com.cvg.icoms.ejb.helpers.WSApiHelper.searchCSDs(WSApiHelper.java:227)
      at com.cvg.icoms.entity.processor.RMAndFeatProcessor.processIncrementalSyncEntities(RMAndFeatProcessor.java:195)
      at com.cvg.icoms.entity.processor.RMAndFeatProcessor.processEntities(RMAndFeatProcessor.java:233)
      at com.cvg.icoms.adapters.incrementalsync.IncrementalSyncAdapterImpl.startIncrementalSync(IncrementalSyncAdapterImpl.java:50)
      at com.cvg.icoms.adapters.incrementalsync.SocketMsgProcessor.processMsg(SocketMsgProcessor.java:78)
      at com.cvg.icoms.adapters.incrementalsync.SocketMsgProcessor.run(SocketMsgProcessor.java:378)
      at java.lang.Thread.run(Unknown Source)
Caused by: java.rmi.RemoteException: EJB Exception: ; nested exception is:
      java.lang.NullPointerException
      at weblogic.ejb.container.internal.EJBRuntimeUtils.throwRemoteException(EJBRuntimeUtils.java:95)
      at weblogic.ejb.container.internal.BaseEJBObject.handleSystemException(BaseEJBObject.java:713)
      at weblogic.ejb.container.internal.BaseEJBObject.handleSystemException(BaseEJBObject.java:681)
      at weblogic.ejb.container.internal.BaseEJBObject.postInvoke1(BaseEJBObject.java:447)
      at weblogic.ejb.container.internal.BaseEJBObject.postInvokeTxRetry(BaseEJBObject.java:374)
      at com.ceon.pcc.workshop.WorkshopControllerBean_imz2jq_EOImpl.searchCSDs(WorkshopControllerBean_imz2jq_EOImpl.java:5396)
      at com.ceon.pcc.workshop.WorkshopControllerBean_imz2jq_EOImpl_WLSkel.internalInvoke3(Unknown Source)
      at com.ceon.pcc.workshop.WorkshopControllerBean_imz2jq_EOImpl_WLSkel.internalInvoke2(Unknown Source)
      at com.ceon.pcc.workshop.WorkshopControllerBean_imz2jq_EOImpl_WLSkel.internalInvoke1(Unknown Source)
      at com.ceon.pcc.workshop.WorkshopControllerBean_imz2jq_EOImpl_WLSkel.invoke(Unknown Source)
      at weblogic.rmi.internal.activation.ActivatableServerRef.invoke(ActivatableServerRef.java:85)
      at weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:440)
      at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:363)
      at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:147)
      at weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:436)
      at weblogic.rmi.internal.BasicServerRef.access$300(BasicServerRef.java:58)
      at weblogic.rmi.internal.BasicServerRef$BasicExecuteRequest.run(BasicServerRef.java:975)
      at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)
      at weblogic.work.ExecuteThread.run(ExecuteThread.java:181)
Caused by: java.lang.NullPointerException
      at java.io.ObjectOutputStream$BlockDataOutputStream.getUTFLength(ObjectOutputStream.java)
      at java.io.ObjectOutputStream.writeString(ObjectOutputStream.java:1187)
      at java.io.ObjectOutputStream.writeEnum(ObjectOutputStream.java:1268)
      at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1077)
      at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:302)
      at java.util.ArrayList.writeObject(ArrayList.java:569)
      at sun.reflect.GeneratedMethodAccessor15.invoke(Unknown Source)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      at java.lang.reflect.Method.invoke(Method.java:585)
      at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:917)
      at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1339)
      at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1290)
      at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1079)
      at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1375)
      at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1347)
      at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1290)
      at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1079)
      at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:302)
      at weblogic.rjvm.MsgAbbrevOutputStream.writeObject(MsgAbbrevOutputStream.java:614)
      at weblogic.rjvm.MsgAbbrevOutputStream.writeObjectWL(MsgAbbrevOutputStream.java:605)
      at weblogic.rmi.internal.ObjectIO.writeObject(ObjectIO.java:38)
      at weblogic.rjvm.BasicOutboundRequest.marshalArgs(BasicOutboundRequest.java:87)
      at weblogic.rmi.cluster.ClusterableRemoteRef.invoke(ClusterableRemoteRef.java:332)
      at weblogic.rmi.cluster.ClusterableRemoteRef.invoke(ClusterableRemoteRef.java:252)
      at com.ceon.pcc.cm.CMControllerBean_d804x8_EOImpl_922_WLStub.searchCSDs(Unknown Source)
      at com.ceon.pcc.workshop.WorkshopControllerBean.searchCSDs(WorkshopControllerBean.java:2169)
      at com.ceon.pcc.workshop.WorkshopControllerBean_imz2jq_EOImpl.searchCSDs(WorkshopControllerBean_imz2jq_EOImpl.java:5382)
      at com.ceon.pcc.workshop.WorkshopControllerBean_imz2jq_EOImpl_WLSkel.internalInvoke3(Unknown Source)
      at com.ceon.pcc.workshop.WorkshopControllerBean_imz2jq_EOImpl_WLSkel.internalInvoke2(Unknown Source)
      at com.ceon.pcc.workshop.WorkshopControllerBean_imz2jq_EOImpl_WLSkel.internalInvoke1(Unknown Source)
      at com.ceon.pcc.workshop.WorkshopControllerBean_imz2jq_EOImpl_WLSkel.invoke(Unknown Source)
      at weblogic.rmi.internal.activation.ActivatableServerRef.invoke(ActivatableServerRef.java:85)
|#]
Add the WL specific jars (there are several, don't remember the exact names, which differ between server versions anyway so check the documentation) not to the server classpath but the enterprise application classpath.
That way you won't mess up the entire server (if you add them to the server global classpath they may interfere with Glassfish's own classes).
I tried to add weblogic.jar into glassfishdomain/lib/ext directory but doesn't work. I have also tried to add weblogic.jar in web-inf/lib directory but doesn't seem to resolve the WLInitialContextFactory class.
Also adding weblogic.jar in domain/lib/ext folder, doesn't allow server to start.
What ide are you using?
i am deploying the .war file on linux box which acts as a client to another enterprise application deployed on weblogic server on different host.
You can add it to the buildpath of your project, that should do the trick.
But what IDE are you using?
i am using Ecllipse IDE. I am using ant script to package the .war file, which also package the weblogic.jar into WEB-INF/lib folder. When I deploy it on Linux box i am getting java.lang.ClassNotFoundException:weblogic.jndi.WLINitialContextFactory. even though i have package weblogic.jar along with .war file.
I am confused, the client classpath is where you need the jar file. If you bundle it with the war file, how ill the client find the jar.
Flow is

--> Upon application deployment servlet starts and invokes sends message. Receing message application perform some actions and based on that it will invoke the EJB. So really my webapplication is acting as a client to EJB deployed on weblogic instance. So .war file contains the code for the EJB lookup. I think the question now remain is how i should pacakge the weblogic.jar into war file since WEB-IN/lib doesn't seems to be working and adding into domain classpath, doesn't allow server to start.
can you please suggest on how can i set the application classpath on glassfish?
I had suggested adding to classpath on a number of occasions.
ASKER CERTIFIED SOLUTION
Avatar of a_b
a_b

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial