[jboss-user] [EJB 3.0] - CNFE on business interface when injecting MBean in a MDB

sannegrinovero do-not-reply at jboss.com
Thu Jul 23 11:22:17 EDT 2009


Hello,

env: JBoss 5.1.0.GA on Sun JDK 6, Fedora

want to do:
I'm defining a service using annotations and including the classes in a JAR package in EAR; in the same JAR, again using annotations, I define a quartz-activated MDB which is injecting the service.

problem:
Injection appears to work, I get a reference to a proxy, but when using the reference I get ClassNotFoundException about the business interface.

MDB code:
import java.io.Serializable;
  | 
  | import javax.ejb.ActivationConfigProperty;
  | import javax.ejb.EJB;
  | import javax.ejb.MessageDriven;
  | 
  | import org.jboss.ejb3.annotation.ResourceAdapter;
  | import org.quartz.JobExecutionContext;
  | import org.quartz.JobExecutionException;
  | import org.quartz.StatefulJob;
  | import org.slf4j.Logger;
  | 
  | import com.revdriver.logging.LoggerFactory;
  | import com.revdriver.parking.optimization.databasetruncate.OldDataTruncatorManagement;
  | import com.revdriver.parking.optimization.sessionfactories.SessionFactoryIn;
  | 
  | @MessageDriven(activationConfig = { @ActivationConfigProperty(propertyName = "cronTrigger", propertyValue = "*/15 * * * * ?") })
  | @ResourceAdapter("quartz-ra.rar")
  | public class ScheduledOptimization implements StatefulJob, Serializable {
  | 	
  | 	private static final Logger log = LoggerFactory.make();
  | 	
  | 	@EJB( name="MySessionFactory", beanInterface=SessionFactoryIn.class )
  | 	public SessionFactoryIn sf;
  | 	
  | 	@Override
  | 	public void execute(JobExecutionContext arg0) throws JobExecutionException {
  | 		log.info( "Schedule triggered, sf is null: " + ( sf == null ) );
  | 		{
  |                         log.info( "using sf class: " + sf.getClass().getCanonicalName() );
  | 			log.info( sf.sayHello() ); // **** CNFE EXCEPTION HERE
  | 		}

This deploys fine, and the management bean is usable from jmx-console, but when the timer triggers it prints:
anonymous wrote : Schedule triggered, sf is null: false
  | using sf class: $Proxy378
and then throws exception:
[org.jboss.aspects.tx.TxPolicy] javax.ejb.EJBTransactionRolledbackException: Specified calling class, com.revdriver.parking.optimization.sessionfactories.SessionFactoryIn could not be found for BaseClassLoader at 70dc5c99{vfszip:/home/sanne/jboss-5.1.0.GA/server/default/deploy/quartz-ra.rar/}
  | [org.quartz.core.JobRunShell] Job default.job.0.1248357986793 threw an unhandled Exception: 
  | javax.ejb.EJBTransactionRolledbackException: Specified calling class, com.revdriver.parking.optimization.sessionfactories.SessionFactoryIn could not be found for BaseClassLoader at 70dc5c99{vfszip:/home/sanne/jboss-5.1.0.GA/server/default/deploy/quartz-ra.rar/}
  | 	at org.jboss.ejb3.tx.Ejb3TxPolicy.handleInCallerTx(Ejb3TxPolicy.java:115)
  | 	at org.jboss.aspects.tx.TxPolicy.invokeInCallerTx(TxPolicy.java:130)
  | 	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:282)
  | 	at org.jboss.ejb3.mdb.inflow.MessageInflowLocalProxy.delivery(MessageInflowLocalProxy.java:270)
  | 	at org.jboss.ejb3.mdb.inflow.MessageInflowLocalProxy.invoke(MessageInflowLocalProxy.java:140)
  | 	at $Proxy359.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: Specified calling class, com.revdriver.parking.optimization.sessionfactories.SessionFactoryIn could not be found for BaseClassLoader at 70dc5c99{vfszip:/home/sanne/jboss-5.1.0.GA/server/default/deploy/quartz-ra.rar/}
  | 	at org.jboss.ejb3.common.lang.SerializableMethod.getClassFromName(SerializableMethod.java:311)
  | 	at org.jboss.ejb3.common.lang.SerializableMethod.getClassType(SerializableMethod.java:282)
  | 	at org.jboss.ejb3.common.lang.SerializableMethod.toMethod(SerializableMethod.java:233)
  | 	at org.jboss.ejb3.common.lang.SerializableMethod.toMethod(SerializableMethod.java:220)
  | 	at org.jboss.ejb3.proxy.impl.handler.session.SessionProxyInvocationHandlerBase.invoke(SessionProxyInvocationHandlerBase.java:182)
  | 	at org.jboss.ejb3.proxy.impl.handler.session.SessionProxyInvocationHandlerBase.invoke(SessionProxyInvocationHandlerBase.java:164)
  | 	at $Proxy348.sayHello(Unknown Source)
  | 	at com.revdriver.parking.optimization.beans.ScheduledOptimization.execute(ScheduledOptimization.java:42)
  | 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  | 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  | 	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.NativeMethodAccessorImpl.invoke0(Native Method)
  | 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  | 	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_564410294.invoke(InvocationContextInterceptor_z_fillMethod_564410294.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_564410294.invoke(InvocationContextInterceptor_z_setup_564410294.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)
  | 	... 17 more
  | Caused by: java.lang.ClassNotFoundException: com.revdriver.parking.optimization.sessionfactories.SessionFactoryIn from BaseClassLoader at 70dc5c99{VFSClassLoaderPolicy at 13437ab2{name=vfszip:/home/sanne/jboss-5.1.0.GA/server/default/deploy/quartz-ra.rar/ domain=ClassLoaderDomain at 4f444356{name=DefaultDomain parentPolicy=BEFORE parent=org.jboss.bootstrap.NoAnnotationURLClassLoader at 20968fda} roots=[MemoryContextHandler at 858539519[path= context=vfsmemory://3j001-fcqqp4-fxhk2gl1-1-fxhk2um0-22 real=vfsmemory://3j001-fcqqp4-fxhk2gl1-1-fxhk2um0-22], DelegatingHandler at 531071640[path=quartz-ra.rar context=file:/home/sanne/jboss-5.1.0.GA/server/default/deploy/ real=file:/home/sanne/jboss-5.1.0.GA/server/default/deploy/quartz-ra.rar], DelegatingHandler at 779016548[path=quartz-ra.rar/quartz-ra.jar context=file:/home/sanne/jboss-5.1.0.GA/server/default/deploy/ real=file:/home/sanne/jboss-5.1.0.GA/server/default/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:448)
  | 	at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
  | 	at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
  | 	at java.lang.Class.forName0(Native Method)
  | 	at java.lang.Class.forName(Class.java:247)
  | 	at org.jboss.ejb3.common.classloader.PrimitiveAwareClassLoader.findClass(PrimitiveAwareClassLoader.java:105)
  | 	at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
  | 	at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
  | 	at org.jboss.ejb3.common.lang.SerializableMethod.getClassFromName(SerializableMethod.java:307)
  | 	... 56 more

involved Local (management) interface:

  | import javax.ejb.Local;
  | 
  | @Local
  | public interface SessionFactoryIn {
  | 	public String sayHello();
  | }

MBean implementation:

  | import org.jboss.ejb3.annotation.Depends;
  | import org.jboss.ejb3.annotation.Management;
  | import org.jboss.ejb3.annotation.Service;
  | 
  | @Service( objectName = "optimizationJMX:service=sessionFactories", name = "MySessionFactory" )
  | @Management(SessionFactoryIn.class)
  | @Depends(value = { "jboss.jca:service=DataSourceBinding,name=parkingLogDS", "jboss.jca:service=DataSourceBinding,name=parkingContentDS" })
  | public class SessionFactoryBean implements SessionFactoryIn {
  | 	@Override
  | 	public String sayHello() {
  | 		return "Hi Sanne";
  | 	}
  | }

As Jaikiran suggested on IRC I'm goin to open a JIRA; any suggestion is welcome as I was trying to load Hibernate SessionFactory this way to hunt down another bug in JBoss... it looks like it's hiding himself nesting deeper :-)


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

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




More information about the jboss-user mailing list