2016-09-29 5 views
0

Ok Ich habe ein Szenario hier, und ich möchte eine Standardlösung, im Grunde habe ich EJBsession3 Beans als meine Webservice auf der Serverseite ausgesetzt und sie rufen weiter die EJBsession3 Bean, um DAO-Methoden auszuführen. siehe unten ist der Beispielcode.Aufruf EJB3 Session Bean von einem Webservice EJB3 Session Bean verursacht Entity Manager Null

//This is a EJB3 session bean and I am using container managed jta transactions 
@Stateless 
public class datatypes implements datatypesRemote { 

@PersistenceContext(unitName = "EJBtest") 
EntityManager entityManager; 


public List<Datatype> retrieveAllDatatypes(int targetSystemId,EntityManager ent) 
     throws RuntimeException { 
    String q = "SELECT oneDatatype from " + Datatype.class.getName() 
      + " oneDatatype " 
      + "where oneDatatype.targetSystem.targetSystemId = " 
      + targetSystemId; 

    //entityManager=ent; 
    Query query = entityManager.createQuery(q); 


    System.out.println("Query retrieveAll" + q); 
    @SuppressWarnings("unchecked") 
    List<Datatype> templates = query.getResultList(); 
    return templates; 
} 

}

Die Klasse oben ist im Grunde meine DAO-Klasse, die Abfragen jetzt unten behandelt ist mein Web-Service Klasse

@WebService(serviceName="backend") 
    @Stateless 
    public class backEndForm implements backEndFormRemote { 
    //@PersistenceContext(name = "EJBtest") 
    //EntityManager entityManager; 

    private datatypesRemote data= new datatypes(); 

     public List<Datatype> retrieveAllDatatypes(int id){  
      //entityManager.clear(); 
      data=new datatypes(); 
      return data.retrieveAllDatatypes(id,null); 
     } 
    } 

Nun ist die Ausgabe wie das ist mein Web-Client ruft meine Web Diese Methode ruft die DAO-Methoden weiter auf, die die Daten aus der Datenbank abrufen und zum Web-Service zurückkehren, und der Web-Service gibt Daten an den anfordernden Client zurück Aber wenn ich meine SQL-Abfrage ausführe, ist der Entity-Manager ungültig. t k Jetzt, warum eine von mir entwickelte Nicht-Standard-Lösung ist, übergeben Sie den Entity Manager von der Web-Services-Klasse an die DAO-Klasse, wie Sie im Beispielcode sehen können, der auskommentiert ist.

Also meine Frage, gibt es einen anderen Standard Weg, es zu tun? Warum ist der Entity-Manager in der zweiten ejb3-Bean und nicht in der ersten ejb3-Bean null?

Antwort

0

Die Injektion erfolgt nicht, wenn Sie Objekte mit dem Operator new erstellen. Sie benötigen Container erstellen die datatypes Bohne lassen und spritzen es in Ihrem backEndForm:

@WebService(serviceName="backend") 
@Stateless 
public class backEndForm implements backEndFormRemote { 

    @EJB 
    private datatypesRemote data; 

    public List<Datatype> retrieveAllDatatypes(int id){  
     return data.retrieveAllDatatypes(id,null); 
    } 
} 
+0

Ich habe bereits versucht, dass aber diese mich nicht lassen, das Projekt stelle ich einige Fehler bekommen .. Ich habe vergessen, dass ich zu erwähnen benutze JBOSS AS7/Wildfly-Server – qasim

+0

Oh Entschuldigung, dass der Fehler wegen etwas anderes war, habe ich dieses Ding schon einmal versucht, aber ich wusste nicht, dass es die beste Lösung ist. – qasim

Verwandte Themen