2 Stimmen

Kann eine EJB von einer Desktop-Anwendung aus aufgerufen werden?

Ich bin neu in Java EJB 3.0. Ist es möglich, eine (Sitzungs-) Bean, die auf JBoss bereitgestellt wird, von einem Desktop-Anwendungs-Client aus aufzurufen?

Vielen Dank im Voraus.

3voto

Courtney Faulkner Punkte 1950

Ja, das können Sie. Einige Einzelheiten finden Sie hier (bezieht sich auf EJB2, aber es ist das gleiche für EJB3, wenn es um Remote-Clients geht): http://www.theserverside.com/discussions/thread.tss?thread_id=9197

Paraphrasiert:

Hashtable env = new Hashtable();
env.put("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
env.put("java.naming.provider.url", "jnp://localhost:1099");
env.put("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces");
Context ctx = new InitialContext(env); 
// name is whatever JNDI name you gave it 
Object o = ctx.lookup("home name"); 
EJBHome ejbHome = (EJBHome) PortableRemoteObject.narrow(o,EJBHome.class); 
// This is userID should be the one passed. 
EJB ejb = ejbHome.create(..);

1voto

cetnar Punkte 9219

Ja.

public static void main(String args[]) throws Exception {

   InitialContext ctx = new InitialContext();
   YourService yourService = (YourService) ctx.lookup("com.example.session.YourService");
   String time = yourService.getTime();
   System.out.println("Time is: " + time);
}

Für die Client-Konfiguration müssen Sie die Datei jndi.properties mit dem Inhalt

java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
java.naming.provider.url=localhost

Wenn Sie nach Arbeitsbeispielen für JBoss suchen, sollten Sie den Quellcode von Enterprise JavaBeans 3.0, Fünfte Ausgabe

1voto

Pascal Thivent Punkte 548176

Nehmen wir an, Sie haben die folgende Remote-Schnittstelle:

@Remote
public interface HelloBeanRemote {
    public String sayHello();
}

Und eine Sitzungsbohne, die diese implementiert:

@Stateless
public class HelloBean implements HelloBeanRemote {
    ...
}

Und dass diese EJB korrekt verpackt und auf JBoss bereitgestellt wird.

Erstellen Sie auf der Client-Seite eine jndi.properties mit folgendem Inhalt und legen Sie es in den Klassenpfad:

java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
java.naming.provider.url=localhost:1099

Verwenden Sie dann den folgenden Code, um Ihre EJB aufzurufen:

Context context;
try {
    context = new InitialContext();
    HelloBeanRemote beanRemote = (HelloBeanRemote)context.lookup("HelloBean/remote"); 
    beanRemote.test(); 
} catch (NamingException e) {
    e.printStackTrace();
    throw new RuntimeException(e);
}

Alternativ dazu können Sie, wenn Sie nicht wollen, eine jndi.properties Datei können Sie die JNDI-Umgebung im Code explizit einrichten und den Kontext wie folgt erstellen:

Properties properties = new Properties();
properties.put("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
properties.put("java.naming.factory.url.pkgs","=org.jboss.naming:org.jnp.interfaces");
properties.put("java.naming.provider.url","localhost:1099");
Context context = new InitialContext(properties);

Aber ich würde empfehlen, die jndi.properties um der Portabilität willen.

0voto

Matthew Sowders Punkte 1540

Sie können die Bean auch als Webdienst bereitstellen. Ich glaube, dass dies ab EJB 3 möglich ist. Es ist recht nett, wenn man bedenkt, dass man es mit Annotationen machen kann. Vielleicht möchten Sie diese Option nutzen, um die Kopplung zu verringern. Hier ist ein Link zu einer Lehrgang .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X