Quartz Job unable to access deployed EJB (JBoss AS 5.01)
josey May 7, 2009 8:43 PMI am upgrading from JBoss AS 4.05 to JBoss 5.01. The code mentioned below works fine in JBoss 4.05.
I have a quartz job that is unable to get a remote access to a deployed EJB. I know that the EJB is deployed because I see it in the JMX console. Additionally, I wrote a client program that uses the same code (as is used by the quartz job) to access the EJB remotely. The client program works fine.
It seems to be a class loader issue (where quartz is running).
Here is the relevant part of the stack trace:
2009-05-07 17:30:00,101 INFO [com.squaretrade.locator.Locator] (DefaultQuartzScheduler_Worker-2) LOOKING UP SESSION: batch/QueueingEngineMessageSenderImpl/remote
2009-05-07 17:30:00,101 INFO [com.squaretrade.locator.Locator] (DefaultQuartzScheduler_Worker-2) USING PROVIDER URL FOR REMOTE CONTEXT: jboss-batch-local-11:1100,jboss-batch-local-12:1100 2009-05-07 17:30:00,102 DEBUG [org.jboss.ejb3.proxy.objectfactory.ProxyObjectFactory] (DefaultQuartzScheduler_Worker-2) org.jboss.ejb3.proxy.objectfactory.ProxyObjectFactory servicing request for batch/QueueingEngineMessageSenderImpl/remote
2009-05-07 17:30:00,140 DEBUG [org.jboss.remoting.InvokerRegistry] (DefaultQuartzScheduler_Worker-2) removed org.jboss.remoting.transport.local.LocalClientInvoker@1ac1a45 from registry
2009-05-07 17:30:00,140 DEBUG [org.jboss.ejb3.proxy.objectfactory.session.SessionProxyObjectFactory] (DefaultQuartzScheduler_Worker-2) Created Proxy of type $Proxy271 for EJB3 Business Interface: com.squaretrade.queueing.QueueingEngineMessageSenderRemote
2009-05-07 17:30:00,140 INFO [com.squaretrade.locator.Locator] (DefaultQuartzScheduler_Worker-2) CAUGHT NAMING EXCEPTION: Could not dereference object ATTEMPTING RETRY
2009-05-07 17:30:00,201 ERROR [com.squaretrade.locator.Locator] (DefaultQuartzScheduler_Worker-2) CAUGHT NAMING EXCEPTION: Could not dereference object FINISHED RETRYING
2009-05-07 17:30:00,201 ERROR [com.squaretrade.queueing.AbstractQueueingOperation] (DefaultQuartzScheduler_Worker-2) Exception caught in AbstractQueueingOperation.execute when executing queueing spec: com.squaretrade.queueing.spec.WarrantyOrderRequeueingOperation
javax.naming.NamingException: Could not dereference object [Root exception is java.lang.RuntimeException: Can not find interface declared by Proxy in our CL + BaseClassLoader@16fde80{vfszip:/usr/local/jboss-5.0.1.GA/server/batch/deploy/quartz-ra.rar/}]
at org.jnp.interfaces.NamingContext.getObjectInstanceWrapFailure(NamingContext.java:1472)
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:818)
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:682)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at com.squaretrade.locator.Locator.getSession(Locator.java:196)
at com.squaretrade.queueing.AbstractQueueingOperation.sendMessage(AbstractQueueingOperation.java:137)
at com.squaretrade.queueing.AbstractQueueingOperation.execute(AbstractQueueingOperation.java:101)
at com.squaretrade.semaphore.quartz.AbstractSerialQuartzJob.execute(AbstractSerialQuartzJob.java:56)
at sun.reflect.GeneratedMethodAccessor436.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.jboss.aop.joinpoint.MethodInvocation.invokeTarget(MethodInvocation.java:122)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:111)
at org.jboss.ejb3.EJBContainerInvocationWrapper.invokeNext(EJBContainerInvocationWrapper.java:69)
at org.jboss.ejb3.interceptors.aop.InterceptorSequencer.invoke(InterceptorSequencer.java:73)
at org.jboss.ejb3.interceptors.aop.InterceptorSequencer.aroundInvoke(InterceptorSequencer.java:59)
at sun.reflect.GeneratedMethodAccessor435.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.jboss.aop.advice.PerJoinpointAdvice.invoke(PerJoinpointAdvice.java:174)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
at org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor.fillMethod(InvocationContextInterceptor.java:72)
at org.jboss.aop.advice.org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor_z_fillMethod_11445709.invoke(InvocationContextInterceptor_z_fillMethod_11445709.java)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
at org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor.setup(InvocationContextInterceptor.java:88)
at org.jboss.aop.advice.org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor_z_setup_11445709.invoke(InvocationContextInterceptor_z_setup_11445709.java)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
at org.jboss.ejb3.connectionmanager.CachedConnectionInterceptor.invoke(CachedConnectionInterceptor.java:62)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
at org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor.invoke(TransactionScopedEntityManagerInterceptor.java:56)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:47)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
at org.jboss.ejb3.tx.NullInterceptor.invoke(NullInterceptor.java:42)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:68)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
at org.jboss.aspects.tx.TxPolicy.invokeInCallerTx(TxPolicy.java:126)
at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:194)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
at org.jboss.ejb3.tx.NullInterceptor.invoke(NullInterceptor.java:42)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
at org.jboss.ejb3.security.Ejb3AuthenticationInterceptorv2.invoke(Ejb3AuthenticationInterceptorv2.java:80)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
at org.jboss.ejb3.BlockContainerShutdownInterceptor.invoke(BlockContainerShutdownInterceptor.java:67)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
at org.jboss.aspects.currentinvocation.CurrentInvocationInterceptor.invoke(CurrentInvocationInterceptor.java:67)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
at org.jboss.ejb3.mdb.MessagingContainer.localInvoke(MessagingContainer.java:262)
at org.jboss.ejb3.mdb.inflow.MessageInflowLocalProxy.delivery(MessageInflowLocalProxy.java:270)
at org.jboss.ejb3.mdb.inflow.MessageInflowLocalProxy.invoke(MessageInflowLocalProxy.java:140)
at $Proxy212.execute(Unknown Source)
at org.jboss.resource.adapter.quartz.inflow.QuartzJob.execute(QuartzJob.java:57)
at org.quartz.core.JobRunShell.run(JobRunShell.java:203)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:520)
Caused by: java.lang.RuntimeException: Can not find interface declared by Proxy in our CL + BaseClassLoader@16fde80{vfszip:/usr/local/jboss-5.0.1.GA/server/batch/deploy/quartz-ra.rar/}
at org.jboss.ejb3.proxy.objectfactory.ProxyObjectFactory.redefineProxyInTcl(ProxyObjectFactory.java:341)
at org.jboss.ejb3.proxy.objectfactory.session.SessionProxyObjectFactory.createProxy(SessionProxyObjectFactory.java:134)
at org.jboss.ejb3.proxy.objectfactory.session.stateless.StatelessSessionProxyObjectFactory.getProxy(StatelessSessionProxyObjectFactory.java:79)
at org.jboss.ejb3.proxy.objectfactory.ProxyObjectFactory.getObjectInstance(ProxyObjectFactory.java:156)
at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:304)
at org.jnp.interfaces.NamingContext.getObjectInstance(NamingContext.java:1447)
at org.jnp.interfaces.NamingContext.getObjectInstanceWrapFailure(NamingContext.java:1464)
... 54 more
Caused by: java.lang.ClassNotFoundException: com.squaretrade.queueing.QueueingEngineMessageSenderRemote from BaseClassLoader@16fde80{VFSClassLoaderPolicy@178d35f{name=vfszip:/usr/local/jboss-5.0.1.GA/server/batch/deploy/quartz-ra.rar/ domain=ClassLoaderDomain@790192{name=DefaultDomain parentPolicy=BEFORE parent=org.jboss.system.NoAnnotationURLClassLoader@1c247a0} roots=[MemoryContextHandler@24978055[path= context=vfsmemory://4sg251y-ua7hys-fug1iydt-1-fug1kcb3-22 real=vfsmemory://4sg251y-ua7hys-fug1iydt-1-fug1kcb3-22], DelegatingHandler@6674454[path=quartz-ra.rar context=file:/usr/local/jboss-5.0.1.GA/server/batch/deploy/ real=file:/usr/local/jboss-5.0.1.GA/server/batch/deploy/quartz-ra.rar], DelegatingHandler@5091970[path=quartz-ra.rar/quartz-ra.jar context=file:/usr/local/jboss-5.0.1.GA/server/batch/deploy/ real=file:/usr/local/jboss-5.0.1.GA/server/batch/deploy/quartz-ra.rar/quartz-ra.jar]] delegates=null exported=[org.jboss.resource.adapter.quartz.inflow, META-INF] <IMPORT-ALL>NON_EMPTY}}
at org.jboss.classloader.spi.base.BaseClassLoader.loadClass(BaseClassLoader.java:422)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at org.jboss.ejb3.proxy.objectfactory.ProxyObjectFactory.redefineProxyInTcl(ProxyObjectFactory.java:337)
... 60 more
2009-05-07 17:30:00,207 DEBUG [org.jboss.jpa.deployment.ManagedEntityManagerFactory] (DefaultQuartzScheduler_Worker-2) ************** closing entity managersession **************