我是 EJB 新手。
我有一个包含以下字段的类
@Stateless
@TransactionManagement(TransactionManagementType.CONTAINER)
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public class MyServiceFacadeBean implements MyServiceFacadeLocal, MyServiceFacadeRemote {
@EJB(name = "ejb/CatalogService")
private CatalogService catalogService = null;
....
}
我在 Sring IOC 中注入(inject)它的实现时实例化了该对象:
<bean id="contestServiceFacade" class="my.company.service.facade.contest.ejb.MyServiceFacadeBean">
</bean>
但是在我的 Controller 中调用它的方法后,我在 catalogService 字段上得到 NullPointerException 。那么我的外观应该如何正确实例化?
更新1:我尝试用另一种方法插入bean here 。也许对回答这个问题会有帮助。
更新 2:我无法更改我的 EJB 的源,但可以为我的 Controller 执行此操作。
最佳答案
如果您使用的是 JBoss 5,则无法将 EJB
投入 war 。您需要使用 EJB
jar
和 war
文件(+lib jar)创建一个ear文件。有关 ear
的更多信息可以在 JavaEE 教程 ( http://docs.oracle.com/javaee/5/tutorial/doc/bnaby.html ) 中找到。
当 EJB 正确打包在耳朵中时,它们将在部署时由 Jboss 启动。
Spring 将能够通过 JDNI 访问它们,如下所述: http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/ejb.html
另一个选择是切换到 Jboss 7,因为 EJB
可以处于 war
中。但这需要一些努力,因为他们在 Jboss 7 中改变了很多东西。
关于java - 初始化@EJB字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13698937/