3.2.10. Changements dans les invocations à distance


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 un nouvel API client EJB pour faire l'invocation. Cependant, si vous ne souhaitez pas écrire votre code à nouveau pour pouvoir utiliser le nouvel 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>
Copy to Clipboard Toggle word wrap
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
Copy to Clipboard Toggle word wrap
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 avez 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;
    }
}
Copy to Clipboard Toggle word wrap
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);
Copy to Clipboard Toggle word wrap
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);
Copy to Clipboard Toggle word wrap
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")
Copy to Clipboard Toggle word wrap

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 » .
Retour au début
Red Hat logoGithubredditYoutubeTwitter

Apprendre

Essayez, achetez et vendez

Communautés

À propos de la documentation Red Hat

Nous aidons les utilisateurs de Red Hat à innover et à atteindre leurs objectifs grâce à nos produits et services avec un contenu auquel ils peuvent faire confiance. Découvrez nos récentes mises à jour.

Rendre l’open source plus inclusif

Red Hat s'engage à remplacer le langage problématique dans notre code, notre documentation et nos propriétés Web. Pour plus de détails, consultez le Blog Red Hat.

À propos de Red Hat

Nous proposons des solutions renforcées qui facilitent le travail des entreprises sur plusieurs plates-formes et environnements, du centre de données central à la périphérie du réseau.

Theme

© 2025 Red Hat