Problems with @Interceptors in JBoss 4.0.4 GA
hauke1980 May 23, 2006 10:55 AMHi There!
I just migrated my whole EJBs to JBoss 4.0.4 GA and now get those exceptions...
16:26:24,602 WARN [ServiceController] Problem creating service jboss.j2ee:service=EJB3,module=plyd.jar java.lang.TypeNotPresentException: Type javax.ejb.Interceptors not present at sun.reflect.generics.factory.CoreReflectionFactory.makeNamedType(CoreReflectionFactory.java:98) at sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:107) at sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:31) at sun.reflect.annotation.AnnotationParser.parseSig(AnnotationParser.java:351) at sun.reflect.annotation.AnnotationParser.parseAnnotation(AnnotationParser.java:175) at sun.reflect.annotation.AnnotationParser.parseAnnotations2(AnnotationParser.java:69) at sun.reflect.annotation.AnnotationParser.parseAnnotations(AnnotationParser.java:52) at java.lang.Class.initAnnotationsIfNecessary(Class.java:2998) at java.lang.Class.getAnnotation(Class.java:2958) at org.jboss.aop.annotation.AnnotationElement.getVisibleAnnotation(AnnotationElement.java:88) at org.jboss.aop.Advisor.resolveAnnotation(Advisor.java:327) at org.jboss.ejb3.ProxyDeployer.initializeRemoteBindingMetadata(ProxyDeployer.java:127) at org.jboss.ejb3.SessionContainer.instantiated(SessionContainer.java:70) at org.jboss.ejb3.Ejb3Deployment.deployElement(Ejb3Deployment.java:573) at org.jboss.ejb3.Ejb3Deployment.deployElement(Ejb3Deployment.java:555) at org.jboss.ejb3.Ejb3Deployment.deployUrl(Ejb3Deployment.java:536) at org.jboss.ejb3.Ejb3Deployment.deploy(Ejb3Deployment.java:508) at org.jboss.ejb3.Ejb3Deployment.create(Ejb3Deployment.java:463) at org.jboss.ejb3.Ejb3Module.createService(Ejb3Module.java:125) at org.jboss.system.ServiceMBeanSupport.jbossInternalCreate(ServiceMBeanSupport.java:260) at org.jboss.system.ServiceMBeanSupport.jbossInternalLifecycle(ServiceMBeanSupport.java:243) 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:585) at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155) at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94) at org.jboss.mx.server.Invocation.invoke(Invocation.java:86) at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264) at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659) at org.jboss.system.ServiceController$ServiceProxy.invoke(ServiceController.java:978) at $Proxy0.create(Unknown Source) at org.jboss.system.ServiceController.create(ServiceController.java:330) at org.jboss.system.ServiceController.create(ServiceController.java:273) at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155) at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94) at org.jboss.mx.server.Invocation.invoke(Invocation.java:86) at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264) at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659) at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210) at $Proxy34.create(Unknown Source) at org.jboss.ejb3.EJB3Deployer.create(EJB3Deployer.java:429) 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:585) at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155) at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94) at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133) at org.jboss.mx.server.Invocation.invoke(Invocation.java:88) at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:142) at org.jboss.mx.interceptor.DynamicInterceptor.invoke(DynamicInterceptor.java:97) at org.jboss.system.InterceptorServiceMBeanSupport.invokeNext(InterceptorServiceMBeanSupport.java:238) at org.jboss.ws.server.WebServiceDeployer.create(WebServiceDeployer.java:99) at org.jboss.deployment.SubDeployerInterceptorSupport$XMBeanInterceptor.create(SubDeployerInterceptorSupport.java:180) at org.jboss.deployment.SubDeployerInterceptor.invoke(SubDeployerInterceptor.java:91) at org.jboss.mx.server.Invocation.invoke(Invocation.java:88) at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264) at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659) at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210) at $Proxy35.create(Unknown Source) at org.jboss.deployment.MainDeployer.create(MainDeployer.java:953) at org.jboss.deployment.MainDeployer.create(MainDeployer.java:943) at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:807) at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:771) at sun.reflect.GeneratedMethodAccessor13.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155) at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94) at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133) at org.jboss.mx.server.Invocation.invoke(Invocation.java:88) at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:142) at org.jboss.mx.server.Invocation.invoke(Invocation.java:88) at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264) at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659) at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210) at $Proxy6.deploy(Unknown Source) at org.jboss.deployment.scanner.URLDeploymentScanner.deploy(URLDeploymentScanner.java:421) at org.jboss.deployment.scanner.URLDeploymentScanner.scan(URLDeploymentScanner.java:610) at org.jboss.deployment.scanner.AbstractDeploymentScanner$ScannerThread.doScan(AbstractDeploymentScanner.java:263) at org.jboss.deployment.scanner.AbstractDeploymentScanner$ScannerThread.loop(AbstractDeploymentScanner.java:274) at org.jboss.deployment.scanner.AbstractDeploymentScanner$ScannerThread.run(AbstractDeploymentScanner.java:225) Caused by: java.lang.ClassNotFoundException: No ClassLoaders found for: javax.ejb.Interceptors at org.jboss.mx.loading.LoadMgr3.beginLoadTask(LoadMgr3.java:306) at org.jboss.mx.loading.RepositoryClassLoader.loadClassImpl(RepositoryClassLoader.java:511) at org.jboss.mx.loading.RepositoryClassLoader.loadClass(RepositoryClassLoader.java:405) 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:242) at sun.reflect.generics.factory.CoreReflectionFactory.makeNamedType(CoreReflectionFactory.java:95) ... 85 more
For installing JBoss I used the jboss-4.0.4.GA-Patch1-installer.jar and selected the EJB3 configuration.
I figured out, that by commenting out the @Interceptors annotation the deployment functions properly. I want to know, if something with the Interceptors has changed regarding to the new JBoss / EJB stuff.
Here are the "interceptor class" and my session bean. Maybe you've some hints for me. I couldn't find anythings about that in the specs.
CustomerAccountHomeBean
import static javax.ejb.TransactionAttributeType.REQUIRED; import javax.annotation.EJB; import javax.annotation.Resource; import javax.ejb.Interceptors; import javax.ejb.Stateless; import javay.ejb.config.Config; import javay.ejb.config.ConfigListener; import javay.ejb.config.ConfigResource; import javay.ejb.config.PropertiesConfigurator; @Stateless @Interceptors(ConfigListener.class) @ConfigResource(type = PropertiesConfigurator.class, resource = "/config.properties") public class CustomerAccountHomeBean implements CustomerAccountHomeLocal, CustomerAccountHomeRemote { protected @Resource(mappedName="java:/Mail") Session mailSession; public @Config String transportProtocol = "smtp"; protected @EJB Velocity velocity; // ...some Methods... }
ConfigListener
public class ConfigListener { @PostConstruct public void init(InvocationContext invocationContext) { Class< ? > clazz; ConfigResource configResource; Configurator configurator; String resource; InputStream inputStream; Object object; object = invocationContext.getBean(); try { clazz = object.getClass(); if (clazz.isAnnotationPresent(ConfigResource.class)) { configResource = clazz.getAnnotation(ConfigResource.class); configurator = configResource.type().newInstance(); resource = configResource.resource(); assert resource != null; inputStream = clazz.getResourceAsStream(resource); assert inputStream != null; configurator.load(inputStream); walk(configurator, clazz, object); for (Class< ? > cl : clazz.getClasses()) { walk(configurator, cl, object); } } } catch (InstantiationException e) { // TODO Logging e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Logging e.printStackTrace(); } catch (IOException e) { // TODO Logging e.printStackTrace(); } } private void walk(Configurator configurator, Class< ? > clazz, Object object) throws IllegalArgumentException, IllegalAccessException { for (Field field : clazz.getDeclaredFields()) { if (field.isAnnotationPresent(Config.class)) { configurator.config(field, object, field .getAnnotation(Config.class)); } } } }
Regards,
Hauke