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.
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.
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(..);
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
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.
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 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.