[jboss-user] [Remoting] - Problem calling EJB3 method via HTTP only
formica
do-not-reply at jboss.com
Fri May 25 10:39:24 EDT 2007
I have a problem in testing remote method calls via http using JBOSS 4.2.0.GA application server.
I want to call EJB3 methods via HTTP ONLY (I have a firewall problem, as usual ;-) )
(REMARK: using simple RMI and adequate JNDI parameter the client
code is working correctly...)
Following many forums/doc/wiki pages I have ended up with a configuration of the following type:
SERVER SIDE:
1) I have modified ejb3.deployer/META-INF/jboss-service.xml in the following way:
| <mbean code="org.jboss.remoting.transport.Connector"
| name="jboss.remoting:type=Connector,name=DefaultEjb3Connector,handler=ejb3">
| <depends>jboss.aop:service=AspectDeployer</depends>
| <attribute name="InvokerLocator">servlet://${jboss.bind.address}:8080/invoker/EJBInvokerServlet</attribute>
| <attribute name="Configuration">
| <handlers>
| <handler subsystem="AOP">org.jboss.aspects.remoting.AOPRemotingInvocationHandler</handler>
| </handlers>
| </attribute>
| </mbean>
|
2) I have slightly modified the http-invoker.sar/META-INF/jboss-service.xml adding the the following lines to the 3 relative MBEAN definitions:
|
| <attribute name="InvokerURL">http://${jboss.bind.address}:8080/invoker/EJBInvokerServlet</attribute>
| .....
| <attribute name="InvokerURL">http://${jboss.bind.address}:8080/invoker/JMXInvokerServlet</attribute>
| .....
| <attribute name="InvokerURL">http://${jboss.bind.address}:8080/invoker/readonly/JMXInvokerServlet</attribute>
|
|
3) I have modified the conf/standardjboss.xml config file like :
| <invoker-proxy-binding>
| <name>stateless-http-invoker</name>
| <invoker-mbean>jboss:service=invoker,type=http</invoker-mbean>
| <proxy-factory>org.jboss.proxy.ejb.ProxyFactory</proxy-factory>
| <proxy-factory-config>
| <client-interceptors>
| <home>
| <interceptor>org.jboss.proxy.ejb.HomeInterceptor</interceptor>
| <interceptor>org.jboss.proxy.SecurityInterceptor</interceptor>
| <interceptor>org.jboss.proxy.TransactionInterceptor</interceptor>
| <interceptor call-by-value="false">org.jboss.invocation.InvokerInterceptor</interceptor>
| <interceptor call-by-value="true">org.jboss.invocation.MarshallingInvokerInterceptor</interceptor>
| </home>
| <bean>
| <interceptor>org.jboss.proxy.ejb.StatelessSessionInterceptor</interceptor>
| <interceptor>org.jboss.proxy.SecurityInterceptor</interceptor>
| <interceptor>org.jboss.proxy.TransactionInterceptor</interceptor>
| <interceptor call-by-value="false">org.jboss.invocation.InvokerInterceptor</interceptor>
| <interceptor call-by-value="true">org.jboss.invocation.MarshallingInvokerInterceptor</interceptor>
| </bean>
| </client-interceptors>
| </proxy-factory-config>
| </invoker-proxy-binding>
|
and the container part accordingly
| <container-name>Standard Stateless SessionBean</container-name>
| <call-logging>false</call-logging>
| <invoker-proxy-binding-name>stateless-http-invoker</invoker-proxy-binding-name>
| .....
|
4) I have added the following annotation to my stateless session
|
| //@RemoteBinding(jndiBinding="AsapServer/OltestlinesDAOBean/remote")
| @RemoteBindings({
| @RemoteBinding(jndiBinding="AsapServer/OltestlinesDAOBean/remote"),
| @RemoteBinding(clientBindUrl="servlet://localhost:8080/invoker/EJBInvokerServlet",
| jndiBinding="AsapServer/OltestlinesDAOBean/http")
| })
|
|
and finally...
CLIENTSIDE
5) I have defined the following JNDI properties for the connection :
| java.naming.factory.initial=org.jboss.naming.HttpNamingContextFactory java.naming.provider.url=http://$host:$port/invoker/JNDIFactory java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
|
| where host/port are : localhost/8080 or 127.0.0.1/8080
|
Now, I get correctly the stub to the session bean in my client, and I
managed to execute the method, but the method execution itself fails
with the following exception from the server:
| 2007-05-25 16:20:50,986 DEBUG [org.jboss.invocation.http.servlet.InvokerServlet] Invoke threw exception
| java.lang.ClassCastException: org.jboss.remoting.InvocationRequest
| at org.jboss.invocation.http.servlet.InvokerServlet.processRequest(InvokerServlet.java:137)
| at org.jboss.invocation.http.servlet.InvokerServlet.doPost(InvokerServlet.java:224)
| at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
| at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
| at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
| at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
| at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
| at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
| at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
| at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
| at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
| at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179)
| at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433)
| at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
| at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
| at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
| at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:156)
| at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
| at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:241)
| at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
| at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:580)
| at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
| at java.lang.Thread.run(Thread.java:613)
|
while the client sees the following :
| getting stub for beanName OltestlinesDAO
| obj looked up in OltestlinesDAO/http
|
| java.lang.ClassCastException: java.lang.String
| at org.jboss.aspects.remoting.InvokeRemoteInterceptor.invoke(InvokeRemoteInterceptor.java:62)
| at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| at org.jboss.aspects.tx.ClientTxPropagationInterceptor.invoke(ClientTxPropagationInterceptor.java:61)
| at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| at org.jboss.aspects.security.SecurityClientInterceptor.invoke(SecurityClientInterceptor.java:53)
| at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| at org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:72)
| at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| at org.jboss.ejb3.stateless.StatelessRemoteProxy.invoke(StatelessRemoteProxy.java:103)
| at $Proxy2.findOlsLike(Unknown Source)
| at asap.client.delegate.OpticallineDBJboss.listOpticallines(OpticallineDBJboss.java:82)
| at asap.client.delegate.OpticallineDBJboss.main(OpticallineDBJboss.java:202)
| at org.jboss.aspects.remoting.InvokeRemoteInterceptor.invoke(InvokeRemoteInterceptor.java:74)
| at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| at org.jboss.aspects.tx.ClientTxPropagationInterceptor.invoke(ClientTxPropagationInterceptor.java:61)
| at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| at org.jboss.aspects.security.SecurityClientInterceptor.invoke(SecurityClientInterceptor.java:53)
| at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| at org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:72)
| at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| at org.jboss.ejb3.stateless.StatelessRemoteProxy.invoke(StatelessRemoteProxy.java:103)
| at $Proxy2.findOlsLike(Unknown Source)
| at asap.client.delegate.OpticallineDBJboss.listOpticallines(OpticallineDBJboss.java:82)
| at asap.client.delegate.OpticallineDBJboss.main(OpticallineDBJboss.java:202)
| Exception in thread "main" java.lang.NullPointerException
| at asap.client.delegate.OpticallineDBJboss.main(OpticallineDBJboss.java:203)
|
Could you please explain me what is going on ? I'll try to post the message also in Remoting forum...
Andrea
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4048700#4048700
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4048700
More information about the jboss-user
mailing list