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

发布于 2024-07-26 15:17:45 字数 613 浏览 6 评论 0原文

标题说明了一切: 我有一个简单的 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的,有没有办法检索这些对象?

容器是JBoss 5.0GA

The headline says it all: I've got a simple 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()
    {

    }
}

Of course the WebService is also defined in the web.xml, and calling the WSDL works just fine, a client can call webmeethods, and so on.

As you can see i want it to get the EntityManager and a UserTransaction to be injected, i need it to create a further DAO. However, both are always null.

The WebService is not EJB based, is there a way to retrieve those objects?

The Container is JBoss 5.0GA

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

找个人就嫁了吧 2024-08-02 15:17:45

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

默认情况下,EntityManager 未注册,因此您应该将其添加到 persistence.xml 中:

或工厂:

然后执行JNDI 查找以获取容器管理的实体管理器:

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

Because your webservice is not managed by the EJB Container, CDI is impossible. You should fetch the EntityManager manually by doing a JNDI lookup instead.

The EntityManager is not registered by default so you should add it in persistence.xml:

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

or the factory:

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

Then perform JNDI lookup to obtain the container-managed entity manager:

 EntityManager em = (EntityManager) sessionContext.lookup("java:app/yourEntityManagerName");
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文