2009-07-13 6 views
2

Le titre dit tout: J'ai simple WebServiceComment injecter EntityManager dans un WebService non EJB?

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

    } 
} 

Bien sûr, le WebService est également défini dans le web.xml, et en appelant le WSDL fonctionne très bien, un client peut appeler webmeethods, et bientôt.

Comme vous pouvez le voir, je veux que l'EntityManager et l'UserTransaction soient injectés, j'en ai besoin pour créer un autre DAO. Cependant, les deux sont toujours nuls.

Le WebService n'est pas basé sur EJB, existe-t-il un moyen de récupérer ces objets?

Le conteneur est JBoss 5.0GA

Répondre

0

Parce que votre webservice est pas géré par le conteneur EJB, CDI est impossible. Vous devriez aller chercher l'EntityManager manuellement en effectuant une recherche JNDI à la place.

Le EntityManager n'est pas enregistré par défaut de sorte que vous devez l'ajouter dans persistence.xml:

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

ou l'usine:

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

Effectuez ensuite recherche JNDI pour obtenir le conteneur- gestionnaire d'entité gérée:

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