1 Reply Latest reply on Nov 2, 2012 1:34 AM by ron_sigal

    How to verify that an remote interface on client and server side is the same?

    windigo

      Hi,

      I've a fatclient consuming a @Remote ejb-service at jboss 6.1.0. Both client and server are sharing the same remote-interface.

      To get a proxyobject for the service on client-side looks something like this:

       

      Context context = new ...

      EJBService service = context.lookup("jndiurl");

       

      Since the EJBservice was sucessfully deployed at jboss and the jndi-url is sucessfully published I will always get a valid proxy-object on client side. The problem I'm facing quite often is that we update our cilentcode and forget to redeploy the updated server-application which is using this changed EJBService.

      For.example after changing a method signature or add a new method in the interface its still possible on client-side to lookup a valid remote-proxy-object from an outversioned @Remote-EJBService on server-side. Only after invoking the changed methods on client side I got a stacktrace like this:

       

      Exception in thread "main" java.lang.NullPointerException

                at org.jboss.ejb3.stateless.StatelessContainer.dynamicInvoke(StatelessContainer.java:345)

                at org.jboss.ejb3.session.InvokableContextClassProxyHack._dynamicInvoke(InvokableContextClassProxyHack.java:53)

                at org.jboss.aop.Dispatcher.invoke(Dispatcher.java:91)

                at org.jboss.aspects.remoting.AOPRemotingInvocationHandler.invoke(AOPRemotingInvocationHandler.java:82)

                at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:967)

                at org.jboss.remoting.transport.socket.ServerThread.completeInvocation(ServerThread.java:791)

                at org.jboss.remoting.transport.socket.ServerThread.processInvocation(ServerThread.java:744)

                at org.jboss.remoting.transport.socket.ServerThread.dorun(ServerThread.java:586)

                at org.jboss.remoting.transport.socket.ServerThread.run(ServerThread.java:234)

                at org.jboss.remoting.MicroRemoteClientInvoker.invoke(MicroRemoteClientInvoker.java:218)

                at org.jboss.remoting.Client.invoke(Client.java:2070)

                at org.jboss.remoting.Client.invoke(Client.java:879)

                at org.jboss.aspects.remoting.InvokeRemoteInterceptor.invoke(InvokeRemoteInterceptor.java:60)

                at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)

                at org.jboss.aspects.tx.ClientTxPropagationInterceptor.invoke(ClientTxPropagationInterceptor.java:61)

                at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)

                at org.jboss.ejb3.security.client.SecurityClientInterceptor.invoke(SecurityClientInterceptor.java:65)

                at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)

                at org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:77)

                at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)

                at org.jboss.ejb3.async.impl.interceptor.AsynchronousClientInterceptor.invoke(AsynchronousClientInterceptor.java:143)

                at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)

                at org.jboss.aspects.remoting.PojiProxy.invoke(PojiProxy.java:62)

                at $Proxy8.invoke(Unknown Source)

                at org.jboss.ejb3.proxy.impl.handler.session.SessionProxyInvocationHandlerBase.invoke(SessionProxyInvocationHandlerBase.java:185)

                at $Proxy7.bla(Unknown Source)

                at EJBServiceClient.main(EJBServiceClient.java:33)

                at org.jboss.aspects.remoting.InvokeRemoteInterceptor.invoke(InvokeRemoteInterceptor.java:72)

                at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)

                at org.jboss.aspects.tx.ClientTxPropagationInterceptor.invoke(ClientTxPropagationInterceptor.java:61)

                at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)

                at org.jboss.ejb3.security.client.SecurityClientInterceptor.invoke(SecurityClientInterceptor.java:65)

                at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)

                at org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:77)

                at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)

                at org.jboss.ejb3.async.impl.interceptor.AsynchronousClientInterceptor.invoke(AsynchronousClientInterceptor.java:143)

                at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)

                at org.jboss.aspects.remoting.PojiProxy.invoke(PojiProxy.java:62)

                at $Proxy8.invoke(Unknown Source)

                at org.jboss.ejb3.proxy.impl.handler.session.SessionProxyInvocationHandlerBase.invoke(SessionProxyInvocationHandlerBase.java:185)

                at $Proxy7.bla(Unknown Source)

                at EJBServiceClient.main(EJBServiceClient.java:33)

       

      Is it possible to check wether the packaged interface in the application-jars/ears/wars on client and server side are the same - something like the serialversionUID on entities?

       

      thanks

      Felix