From: Francisco R. <rev...@im...> - 2002-07-12 21:59:31
|
Hi Tom, Please see inlined comments. On Thu, 11 Jul 2002, Tom Gardner wrote: > I'm having trouble with using IIOP and JBoss 3.0.x. I've=20 > tried all the tricks I've been able to find on the JBoss=20 > website and on this newsgroup without success. Your help=20 > would be appreciated! >=20 > I've taken the standard template project and modified it=20 > slightly so that I can use it as the starting point for=20 > benchmarking the kind of operations we might use in future=20 > systems. The mods are: > =09- add a couple of trivial methods to the=20 > =09 TestSessionBean > =09 =20 > =09- change the TestClient so that it invokes=20 > =09 those methods and so that it uses=20 > =09 PortableRemoteObject.narrow() > =09 =20 > Those modifications work as expected when invoked from a=20 > servlet in the same JVM and from TestClient, *unless* I try > to use IIOP. >=20 > If I try to set TestSessionBean so that it uses IIOP, then > =09- using the jmx-console/HtmlAdaptor shows the Global > =09 JNDI Namespace has a TestSession with the expected > =09 JNDI Name but it is of class javax.ejb.EJBHome > =09 =20 > =09- the TestClient has a ClassCastException during=20 > =09 the PortableRemoteObject.narrow( ref, TestSessionHome.class ) Probably the exception happened because the PortableRemoteObject.narrow() was not able to load an IIOP stub class. More info on this below. > =09 =20 > =09- ref =3D jndiContext.lookup( TestSessionHome.JNDI_NAME ) is > =09 com.sun.corba.se.internal.iiop.CDRInputStream_1_0$1:IOR:xx > =09 where xx is the hex digits shown on the server's log thus: > =09 [ejb/test/TestSession] EJBHome reference for ejb/test/TestSession:IO= R:xx The IOR:xx part looks good. The com.sun.corba.se.internal.iiop part means that your client is not using JacORB. The client is using the Sun ORB provided with, which is not able to dynamically download IIOP stubs. More info on this below. >=20 > =09- eh =3D (javax.ejb.EJBHome) PortableRemoteObject.narrow(ref, javax.ej= b.EJBHome.class) > =09 is also IOR:xx This looks good. >=20 > Things I've tried based on the newsgroup and JBoss website: > =09- jndi.properties changed to have "...url=3DIOR..." > =09 and "cosnaming.CNCtxFactory" Right. > =09- TestSessionBean has tag class tag > =09 @jboss:container-configuration name=3D"IIOP Stateful SessionBean" Right. > =09- TestClient uses PortableRemoteObject.narrow() Right. > =09- using only the jacorb.jar in the JBoss distribution It looks that you are using jacorb.jar only at the server side. The Sun ORB is being used at the client side.=20 > =09- server jacorb.properties unchanged after installation OK. In addition to these things you need to ensure that the client finds the IIOP stubs it needs. Here you have two options: 1) Use JacORB at the client side and grant the client permissions to download the IIOP stubs from the JBoss server. 2) Use the command 'rmic -iiop' to pre-generate the IIOP stub classes and put these classes in the client classpath. With option 2 you do not need to use jacorb.jar at the client side (you may use the Sun ORB), but you need IIOP stub classes avaliable=20 at the client side. Option 1 is the one I recommend. It does not require you to generate=20 IIOP in any way, but requires two changes to the run-client script. - Change 1 is to specify that JacORB is to be used at the client side: keep jacorb.jar in the client classpath (you already have it there) and pass to java the switches=20 '-Dorg.omg.CORBA.ORBClass=3Dorg.jacorb.orb.ORB' and '-Dorg.omg.CORBA.ORBSingletonClass=3Dorg.jacorb.orb.ORBSingleton'. (An alternative -- and overkill -- way to accomplish the same thing is to prepend jacorb.jar to the boot classpath, with a switch like '-Xbootclasspath/p:C:\pack\java\jboss-3.0.1RC1\client\jacorb.jar'.) - Change 2 is to grant the client rights to download IIOP stubs from the JBoss server: pass to java the switches '-Djava.security.manager' and '-Djava.security.policy=3DC:\path\to\your\java.policy' =20 The java.policy file should at least grant your client permission=20 to connect to the port 8083 of the JBoss server. To make things=20 work, it might be easier to start with a java.policy file that=20 grants AllPermission: =20 grant { // Allow everything for now permission java.security.AllPermission; }; Change the run-client script as indicated above, and you may just forget=20 about IIOP stubs. You will never have to generate them.=20 If you use an IOR parser utility to inspect the IOR of your EJB, you=B4ll see that it includes a Java codebase tag: #1: TAG_JAVA_CODEBASE Codebase: http://ukp10775:8083/WebCL[ejb/test/TestSession]/ Clients will automagically download IIOP stubs from the URL above. Hope this helps. (I should have already added this info to the IIOP=20 page at the JBoss site.)=20 Best, Francisco > =09 >=20 > More details below... >=20 > Thanks for you help >=20 > tom gardner >=20 > ------------------------------------------------------------------------ > TestSessionBean excerpts >=20 > /** > * Session Bean Template > * > * ATTENTION: Some of the XDoclet tags are hidden from XDoclet by > * adding a "--" between @ and the namespace. Please remove > * this "--" to make it active or add a space to make an > * active tag inactive. > * > * @ejb:bean name=3D"test/TestSession" > * display-name=3D"Bug TestSession Bean" > * type=3D"Stateful" > * transaction-type=3D"Container" > * jndi-name=3D"ejb/test/TestSession" > * > * @ejb:ejb-ref ejb-name=3D"test/TestEntity" > * ref-name=3D"mytest/TestEntity" > *=20 > * @jboss:container-configuration name=3D"IIOP Stateful SessionBean" > * > * @--ejb:resource-ref res-name=3D"test/Mail" > * res-type=3D"javax.mail.Session" > * res-auth=3D"Container" > * > * @--jboss:resource-manager res-man-class=3D"javax.mail.Session" > * res-man-name=3D"test/Mail" > * res-man-jndi-name=3D"java:Mail" > **/ > public class TestSessionBean > implements SessionBean { >=20 > /** > * @ejb:interface-method view-type=3D"remote" > **/ > public void doNothing() throws RemoteException { > } > .... > ------------------------------------------------------------------------ > Generated jboss.xml >=20 > <?xml version=3D"1.0" encoding=3D"UTF-8"?> > <!DOCTYPE jboss PUBLIC "-//JBoss//DTD JBOSS//EN"=20 > "http://www.jboss.org/j2ee/dtd/jboss.dtd"> > <jboss> > <enterprise-beans> > <entity> > <ejb-name>test/TestEntity</ejb-name> > <jndi-name>ejb/test/TestEntity</jndi-name> > </entity> > <session> > <ejb-name>test/SequenceGenerator</ejb-name> > <jndi-name>ejb/test/SequenceGenerator</jndi-name> > </session> > <session> > <ejb-name>test/TestSession</ejb-name> > <jndi-name>ejb/test/TestSession</jndi-name> > <configuration-name>IIOP Stateful SessionBean</configuration-nam= e> > </session> > <message-driven> > <ejb-name>test/TestMessage</ejb-name> > <destination-jndi-name>queue/testQueue</destination-jndi-name> > </message-driven> > </enterprise-beans> > <resource-managers> > </resource-managers> > </jboss> >=20 > ------------------------------------------------------------------------= =09 > jmx-adaptor/HTML adaptor shows >=20 > +- ejb (class: org.jnp.interfaces.NamingContext) > | +- test (class: org.jnp.interfaces.NamingContext) > | | +- SequenceGenerator (proxy: $Proxy22 implements interface=20 > test.interfaces.SequenceGeneratorHome,interface javax.ejb.Handle) > | | +- TestSession (class: javax.ejb.EJBHome) > | | +- TestEntity (proxy: $Proxy24 implements interface=20 > test.interfaces.TestEntityHome,interface javax.ejb.Handle) > =20 > ------------------------------------------------------------------------= =09 > =20 > TestClient excerpts >=20 > private static TestSession createSession() { > System.out.println("Client creating a TestSession"); > TestSession session =3D null; > try { > =09 InitialContext jndiContext =3D new InitialContext(); > =09 > =09 Object ref =3D jndiContext.lookup( TestSessionHome.JNDI_NAME )= ; > =09 System.out.println("Got reference to " + TestSessionHome.JNDI_= NAME + ": " + ref ); > =09 > =09 javax.ejb.EJBHome eh =3D (javax.ejb.EJBHome) PortableRemoteObj= ect.narrow( ref,=20 > javax.ejb.EJBHome.class ); > =09 System.out.println("Got EJBHome: " + eh ); > =09 =20 > =09 TestSessionHome home =3D (TestSessionHome) PortableRemoteObjec= t.narrow( ref,=20 > TestSessionHome.class ); > =09 System.out.println("Got TestSessionHome: " + home); >=20 > =09 session =3D home.create(); > =09 System.out.println("Got session");=09 > =09} catch ... >=20 > ------------------------------------------------------------------------ > client jndi.properties; server config unchanged after installation >=20 > # iiop > java.naming.provider.url=3DIOR:000000000000002B49444C3A6F6D672E6F72672F43= 6F734E61 > 6D696E672F4E616D696E67436F6E746578744578743A312E3000000000000200000000000= 0 > 0068000102000000000E3135382E3233342E37392E38340021EB000000114A426F73732F4= E > 616D696E672F726F6F74000000000000020000000000000008000000004A4143000000000= 1 > 0000001C00000000000100010000000105010001000101090000000105010001000000010= 0 > 00002C0000000000000001000000010000001C00000000000100010000000105010001000= 1 > 01090000000105010001 > java.naming.factory.initial=3Dcom.sun.jndi.cosnaming.CNCtxFactory >=20 > # non-iiop > #java.naming.factory.initial=3Dorg.jnp.interfaces.NamingContextFactory > #java.naming.factory.url.pkgs=3Dorg.jboss.naming:org.jnp.interfaces > #java.naming.provider.url=3Dlocalhost >=20 > ------------------------------------------------------------------------ > server log: selected INFO messages >=20 > [CorbaORBService] Naming:=20 > [IOR:000000000000002B49444C3A6F6D672E6F72672F436F734E616D696E672F4E616D69= 6 > E67436F6E746578744578743A312E30000000000002000000000000006800010200000000= 0 > E3135382E3233342E37392E38340021EB000000114A426F73732F4E616D696E672F726F6F= 7 > 4000000000000020000000000000008000000004A414300000000010000001C0000000000= 0 > 100010000000105010001000101090000000105010001000000010000002C000000000000= 0 > 001000000010000001C000000000001000100000001050100010001010900000001050100= 0 > 1] > [CorbaORBService] IR:=20 > [IOR:000000000000002149444C3A6F6D672E6F72672F434F5242412F5265706F7369746F= 72 > 793A312E3000000000000000020000000000000064000102000000000E3135382E3233342= E > 37392E38340021EB0000000E4A426F73732F546573742F49523A000000000002000000000 > 0000008000000004A414300000000010000001C0000000000010001000000010501000100= 0 > 101090000000105010001000000010000002C0000000000000001000000010000001C0000= 0 > 000000100010000000105010001000101090000000105010001] > [ejb/test/TestSession] EJBHome reference for=20 > ejb/test/TestSession:IOR:0000000000000035524D493A746573742E696E7465726661= 636573 > 2E5465737453657373696F6E486F6D653A303030303030303030303030303030300000000= 0 > 0000000200000000000000BA000102000000000E3135382E3233342E37392E38340021EB0= 0 > 0000244A426F73732F454A42486F6D652F656A62262574657374262554657374536573736 > 96F6E000000030000000000000008000000004A414300000000010000001C000000000001= 0 > 0010000000105010001000101090000000105010001000000190000003A00000000000000= 3 > 2687474703A2F2F756B7031303737353A383038332F576562434C5B656A622F746573742F > 5465737453657373696F6E5D2F000000000000010000006E0000000000000002000000010= 0 > 00001C0000000000010001000000010501000100010109000000010501000100000019000= 0 > 003A0000000000000032687474703A2F2F756B7031303737353A383038332F576562434C5 > B656A622F746573742F5465737453657373696F6E5D2F00 > [ejb/test/TestSession] Bound test/TestSession to ejb/test/TestSession > [test/TestEntity] Created table 'TESTENTITY' successfully. > [EjbModule] Started > [MainDeployer] Deployed package: file:/C:/pack/java/jboss-3.0.1RC1/server= /all/deploy/ejb- > test.jar > [MainDeployer] Starting deployment of package: file:/C:/pack/java/jboss- > 3.0.1RC1/server/all/deploy/jmx-ejb-adaptor.jar >=20 > ------------------------------------------------------------------------ > server startup using run.bat >=20 > C:\pack\java\jboss-3.0.1RC1\bin>run -c all > ECHO is off. > . > JBoss Bootstrap Environment > . > JBOSS_HOME: C:\pack\java\jboss-3.0.1RC1\bin\\.. > . > JAVA: c:\pack\java\j2sdk1.4.0_01\bin\java > . > JAVA_OPTS: -server -Dprogram.name=3Drun.bat > . > CLASSPATH: ;c:\pack\java\j2sdk1.4.0_01\lib\tools.jar;C:\pack\java\jboss= -3.0.1R > C1\bin\\run.jar > . > ECHO is off. > . > 13:12:39,379 INFO [Server] JBoss Release: JBoss-3.0.1RC1 CVSTag=3DBranch= _3_0 > 13:12:39,439 INFO [Server] Home Dir: C:\pack\java\jboss-3.0.1RC1 > 13:12:39,439 INFO [Server] Home URL: file:/C:/pack/java/jboss-3.0.1RC1/ > 13:12:39,439 INFO [Server] Library URL: file:/C:/pack/java/jboss-3.0.1RC= 1/lib/ > 13:12:39,439 INFO [Server] Patch URL: null > 13:12:39,449 INFO [Server] Server Name: all > 13:12:39,449 INFO [Server] Server Home Dir: C:\pack\java\jboss-3.0.1RC1\= server\all > 13:12:39,449 INFO [Server] Server Home URL: file:/C:/pack/java/jboss-3.0= =2E1RC1/server/all/ > 13:12:39,449 INFO [Server] Server Data Dir: C:\pack\java\jboss-3.0.1RC1\= server\all\db > 13:12:39,449 INFO [Server] Server Temp Dir: C:\pack\java\jboss-3.0.1RC1\= server\all\tmp > 13:12:39,449 INFO [Server] Server Config URL: file:/C:/pack/java/jboss- > 3.0.1RC1/server/all/conf/ > 13:12:39,449 INFO [Server] Server Library URL: file:/C:/pack/java/jboss- > 3.0.1RC1/server/all/lib/ >=20 > ------------------------------------------------------------------------ > client startup using run-client.bat > C:\users\tgg\java\jb3template\build\bin>run-client > C:\pack\java\j2sdk1.4.0_01\jre\bin\java.exe -classpath=20 > ".; > C:\pack\java\jboss-3.0.1RC1\client\concurrent.jar; > C:\pack\java\jboss-3.0.1RC1\client\gnu-regexp.jar; > C:\pack\java\jboss-3.0.1RC1\client\jaas.jar; > C:\pack\java\jboss-3.0.1RC1\client\jacorb.jar; > C:\pack\java\jboss-3.0.1RC1\client\jboss-client.jar; > C:\pack\java\jboss-3.0.1RC1\client\jboss-common-client.jar; > C:\pack\java\jboss-3.0.1RC1\client\jboss-iiop-client.jar; > C:\pack\java\jboss-3.0.1RC1\client\jboss-j2ee.jar; > C:\pack\java\jboss-3.0.1RC1\client\jboss-jsr77.jar; > C:\pack\java\jboss-3.0.1RC1\client\jboss-net-client.jar; > C:\pack\java\jboss-3.0.1RC1\client\jboss-system-client.jar; > C:\pack\java\jboss-3.0.1RC1\client\jbossha-client.jar; > C:\pack\java\jboss-3.0.1RC1\client\jbossmq-client.jar; > C:\pack\java\jboss-3.0.1RC1\client\jbossmqha.jar; > C:\pack\java\jboss-3.0.1RC1\client\jbosssx-client.jar; > C:\pack\java\jboss-3.0.1RC1\client\jcert.jar; > C:\pack\java\jboss-3.0.1RC1\client\jmx-connector-client-factory.jar; > C:\pack\java\jboss-3.0.1RC1\client\jmx-ejb-connector-client.jar; > C:\pack\java\jboss-3.0.1RC1\client\jmx-rmi-connector-client.jar; > C:\pack\java\jboss-3.0.1RC1\client\jnet.jar; > C:\pack\java\jboss-3.0.1RC1\client\jnp-client.jar; > C:\pack\java\jboss-3.0.1RC1\client\jsse.jar; > C:\pack\java\jboss-3.0.1RC1\client\log4j.jar; > ..\client\client-test.jar" test.client.TestClient >=20 > Client creating a TestSession > Got reference to ejb/test/TestSession:=20 > com.sun.corba.se.internal.iiop.CDRInputStream_1_0$1:IOR:00000000000000355= 24d493a746 > 573742e696e74657266616365732e5465737453657373696f6e486f6d653a303030303030= 30 > 303030303030303030000000000000000200000000000000ba000102000000000e3135382= e > 3233342e37392e38340021eb000000244a426f73732f454a42486f6d652f656a622625746= 573 > 7426255465737453657373696f6e000000030000000000000008000000004a41430000000= 00 > 10000001c0000000000010001000000010501000100010109000000010501000100000019= 0 > 000003a0000000000000032687474703a2f2f756b7031303737353a383038332f57656243= 4c > 5b656a622f746573742f5465737453657373696f6e5d2f000000000000010000006e00000= 000 > 00000002000000010000001c0000000000010001000000010501000100010109000000010= 5 > 010001000000190000003a0000000000000032687474703a2f2f756b7031303737353a383= 03 > 8332f576562434c5b656a622f746573742f5465737453657373696f6e5d2f00 > Got EJBHome:=20 > IOR:0000000000000035524d493a746573742e696e74657266616365732e5465737453657= 373696f6e486f6d653a30303030303030303030303030303030000000000000000200000000= 000000ba000102000000000e3135382e3233342e37392e38340021eb000000244a426f73732= f454a42486f6d652f656a6226257465737426255465737453657373696f6e00000003000000= 00 > 00000008000000004a414300000000010000001c000000000001000100000001050100010= 00101090000000105010001000000190000003a0000000000000032687474703a2f2f756b70= 31303737353a383038332f576562434c5b656a622f746573742f5465737453657373696f6e5= d2f000000000000010000006e0000000000000002000000010000001c000000000001000100= 00 > 000105010001000101090000000105010001000000190000003a000000000000003268747= 4703a2f2f756b7031303737353a383038332f576562434c5b656a622f746573742f54657374= 53657373696f6e5d2f00 > java.lang.ClassCastException =20 > =09at=20 > com.sun.corba.se.internal.javax.rmi.PortableRemoteObject.narrow(PortableR= emoteObject.java:293) > at javax.rmi.PortableRemoteObject.narrow(PortableRemoteObject.jav= a:134) > at test.client.TestClient.createSession(TestClient.java:96) > at test.client.TestClient.main(TestClient.java:22) >=20 >=20 > ------------------------------------------------------------------------ > ------------------------------------------------------------------------ > ------------------------------------------------------------------------ > ------------------------------------------------------------------------ > ------------------------------------------------------------------------ >=20 >=20 >=20 >=20 >=20 >=20 >=20 > ---- > "In anything at all, perfection is finally attained not when there=20 > is no longer anything to add, but when there is no longer anything=20 > to take away." Antoine de Saint Exupery, in "The Little Prince" >=20 >=20 > ------------------------------------------------------- > This sf.net email is sponsored by:ThinkGeek > PC Mods, Computing goodies, cases & more > http://thinkgeek.com/sf > _______________________________________________ > JBoss-user mailing list > JBo...@li... > https://lists.sourceforge.net/lists/listinfo/jboss-user >=20 |