[jboss-user] [EJB/JBoss] - SSL EJB 3.0 invocation

paul_da_programmer do-not-reply at jboss.com
Thu Sep 6 15:21:04 EDT 2007


Environment: JBoss 4.0.5.GA, Sun JDK jdk1.5.0_11


  | C:\Paul\Projects\SSL-EJB\bin>run.bat -c ejb-server
  | ===============================================================================
  | 
  |   JBoss Bootstrap Environment
  | 
  |   JBOSS_HOME: C:\Paul\Projects\SSL-EJB\bin\\..
  | 
  |   JAVA: C:\Program Files\Java\jdk1.5.0_11\bin\java
  | 
  |   JAVA_OPTS:  -Dprogram.name=run.bat -server -Xms128m -Xmx512m -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.ser
  | ver.gcInterval=3600000  -Djavax.net.ssl.keyStore=C:/Paul/Projects/SSL-EJB/server/chap8.keystore -Djavax.net.ssl.keyStore
  | Password=rmi+ssl -Djava.security.debug=access,failure
  | 
  |   CLASSPATH: C:\Program Files\Java\jdk1.5.0_11\lib\tools.jar;C:\Paul\Projects\SSL-EJB\bin\\run.jar
  | 
  | ===============================================================================
  | 


I've tried in vain to get SSL invocation of EJB 3.0 session beans working.
I've successfully followed the guide located here:
http://docs.jboss.org/jbossas/jboss4guide/r3/html/ch8.chapter.html#d0e20905
and gotten their EJB 2.x example working both from an J2SE example and another JBoss server as clients.

I cannot get the exact same example working when updating the SLSB to EJB3.0 
Here are my changes:
The EJB interface

  | package org.jboss.chap8.ex4;
  | 
  | /**
  |  *
  |  * @author  Scott.Stark at jboss.org
  |  * @version $Revision: 1.1 $
  |  */
  | public interface Echo
  | {
  |    public String echo(String arg);
  | }
  | 

The EJB impl

  | package org.jboss.chap8.ex4;
  | 
  | import static javax.ejb.TransactionAttributeType.REQUIRED;
  | import static javax.ejb.TransactionAttributeType.SUPPORTS;
  | import static javax.ejb.TransactionManagementType.CONTAINER;
  | 
  | import java.util.List;
  | 
  | import javax.annotation.security.PermitAll;
  | import javax.ejb.Local;
  | import javax.ejb.Remote;
  | import javax.ejb.TransactionManagement;
  | import javax.persistence.EntityManager;
  | import javax.persistence.NoResultException;
  | import javax.persistence.PersistenceContext;
  | 
  | import org.apache.log4j.Logger;
  | import org.jboss.annotation.ejb.LocalBinding;
  | import org.jboss.annotation.ejb.RemoteBinding;
  | 
  | @javax.ejb.Stateless
  | @Local( {Echo.class})
  | @LocalBinding(jndiBinding = "local/EchoBean4")
  | @Remote( {Echo.class})
  | @RemoteBinding(clientBindUrl="sslsocket://0.0.0.0:3873", jndiBinding="EchoBean4")
  | @TransactionManagement(CONTAINER)
  | @PermitAll
  | public class EchoBean implements Echo
  | {
  |     private static final Logger LOG = Logger.getLogger(EchoBean.class);
  | 
  |    public String echo(String arg)
  |    {
  |       LOG.debug("echo, arg="+arg);
  |       return arg;
  |    }
  | }
  | 
The Client

  | package org.jboss.chap8.ex4;
  | 
  | import java.rmi.RemoteException;
  | import java.security.Security;
  | import javax.naming.InitialContext;
  | 
  | import org.apache.log4j.BasicConfigurator;
  | import org.apache.log4j.Category;
  | import org.apache.log4j.Priority;
  | 
  | import org.jboss.logging.XLevel;
  | import java.util.Properties;
  | import javax.naming.Context;
  | 
  | 
  | /**
  |  *
  |  * @author  Scott.Stark at jboss.org
  |  * @version $Revision: 1.1 $
  |  */
  | public class ExClient
  | {
  |    public static void main(String args[]) throws Exception
  |    {
  |       // Install the Sun JSSE provider since we may not have JSSE installed
  |       Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
  |       // Configure log4j
  |       BasicConfigurator.configure();
  |       Category root = Category.getRoot();
  |       root.setLevel(XLevel.TRACE);
  |       Context iniCtx = new InitialContext();
  |       Object ref = iniCtx.lookup("EchoBean4");
  |       Echo echo = (Echo) ref;
  |       System.out.println("Created Echo");
  |       System.out.println("Created Echo");
  |       System.out.println("Echo.echo()#1 = "+echo.echo("This is call 1"));
  |    }
  | }
  | 
I also removed EchoHome.java and ejb-jar.xml which are superfluous for EJB 3.0.



