hi if you want to share the same API then you need to share it in a common loader ie tomee/lib
Romain Manni-Bucau @rmannibucau <https://twitter.com/rmannibucau> | Blog <http://rmannibucau.wordpress.com> | Github <https://github.com/rmannibucau> | LinkedIn <https://www.linkedin.com/in/rmannibucau> | Tomitriber <http://www.tomitribe.com> 2015-04-07 20:14 GMT+02:00 mohben <[email protected]>: > Hi folks, > > I have two applications APP1 and APP2 packaged in two EARs and deployed in > the same Tomee. > APP1 is exposing a local and remote interfaces, APP2 a remote interface > which invokes APP1 interfaces. > > As the two apps share the same JVM, I thought pass through local interface > to avoid RMI overhead ... but I am stocked with cast exception : > > java.lang.ClassCastException: com.sun.proxy.$Proxy216 cannot be cast to > com.app1.service.MyLocal > at com.app2.service.MyRemote.someMethod(BeanR.java:42) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) > at > > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:606) > at > > org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext.java:192) > at > > org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:173) > at > > org.apache.openejb.monitoring.StatsInterceptor.record(StatsInterceptor.java:181) > at > > org.apache.openejb.monitoring.StatsInterceptor.invoke(StatsInterceptor.java:100) > at sun.reflect.GeneratedMethodAccessor89.invoke(Unknown Source) > at > > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:606) > at > > org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext.java:192) > at > > org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:173) > at > > org.apache.openejb.core.interceptor.InterceptorStack.invoke(InterceptorStack.java:85) > at > > org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:227) > at > > org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:194) > at > > org.apache.openejb.server.ejbd.EjbRequestHandler.doEjbObject_BUSINESS_METHOD(EjbRequestHandler.java:370) > at > > org.apache.openejb.server.ejbd.EjbRequestHandler.processRequest(EjbRequestHandler.java:181) > at > > org.apache.openejb.server.ejbd.EjbDaemon.processEjbRequest(EjbDaemon.java:344) > at > org.apache.openejb.server.ejbd.EjbDaemon.service(EjbDaemon.java:240) > at > org.apache.openejb.server.ejbd.EjbServer.service(EjbServer.java:86) > at > > org.apache.openejb.server.httpd.ServerServlet.service(ServerServlet.java:58) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) > at > > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) > at > > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) > at > org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) > at > > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) > at > > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) > at > > org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) > at > > org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) > at > org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:44) > at > > org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:610) > at > > org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) > at > > org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) > at > > org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) > at > org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) > at > > org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070) > at > > org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611) > at > > org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316) > at > > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) > at > > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) > at > > org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) > at java.lang.Thread.run(Thread.java:745) > > here is a snippet of someMethod code : > > final Properties p = new Properties(); > p.put(Context.INITIAL_CONTEXT_FACTORY, > "org.apache.openejb.client.LocalInitialContextFactory"); > MyLocal l = (MyLocal) new InitialContext(p).lookup("MyLocalLocal"); > > The use of PortableRemoteObject.narrow does not fix the problem ! > > Any hint ? Thanks in advance. > > > NB : There is no problem when invoking remotes. > > > > > > > > > -- > View this message in context: > http://tomee-openejb.979440.n4.nabble.com/ClassCastException-when-handing-local-interface-lookup-from-another-local-ear-same-JVM-tp4674329.html > Sent from the TomEE Users mailing list archive at Nabble.com. >
