2009-07-13 22 views
2

的標題說明了一切:我有一個簡單的WebService如何在基於非EJB的WebService中注入EntityManager?

@WebService(serviceName="G08WService", portName="G08WPort", endpointInterface = "at.fhj.itm.g08.wservice.IUserWebService") 

public class WService implements IUserWebService 
{ 
    @PersistenceContext(unitName="g08b2") 
    EntityManager em; 

    @Resource 
    UserTransaction utx; 

    public WService() 
    { 

    } 
} 

當然WebService的是在web.xml中還定義,並調用WSDL工作得很好,一個客戶端可以調用webmeethods,和等等。你可以看到我想讓它獲得EntityManager和UserTransaction被注入,我需要它來創建一個更進一步的DAO。但是,兩者都是空的。

WebService不是基於EJB的,有沒有辦法檢索這些對象?

容器是JBoss的5.0GA

回答

0

因爲你的web服務不是由EJB容器管理,CDI是不可能的。您應該通過執行JNDI查找來手動獲取EntityManager。

實體管理器默認情況下未註冊,所以你應該在persistence.xml添加:

<property name="jboss.entity.manager.jndi.name" value="java:/yourEntityManagerName"/>

或工廠:

<property name="jboss.entity.manager.factory.jndi.name" value="java:/yourEntityManagerFactoryName"/>

然後執行JNDI查找來獲得容器 - 管理實體經理:

EntityManager em = (EntityManager) sessionContext.lookup("java:app/yourEntityManagerName");