2011-01-14 68 views
2

虽然从JBoss的4.3迁移到5.1以下问题发生:在部署时没有实现EJBLocalObject的发生是否必须扩展javax.ejb.EJBLocalObject接口?

第一种例外情况:

Caused by: java.lang.IllegalStateException: EJB 3.0 Core Specification Violation (4.6.9): The session beanÔÇÖs local interface interface com.company.project.BeanLocal must extend the javax.ejb.EJBLocalO 
bject interface. 
     at org.jboss.metadata.annotation.creator.ejb.jboss.LocalHomeProcessor.setLocal(LocalHomeProcessor.java:73) 
     at org.jboss.metadata.annotation.creator.ejb.jboss.LocalHomeProcessor.process(LocalHomeProcessor.java:66) 
     at org.jboss.metadata.annotation.creator.ejb.jboss.LocalHomeProcessor.process(LocalHomeProcessor.java:45) 
     at org.jboss.metadata.annotation.creator.AbstractProcessor.processClass(AbstractProcessor.java:215) 
     at org.jboss.metadata.annotation.creator.AbstractProcessor.processClass(AbstractProcessor.java:172) 
     at org.jboss.metadata.annotation.creator.ejb.jboss.AbstractEnterpriseBeanProcessor.process(AbstractEnterpriseBeanProcessor.j 
ava:119) 
     at org.jboss.metadata.annotation.creator.ejb.jboss.AbstractEnterpriseBeanProcessor.process(AbstractEnterpriseBeanProcessor.j 
ava:94) 
     at org.jboss.metadata.annotation.creator.ejb.jboss.AbstractEnterpriseBeanProcessor.process(AbstractEnterpriseBeanProcessor.j 
ava:52) 
     at org.jboss.metadata.annotation.creator.AbstractCreator.process(AbstractCreator.java:154) 
     at org.jboss.metadata.annotation.creator.AbstractCreator.processMetaData(AbstractCreator.java:87) 
     at org.jboss.metadata.annotation.creator.ejb.jboss.JBoss50Creator.create(JBoss50Creator.java:109) 
     at org.jboss.deployment.OptAnnotationMetaDataDeployer.processJBossMetaData(OptAnnotationMetaDataDeployer.java:134) 
     at org.jboss.deployment.OptAnnotationMetaDataDeployer.processMetaData(OptAnnotationMetaDataDeployer.java:84) 
     at org.jboss.deployment.AnnotationMetaDataDeployer.deploy(AnnotationMetaDataDeployer.java:177) 
     ... 32 more 

OK,然后我实现了接口,但JBoss的ISN”不满意,现在抱怨:bean不能实现EJBLocalObject! 任何想法?

Caused by: java.lang.IllegalStateException: EJB 3.0 Core Specification Violation (4.6.6): The session beanÔÇÖs business interface in 
terface com.company.project.BeanLocal must not extend the javax.ejb.EJBLocalObject interface. 
     at org.jboss.metadata.annotation.creator.ejb.jboss.LocalProcessor.addBusinessInterface(LocalProcessor.java:57) 
     at org.jboss.metadata.annotation.creator.ejb.jboss.LocalProcessor.process(LocalProcessor.java:76) 
     at org.jboss.metadata.annotation.creator.ejb.jboss.LocalProcessor.process(LocalProcessor.java:45) 
     at org.jboss.metadata.annotation.creator.AbstractProcessor.processClass(AbstractProcessor.java:222) 
     at org.jboss.metadata.annotation.creator.AbstractProcessor.processClass(AbstractProcessor.java:172) 
     at org.jboss.metadata.annotation.creator.ejb.jboss.AbstractEnterpriseBeanProcessor.process(AbstractEnterpriseBeanProcessor.j 
ava:119) 
     at org.jboss.metadata.annotation.creator.ejb.jboss.AbstractEnterpriseBeanProcessor.process(AbstractEnterpriseBeanProcessor.j 
ava:94) 
     at org.jboss.metadata.annotation.creator.ejb.jboss.AbstractEnterpriseBeanProcessor.process(AbstractEnterpriseBeanProcessor.j 
ava:52) 
     at org.jboss.metadata.annotation.creator.AbstractCreator.process(AbstractCreator.java:154) 
     at org.jboss.metadata.annotation.creator.AbstractCreator.processMetaData(AbstractCreator.java:87) 
     at org.jboss.metadata.annotation.creator.ejb.jboss.JBoss50Creator.create(JBoss50Creator.java:109) 
     at org.jboss.deployment.OptAnnotationMetaDataDeployer.processJBossMetaData(OptAnnotationMetaDataDeployer.java:134) 
     at org.jboss.deployment.OptAnnotationMetaDataDeployer.processMetaData(OptAnnotationMetaDataDeployer.java:84) 
     at org.jboss.deployment.AnnotationMetaDataDeployer.deploy(AnnotationMetaDataDeployer.java:177) 
     ... 32 more 

编辑︰我应该提到,该bean是一个EJB3.0与提供了一个EJB 2.1客户端视图。

声明如下:

@TransactionManagement(TransactionManagementType.CONTAINER) 
@TransactionAttribute(TransactionAttributeType.REQUIRED) 
@Stateless 
@RemoteHome(R2PRegistrationHome.class) 
@RemoteHomeBinding(jndiBinding = JNDINames.BEAN_FOR_EJB_2_1_EJBHOME) 
@LocalHome(R2PRegistrationLocalHome.class) 
@LocalHomeBinding(jndiBinding = JNDINames.BEAN_FOR_EJB_2_1_LOCALHOME) 
public class Bean implements BeanLocal, BeanRemote { 
} 

回答

1

Bean类不应该实现组件接口。从Bean类中移除implements子句,更改BeanLocal接口以扩展EJBLocalObject,并更改BeanRemote接口以扩展EJBObject。

0

根据第二堆栈跟踪,似乎您使用的是相同的接口,本地和远程接口。如果分别创建单独的远程和本地接口,则应该没问题。

+0

感谢您的答复,本地和远程是分开的,我更新了我的问题 – stacker 2011-01-14 13:29:27

2

为了让你的生活更简单,我建议不要让一个EJB3和EJB2 bean都是单一的bean。创建一个委托给EJB3的单独的EJB2 bean。

这也使得只要您不再需要支持,就可以轻松删除EJB2 bean。

此外,您可以删除@TransactionManagement(TransactionManagementType.CONTAINER)@TransactionAttribute(TransactionAttributeType.REQUIRED)。这些都是默认设置,并且不需要,因为EJB3强调约定优于配置。你开始编程的风格似乎有点反对EJB3的精神。如果您是唯一的程序员,这可能不会成为问题,但是受过EJB3培训的其他人可能不会对此产生反应。

下应该足够:

@Stateless 
public class Bean implements BeanLocal, BeanRemote { 
}