Aufruf einer EJB 3 aus einer normalen Java-Klasse

Diskutiere Aufruf einer EJB 3 aus einer normalen Java-Klasse im Application Tier Forum; Hallo, ich möchte in meiner Anwendung EJB 3 verwenden. Die Anwendung läuft in einem Websphere Application Server 8. Die EJBs sollen aus einer...

  1. Red Baron
    Red Baron Neues Mitglied
    Hallo, ich möchte in meiner Anwendung EJB 3 verwenden. Die Anwendung läuft in einem Websphere Application Server 8.
    Die EJBs sollen aus einer normalen Java-Klasse (liegt auf dem Server, wird von einem Servlet aufgerufen) aufgerufen werden. So wie ich es verstanden habe, kann ich dann nicht mit Dependency-Injection arbeiten. Stattdessen müsste der Aufruf der Bean über den InitialContext erfolgen. Allerdings bekomme ich immer eine NameNotFoundException.

    Folgende Klassen habe ich angelegt:

    Remote-Interface
    Code (Java):
    import javax.ejb.Remote;

    @Remote
    public interface EjbTestRemote {

        public void doSth();

    }
    EJB
    Code (Java):
    import javax.ejb.Stateless;

    @Stateless
    public class EjbTest implements EjbTestRemote {

        @Override
        public void doSth() {
            System.out.println("Hello world!");
        }

    }
    Aufrufende Java-Klasse (kein Servlet)
    Code (Java):
    try {
                InitialContext ctx = new InitialContext();
                Object o = ctx.lookup("package.EjbTestRemote");
            } catch (NamingException e) {
                e.printStackTrace();
            }
    In der aufrufenden Klasse habe ich schon etliche andere Konstellationen beim Aufruf von lookup() übergeben aber immer kommt es zum selben Fehler.

    Hat jemand eine Idee, woran es liegen könnte?

    Danke!
     
  2. Vielleicht hilft dir dieser Kurs hier weiter --> (hier klicken)
  3. JeromeC
    JeromeC Mitglied
    Das @Remote-Interface brauchst du nicht, da dein EJB nur aus dieser JVM heraus aufgerufen werden soll.
    Daher bräuchtest du höchstens @LocalBean in deiner Bean-Klasse, was aber standardmäßig angenommen wird wenn kein anderes Interface definiert ist.

    Wenn du dein Bean deployst musst du den JNDI-Namen auslesen. Dieser sieht ungefähr so aus: "java:global/...".
    Dein lookup muss dann wie folgt passieren:
    Code (Java):

    try {
     InitialContext ctx = new InitialContext();
     EjbTest myBean = (EjbTest) ctx.lookup("java:global/foo/EjbTest");
    } catch (NamingException e) {
     e.printStackTrace();
    }
    Vergiss nicht, dass die aufrufende Klasse das zu parsende Objekt kennen möchte. Daher irgendwo in den Dependencies deine Klasse bekannt machen: deployment.DeinEjbProjektName.jar (zumindestens bei JBoss, kann nicht für WebSphere sprechen).
     
    Zuletzt bearbeitet: 17. Juni 2014
  4. JeromeC
    JeromeC Mitglied
Die Seite wird geladen...

Aufruf einer EJB 3 aus einer normalen Java-Klasse - Ähnliche Themen

Aufruf einer statischen Variable
Aufruf einer statischen Variable im Forum Java Basics - Anfänger-Themen
Aufruf einer Methode aus einem Servlet heraus
Aufruf einer Methode aus einem Servlet heraus im Forum Allgemeine Java-Themen
Aufruf einer Methode einer anderen Klasse
Aufruf einer Methode einer anderen Klasse im Forum Java Basics - Anfänger-Themen
aus einer Main-Klasse eine andere Main-Klasse aufrufen
aus einer Main-Klasse eine andere Main-Klasse aufrufen im Forum Hausaufgaben
Innerhalb einer Methode eine Variable der aufrufenden Methode ändern?
Innerhalb einer Methode eine Variable der aufrufenden Methode ändern? im Forum Java Basics - Anfänger-Themen
Thema: Aufruf einer EJB 3 aus einer normalen Java-Klasse