3.2.10. Änderungen bei Remote-Aufrufen

3.2.10.1. Migration von JBoss EAP 5 deployten Applikationen, die Remote-Aufrufe zur JBoss EAP 6 tätigen

Zusammenfassung

Bei der JBoss EAP 5 war das EJB-Remote-Interface standardmäßig in JNDI unter dem Namen "ejbName/local" für lokale Interfaces und "ejbName/remote" für Remote-Interfaces gebunden. Die Client-Applikation suchte das Bean dann mittels "ejbName/remote".

Bei der JBoss EAP 6 wurde ein neues, spezifisches EJB Client API zur Ausführung von Aufrufen eingeführt. Wenn Sie jedoch Ihren Code nicht neu schreiben möchten die neue API zu benutzen, so können Sie den vorhandenen Code ändern um ejb:BEAN_REFERENCE Remote-Zugriff auf EJBs mit folgender Syntax zu benutzen.
Für Stateless Beans lautet die ejb:BEAN_REFERENCE-Syntax:
ejb:<app-name>/<module-name>/<distinct-name>/<bean-name>!<fully-qualified-classname-of-the-remote-interface>
Für Stateful Beans lautet die ejb:BEAN_REFERENCE-Syntax:
ejb:<app-name>/<module-name>/<distinct-name>/<bean-name>!<fully-qualified-classname-of-the-remote-interface>?stateful
Die zu ersetzenden Werte in der obigen Syntax sind:
  • <app-name> - der Applikationsname der deployten EJBs. Dies ist in der Regel der ear-Name ohne das .ear-Suffix, allerdings kann der Name in der application.xml-Datei außer Kraft gesetzt werden. Wird die Applikation nicht als ein .ear deployt, so ist dieser Wert ein leerer String. Nehmen Sie an, dass dieses Beispiel nicht als ein EAR deployt wurde.
  • <module-name> - der Modulname der deployten EJBs auf dem Server. Dies ist in der Regel der jar-Name des EJB-Deployments ohne den .jar-Suffix, kann aber durch Verwendung der ejb-jar.xml außer Kraft gesetzt werden. Nehmen Sie in diesem Beispiel an, dass die EJBs in einem jboss-ejb-remote-app.jar deployt wurden, so dass der Modulname jboss-ejb-remote-app lautet.
  • <distinct-name> - ein optionaler eindeutiger Name für das EJB. Dieses Beispiel verwendet keinen eindeutigen Namen und verwendet einen leeren String.
  • <bean-name> - der Standard, der einfache Klassenname der Bean-Implementierungsklasse.
  • <fully-qualified-classname-of-the-remote-interface> - der Remote-Ansicht vollqualifizierte Klassenname.
Aktualisierung des Client-Code

Nehmen Sie an, Sie hätten das folgende stateless EJB auf einen JBoss EAP 6 Server deployt. Beachten Sie, dass es eine Remote-Ansicht für das Bean offenlegt.

@Stateless
@Remote(RemoteCalculator.class)
public class CalculatorBean implements RemoteCalculator {
 
    @Override
    public int add(int a, int b) {
        return a + b;
    }
 
    @Override
    public int subtract(int a, int b) {
        return a - b;
    }
}
Bei der JBoss EAP 5 war der Client EJB-Lookup und Aufruf ähnlich wie folgt kodiert:
InitialContext ctx = new InitialContext();
RemoteCalculator calculator = (RemoteCalculator) ctx.lookup("CalculatorBean/remote");
int a = 204;
int b = 340;
int sum = calculator.add(a, b);
Bei der JBoss EAP 6 wird der Client EJB-Lookup und Aufruf mittels der obigen Informationen wie folgt kodiert:
final Hashtable jndiProperties = new Hashtable();
jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
final Context context = new InitialContext(jndiProperties);
final String appName = "";
final String moduleName = "jboss-ejb-remote-app";
final String distinctName = "";
final String beanName = CalculatorBean.class.getSimpleName();
final String viewClassName = RemoteCalculator.class.getName();
final RemoteCalculator statelessRemoteCalculator =  (RemoteCalculator) context.lookup("ejb:" + appName + "/" + moduleName + "/" + distinctName + "/" + beanName + "!" + viewClassName);
 
int a = 204;
int b = 340;
int sum = statelessRemoteCalculator.add(a, b);
Falls Ihr Client auf ein stateful EJB zugreift, so müssen Sie "?stateful" wie folgt an das Ende des Kontext-Lookup anhängen:
final RemoteCalculator statefulRemoteCalculator =  (RemoteCalculator) context.lookup("ejb:" + appName + "/" + moduleName + "/" + distinctName + "/" + beanName + "!" + viewClassName + "?stateful")

Ein komplettes Arbeitsbeispiel samt Server- und Clientcode finden Sie in den Quickstarts. Weitere Informationen finden Sie unter Review the Quickstart Tutorials im Kapitel Get Started Developing Applications im Entwicklungshandbuch für die JBoss EAP 6 unter https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/.
Weitere Informationen zu Remote-Aufrufen unter Verwendung von JNDI finden Sie unter Abschnitt 3.2.10.2, »Remote-Aufruf eines Session-Beans mittels JNDI« .