2009-07-13 19 views
2

Die Überschrift sagt alles: Ich habe eine einfache WebServiceWie kann man EntityManager in nicht-EJB-basierten WebService injizieren?

@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() 
    { 

    } 
} 

Natürlich ist der WebService auch in der web.xml definiert haben, und nur gut die WSDL arbeitet Aufruf kann ein Client webmeethods nennen, und bald.

Wie Sie sehen können, ich möchte, dass der EntityManager und eine UserTransaction injiziert werden, ich brauche es, um ein weiteres DAO zu erstellen. Beide sind jedoch immer null.

Der WebService basiert nicht auf EJB, gibt es eine Möglichkeit, diese Objekte abzurufen?

Der Container ist JBoss 5.0GA

Antwort

0

Weil Ihr Webservice nicht vom EJB-Container verwaltet wird, CDI unmöglich ist. Sie sollten den EntityManager manuell abrufen, indem Sie stattdessen eine JNDI-Suche durchführen.

Der EntityManager ist standardmäßig nicht registriert, so dass Sie es in persistence.xml hinzufügen sollte:

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

oder die Fabrik:

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

Dann führen Sie JNDI-Lookup zu erhalten, die Container- verwalteter Entitätsmanager:

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