Frage

Ich kämpfe schon seit einiger Zeit darum.

Ich versuche, mich auf EJB 3.0 vorzubereiten.Ich verwende JBoss 5.1.0 GA als meinen Anwendungsserver.Ich habe mit einer sehr einfachen zustandslosen Session-Bean mit lokaler Schnittstelle und einem einfachen JSP-Servlet-Client begonnen, der die Session-Bean-Methode aufruft.All dies, während ich versucht habe, es zu verwenden @EJB Annotation zum Einfügen einer Session-Bean in die Servlet-Klasse.

public class SampleServlet extends HttpServlet {

    @EJB
    private PersonLocal person;

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        System.out.println("In servlet");       
        response.getWriter().write("Person Name : "+person.getName());
        System.out.println(person.getName());       
    }
}

Ich verwende JBoss 5.1.0 GA mit dem Standard Aufbau.(Ich habe es auch mit versucht alle Aufbau)

Allerdings bekam ich immer einen Nullverweis auf die Session-Bean-Injection.Nachdem ich etwa einen Tag lang gekämpft hatte, probierte ich stattdessen endlich die hässliche JNDI-Suchmethode von EJB 2.x aus @EJB Anmerkung mit der Konfiguration für JNDI, die im angegeben ist jndi.properties Datei und es hat ohne weitere Änderungen funktioniert!

Nun habe ich versucht, in den JBoss-Dokumenten herauszufinden, ob JBoss 5.1.0 GA die Injektion mit unterstützt oder nicht @EJB Anmerkung, konnte aber keine konkrete Antwort finden.Kann mir jemand sagen, ob das der Fall ist?Denn ich würde die Annotation wirklich der JNDI-Suche vorziehen (ich meine, wer würde das nicht tun?).Vermisse ich etwas?

Hätte das wahrscheinlich in die JBoss-Foren stellen sollen, aber ...Ich bin süchtig nach diesem Ort ;-)

War es hilfreich?

Lösung

Dies wird von JBoss 5.x definitiv unterstützt, da es Java EE 5-zertifiziert ist.

Eigentlich schlage ich vor, das zu überprüfen Kapitel 11.Einführung in die EJB-Injektion in Servlets des JBoss EJB3-Tutorials, Sie beschreiben ein detailliertes und schrittweises Beispiel.

Und achten Sie besonders auf folgenden Hinweis:

Damit die Injektion in einem Webmodul stattfinden kann, sollte Ihr Web.xml die 2.5-Version der Web-App XSD verwenden:

<web-app version="2.5"
  xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

Andere Tipps

Ich hatte ein ähnliches Problem bei der Verwendung eines Remote-EJB, aber es lag nicht an der Web-App-Version, sondern daran, wie mein Client das EJB nachschlug.

Folgendes hat bei mir funktioniert:

//bean
@Stateless(name="xxxxService")
@Remote(xxxxRemote.class)
public class xxxxService implements xxxxRemote {

//interface - note that no annnotation is required
public interface xxxxRemote {

//in the client
  @EJB(mappedName="myJndiNameForxxxx") //for a local ejb, you could use 'beanName='
  private xxxxRemote xxxx;

Bei meinem Projekt (erstellt mit Maven) befindet sich der Client in einer Webanwendung und das EJB in einem EJB-Projekt, das dann in ein EAR-Projekt eingebunden wird.Die JNDI-Zuordnung erfolgt in jboss.xml, das sich im EJB-Projekt befindet (in meinem Projekt src/main/resources/META-INF) und sieht folgendermaßen aus:

<?xml version="1.0" encoding="UTF-8"?>
<jboss xmlns:xs="http://www.jboss.org/j2ee/schema"
       xs:schemaLocation="http://www.jboss.org/j2ee/schema/jboss_5_0.xsd"
       version="5.0">
  <enterprise-beans>
  <session>
      <ejb-name>xxxxService</ejb-name>
      <jndi-name>myJndiNameForxxxx</jndi-name>
  </session>
  </enterprise-beans>
</jboss>

Das war alles, was es brauchte, und jetzt kann ich vom Client aus auf das EJB zugreifen.Hoffe, das hilft jemandem.

Wenn weiterhin Probleme auftreten, können Sie in der JMX-Konsole nachsehen, ob der JNDI-Eintrag angezeigt wird.Schauen Sie unter „jboss“ > „service=JNDIview“ > „list“ nach und klicken Sie auf die Schaltfläche „Invoke“.Wenn Ihr Dienst korrekt bereitgestellt wurde, sollten Sie den JNDI-Namen (in meinem Beispiel myJndiNameForxxxx) unter „ProxyFactory“ sehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top