Aufruf einer EJB 3 aus einer normalen Java-Klasse

Red Baron

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
Java:
import javax.ejb.Remote;

@Remote
public interface EjbTestRemote {

	public void doSth();

}

EJB
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)
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!
 

JeromeC

Aktives 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:
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:

Ähnliche Java Themen

Neue Themen


Oben