[jboss-user] [EJB 3.0] - Local Interface inherited by extending abstract class: canno

mindhaq do-not-reply at jboss.com
Fri Nov 3 20:22:11 EST 2006


Hello,

I just stumbled upon a strange behaviour regarding a stateless session bean. I'm using Jboss 4.0.5 GA, JDK 5.0 and have an enterprise application with a Stateless Session Bean structered like this:
@Local
  | interface Logic {
  |   void foo();
  | }
  | 
  | abstract class AbstractLogic implements Logic {
  |   void foo() {
  |      bar();
  |   }
  | 
  |   abstract void bar();
  | }
  | 
  | @Stateless
  | class LogicBean extends AbstractLogic {
  |   void bar();
  | }
  | 
When I deploy my application, I get the following error during compile time:
java.lang.RuntimeException: bean class has no local, webservice, or remote interfaces defined and does not implement at least one business interface
  |         at org.jboss.ejb3.ProxyFactoryHelper.getLocalInterfaces(ProxyFactoryHelper.java:107)
  |         at org.jboss.ejb3.ProxyDeployer.initializeLocalBindingMetadata(ProxyDeployer.java:115)
  |         at org.jboss.ejb3.SessionContainer.instantiated(SessionContainer.java:110)
  |         at org.jboss.ejb3.Ejb3Deployment.deployElement(Ejb3Deployment.java:415)
  |         at org.jboss.ejb3.Ejb3Deployment.deployElement(Ejb3Deployment.java:397)
  |         at org.jboss.ejb3.Ejb3Deployment.deployUrl(Ejb3Deployment.java:378)
  |         at org.jboss.ejb3.Ejb3Deployment.deploy(Ejb3Deployment.java:350)
  |         at org.jboss.ejb3.Ejb3Deployment.create(Ejb3Deployment.java:305)
  |         at org.jboss.ejb3.Ejb3Module.createService(Ejb3Module.java:77)
  |         at org.jboss.system.ServiceMBeanSupport.jbossInternalCreate(ServiceMBeanSupport.java:260)
  |         at org.jboss.system.ServiceMBeanSupport.jbossInternalLifecycle(ServiceMBeanSupport.java:243)
  |         at sun.reflect.GeneratedMethodAccessor2.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.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 $Proxy29.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.integration.jboss.DeployerInterceptor.create(DeployerInterceptor.java:74)
  |         at org.jboss.ws.integration.jboss.DeployerInterceptorEJB.create(DeployerInterceptorEJB.java:44)
  |         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 $Proxy30.create(Unknown Source)
  |         at org.jboss.deployment.MainDeployer.create(MainDeployer.java:969)
  |         at org.jboss.deployment.MainDeployer.create(MainDeployer.java:959)
  |         at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:818)
  |         at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:782)
  |         at sun.reflect.GeneratedMethodAccessor17.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 $Proxy8.deploy(Unknown Source)
  |         at org.jboss.deployment.scanner.URLDeploymentScanner.deploy(URLDeploymentScanner.java:421)
  |         at org.jboss.deployment.scanner.URLDeploymentScanner.scan(URLDeploymentScanner.java:634)
  |         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)
  | 
When I change the definition of the bean like this (adding just an expliciz implements Logic):

  | class LogicBean extends AbstractLogic implements Logic {
  | }
everything deploys just fine.

Now I wonder how that could be? Doesn't LogicBean already implement Logic indirectly by extending AbstractLogic? You sure could write something like this, and it would certainly compile:
Logic l = new LogicBean();
I would consider this a bug in Jboss' interface detection, or is there some rarely seen rule in the Java language specification I never heard of (I'm sure there are quite some of them)?

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

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



More information about the jboss-user mailing list