3.2.10. Changements dans les invocations à distance

3.2.10.1. Migrer des applications dépoyées dans JBoss EAP 5 qui font des invocations dans JBoss EAP 6

Résumé

Dans JBoss EAP 5, l'interface distante EJB était liée dans JNDI, par défaut, sous le nom "ejbName/local" pour les interfaces locales, et "ejbName/remote" pour les interfaces éloignées. L'application client consulte ensuite le bean qui utilise "ejbName/remote".

Dans JBoss EAP 6, il y a une nouvelle API client EJB pour faire l'invocation. Cependant, si vous ne souhaitez pas écrire votre code à nouveau pour pouvoir utiliser la nouvelle API, vous pourrez modifier le code existant pour utiliser l'ejb:BEAN_REFERENCE d'accès distant aux EJB avec la syntaxe suivante :
Pour les beans stateless, la syntaxe ejb:BEAN_REFERENCE est la suivante :
ejb:<app-name>/<module-name>/<distinct-name>/<bean-name>!<fully-qualified-classname-of-the-remote-interface>
Pour les beans stateful, la syntaxe ejb:BEAN_REFERENCE est la suivante :
ejb:<app-name>/<module-name>/<distinct-name>/<bean-name>!<fully-qualified-classname-of-the-remote-interface>?stateful
Les valeurs à substituer dans la syntaxe ci-dessus sont :
  • <app-name> - le nom de l'application des EJB déployés. C'est généralement le nom de l'ear sans le suffixe .ear. Cependant, le nom peut être substitué dans le fichier application.xml. Si l'application n'est pas déployée comme un .ear, cette valeur correspondra à une chaîne vide. Assumons que cet exemple n'était pas déployé en tant qu'EAR.
  • <module-name> - le nom du module des EJB déployés sur le serveur. Il s'agit normalement du nom du jar du déploiement EJB, sans le suffixe .jar, mais il peut être remplacé par ejb-jar.xml. Dans cet exemple, on assume que les EJB sont déployés dans jboss-ejb-remote-app.jar, donc le nom du module est jboss-ejb-remote-app.
  • <distinct-name> - un nom d'EJB distinct, en option. Cet exemple n'utilise pas un nom distinct, mais un string vide.
  • <bean-name> - correspond par défaut au nom de simple classe d'implémentation du bean.
  • <fully-qualified-classname-of-the-remote-interface> - le nom de classe complet de la vue distante.
Mise à jour du code client

Assumons que vous ayez déployé l'EJB stateless suivant dans un serveur JBoss EAP 6. Notez qu'il expose une vue distante du bean :

@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;
    }
}
Dans JBoss EAP 5, l'invocation et la recherche EJB sont codées de la façon suivante :
InitialContext ctx = new InitialContext();
RemoteCalculator calculator = (RemoteCalculator) ctx.lookup("CalculatorBean/remote");
int a = 204;
int b = 340;
int sum = calculator.add(a, b);
Dans JBoss EAP 6, à partir des informations ci-dessus, l'invocation et la recherche sont codées ainsi :
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);
Si votre client accède à un EJB stateful, vous devrez ajouter «?stateful» à la fin de la recherche contexte, comme suit :
final RemoteCalculator statefulRemoteCalculator =  (RemoteCalculator) context.lookup("ejb:" + appName + "/" + moduleName + "/" + distinctName + "/" + beanName + "!" + viewClassName + "?stateful")

Pour trouver un exemple, qui comprend à la fois le code client et le code serveur, regarder dans Quickstarts, à Modules dans le chapitre Guide de démarrage de Quickstart (Get Started Developing Applications) dans le Guide de développement de JBoss EAP 6 (Development Guide) à https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/ pour la manière de procéder.
Pour obtenir plus d'informations sur les invocations à distance par JNDI, consulter Section 3.2.10.2, « Invoquer un session bean à distance avec JNDI » .