I get the following log on the server:

  | 2007-09-06 15:02:09,949 DEBUG [org.jboss.ejb3.Ejb3Module] Started jboss.j2ee:service=EJB3,module=chap8-ex4.jar
  | 2007-09-06 15:02:09,949 DEBUG [org.jboss.system.ServiceController] Starting dependent components for: jboss.j2ee:service=EJB3,module=chap8-ex4.jar dependent components: []
  | 2007-09-06 15:02:09,949 INFO  [org.jboss.ejb3.EJB3Deployer] Deployed: file:/C:/Paul/Projects/SSL-EJB/server/ejb-server/deploy/chap8-ex4.jar
  | 2007-09-06 15:02:09,949 DEBUG [org.jboss.deployment.MainDeployer] End deployment start on package: chap8-ex4.jar
  | 2007-09-06 15:02:09,949 DEBUG [org.jboss.deployment.MainDeployer] Deployed package: file:/C:/Paul/Projects/SSL-EJB/server/ejb-server/deploy/chap8-ex4.jar
  | 2007-09-06 15:02:12,100 ERROR [org.jboss.remoting.transport.socket.SocketServerInvoker] Failed to accept socket connection
  | java.lang.reflect.InvocationTargetException
  | 	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
  | 	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
  | 	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
  | 	at java.lang.reflect.Constructor.newInstance(Constructor.java:494)
  | 	at org.jboss.remoting.transport.socket.ServerThread.createServerSocket(ServerThread.java:184)
  | 	at org.jboss.remoting.transport.socket.ServerThread.<init>(ServerThread.java:86)
  | 	at org.jboss.remoting.transport.socket.SocketServerInvoker.processInvocation(SocketServerInvoker.java:426)
  | 	at org.jboss.remoting.transport.socket.SocketServerInvoker.run(SocketServerInvoker.java:388)
  | 	at java.lang.Thread.run(Thread.java:595)
  | Caused by: java.io.StreamCorruptedException: invalid stream header
  | 	at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:764)
  | 	at java.io.ObjectInputStream.<init>(ObjectInputStream.java:277)
  | 	at org.jboss.remoting.loading.ObjectInputStreamWithClassLoader.<init>(ObjectInputStreamWithClassLoader.java:73)
  | 	at org.jboss.remoting.serialization.impl.java.JavaSerializationManager.createInput(JavaSerializationManager.java:52)
  | 	at org.jboss.remoting.transport.socket.ServerSocketWrapper.createInputStream(ServerSocketWrapper.java:56)
  | 	at org.jboss.remoting.transport.socket.ClientSocketWrapper.createStreams(ClientSocketWrapper.java:76)
  | 	at org.jboss.remoting.transport.socket.ClientSocketWrapper.<init>(ClientSocketWrapper.java:54)
  | 	at org.jboss.remoting.transport.socket.ServerSocketWrapper.<init>(ServerSocketWrapper.java:50)
  | 	... 9 more
  | 
  | 
and the client hangs with this message

  | run-example4:
  |      [copy] Copying 1 file to C:\Paul\Projects\SSL-EJB\server\ejb-server\deploy
  |      [echo] Waiting for 5 seconds for deploy...
  |      [java] created Initial Context
  |      [java] about to lookup
  |      [java] after to lookup
  |      [java] retrieved reference to EchoBean4: jboss.j2ee:jar=chap8-ex4.jar,name=EchoBean,service=EJB3
  |      [java] cast completed
  |      [java] Created Echo
  |      [java] Created Echo
  |      [java] 0 [main] DEBUG org.jboss.security.SecurityAssociation  - Using ThreadLocal: false
  |      [java] 16 [main] TRACE org.jboss.security.SecurityAssociation  - getPrincipal, principal=null
  |      [java] 125 [main] DEBUG org.jboss.remoting.Client  - invoke called, but our invoker is disconnected, discarding and
  |  fetching another fresh invoker for: InvokerLocator [sslsocket://162.86.118.144:3873/]
  |      [java] 125 [main] DEBUG org.jboss.remoting.transport.socket.ssl.SSLSocketClientInvoker  - connect called for: org.j
  | boss.remoting.transport.socket.ssl.SSLSocketClientInvoker at 18fd984
  |      [java] 125 [main] TRACE org.jboss.remoting.transport.socket.ssl.SSLSocketClientInvoker  - 1) invoking =>org.jboss.r
  | emoting.InvocationRequest at 91cee with parameter: [advisedMethod=public abstract java.lang.String org.jboss.chap8.ex4.Echo
  | .echo(java.lang.String), unadvisedMethod=public abstract java.lang.String org.jboss.chap8.ex4.Echo.echo(java.lang.String
  | ), metadata=[metaData={REMOTING={INVOKER_LOCATOR=[type=AS_ISvalue=InvokerLocator [sslsocket://162.86.118.144:3873/]], SU
  | BSYSTEM=[type=AS_ISvalue=AOP]}, DISPATCHER={OID=[type=AS_ISvalue=jboss.j2ee:jar=chap8-ex4.jar,name=EchoBean,service=EJB3
  | ]}}], targetObject=null, arguments=[Ljava.lang.Object;@4a63d8]
  |      [java] 156 [main] TRACE org.jboss.remoting.transport.socket.ssl.SSLSocketClientInvoker  - Creating socket number 0
  |      [java] 499 [main] TRACE org.jboss.remoting.serialization.impl.java.JavaSerializationManager  - Creating ObjectOutpu
  | tStream
  |      [java] 499 [main] TRACE org.jboss.remoting.serialization.impl.java.JavaSerializationManager  - Creating ObjectInput
  | StreamWithClassLoader
  | 

I've also tried

  | @RemoteBinding(clientBindUrl="sslsocket://0.0.0.0:14445", jndiBinding="EchoBean4")
  | 
for the Bean implementation for which I get no log from the server and the client still hangs.

Is this issue related to a bug in JBoss remoting as described here:
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3972519#3972519

The solution described there is to 'upgrade to JBoss Remoting 2.0.0'. Can someone point me to a concise guide as to how to do this upgrade? Rebuilding JBoss is not going to be allowed ... I tried upping the lib/jboss-remoting.jar file and was met with failure.

Any help will be greatly appreciated ... at least confirmation that this is a JBoss remoting problem would help. 



View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4081827#4081827

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4081827



More information about the jboss-user mailing list