如何在非基于EJB的WebService中注入EntityManager?

时间:2009-07-13 04:50:05

标签: web-services jboss entitymanager jbossws

标题说明了一切:我有一个简单的WebService

@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的,有没有办法检索这些对象?

Container是JBoss 5.0GA

1 个答案:

答案 0 :(得分:0)

因为您的Web服务不是由EJB容器管理的,所以CDI是不可能的。您应该通过执行JNDI查找来手动获取EntityManager。

默认情况下未注册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");