簡體   English   中英

初始化@EJB字段

[英]Initialize @EJB fields

我是EJB的新手。

我有一堂課,有以下領域

@Stateless
@TransactionManagement(TransactionManagementType.CONTAINER)
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public class MyServiceFacadeBean implements MyServiceFacadeLocal, MyServiceFacadeRemote {

    @EJB(name = "ejb/CatalogService")
    private CatalogService catalogService = null;
    ....
}

我在Sring IOC中注入實現時實例化了該對象:

<bean id="contestServiceFacade" class="my.company.service.facade.contest.ejb.MyServiceFacadeBean">
 </bean>

但是在我的控制器中調用它的方法后,我在catalogService字段上得到了NullPointerException 那么如何正確地實例化我的外觀?

更新1 :我試圖用這里要求的另一種方法插入bean。 回答這個問題可能會有所幫助。

更新2:我無法更改我的EJB的來源,但可以為我的控制器執行此操作。

如果您使用的是JBoss 5,則無法將EJB投入戰爭。 您需要使用EJB jarwar文件(+ lib jar)創建一個ear文件。 可以在JavaEE教程( http://docs.oracle.com/javaee/5/tutorial/doc/bnaby.html )中找到有關ear更多信息。

當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中的許多東西。

如果要讓Spring在EJB中注入屬性,則需要在類上使用Interceptor:

@Interceptors(SpringBeanAutowiringInterceptor.class)
public class MyServiceFacadeBean ... {

        @Autowired
        private CatalogService catalogService;

        ...
}

您正在混合EJB和Spring Bean。 注釋@EJB是為了獲取企業Java Bean,而不是Spring Bean。
您應該更改為@Autowired注釋或將CatalogService更改為EJB(在類中具有正確的EJB注釋),然后

<context:component-scan base-package="com.foo" />

在xml文件中。

還要注意,您將需要一個支持EJB的容器,例如Glassfish,JBoss(不是Tomcat)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM