2011-01-14 1 views
2

Хотя миграции с JBoss 4.3 до 5.1 следующий вопрос произошло:Должен или не должен расширяться интерфейс javax.ejb.EJBLocalObject?

Первое исключение происходит во время развертывания, без реализации 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» t удовлетворен и теперь жалуется: компонент не должен реализовывать 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 

EDIT: Я должен упомянуть, что фасоль является 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, измените интерфейс BeanLocal, чтобы расширить EJBLocalObject, и измените интерфейс BeanRemote для расширения EJBObject.

0

Согласно второму StackTrace кажется, что вы используете один и тот же интерфейс, как локальный, так и удаленный интерфейс. Если вы создаете отдельные удаленные и локальные интерфейсы, соответственно, вы должны быть в порядке.

+0

Спасибо за ваш ответ, локальный и удаленный отделено, я обновил свой вопрос – stacker

2

Чтобы сделать вашу жизнь проще, я предлагаю не создавать ни одного компонента как EJB3, так и EJB2. Создайте отдельный компонент EJB2, который делегирует EJB3.

Это также упрощает простое удаление компонента EJB2, как только вам не придется его поддерживать.

Кроме того, вы можете удалить и @TransactionManagement(TransactionManagementType.CONTAINER), и @TransactionAttribute(TransactionAttributeType.REQUIRED). Они являются значениями по умолчанию и не нужны, поскольку EJB3 подчеркивает соглашение над конфигурацией. Стиль, который вы начинаете программировать, кажется, немного противостоит духу EJB3. Это может быть не проблема, если вы единственный программист, но другие люди, обучающиеся в EJB3, могут не реагировать на это любезно.

Следующее должно быть достаточно:

@Stateless 
public class Bean implements BeanLocal, BeanRemote { 
} 
Смежные вопросы