Как внедрить EntityManager в WebService, не основанный на EJB? - PullRequest
2 голосов
/ 13 июля 2009

Заголовок говорит сам за себя: у меня есть простой 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

1 Ответ

0 голосов
/ 04 марта 2017

Поскольку ваш веб-сервис не управляется EJB-контейнером, CDI невозможен. Вы должны получить EntityManager вручную, выполнив поиск 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");
...