web-dev-qa-db-fra.com

EJB3 Interfaces locales et distantes

J'ai compris que l'interface locale est conçue pour les clients de l'instance JVM du même conteneur et l'interface distante est conçue pour les clients résidant en dehors de la JVM du conteneur EJB. Qu'en est-il du client d'application Web qui ne réside pas (ni n'est emballé) dans le même fichier .ear, mais réside sur le même serveur Java EE?

21
Thurein

Officiellement, les beans annotés @Local ne sont accessibles que s'ils sont dans la même application. Un fichier .war déployé séparément d'un fichier .ear (ou d'un autre EJB .war ou autre .jar) est une application différente, même lorsqu'il est déployé sur la même instance de serveur d'applications.

Il n'y a donc aucune garantie que le code de votre fichier .war puisse appeler @Local les beans EJB définis dans le fichier .ear.

Cependant, dans la pratique, sur presque tous les serveurs d'applications, cela fonctionne.

Il existe une demande pour que la spécification EJB 3.2 prenne officiellement en charge les appels locaux inter-applications: http://Java.net/jira/browse/EJB_SPEC-22

26
Arjan Tijms

Les interfaces locales doivent être utilisées dans la communication au sein de la même application . Cela ne signifie pas nécessairementJVM.

Le problème est le suivant: même au sein de la même instance de machine virtuelle Java, sur le même serveur, deux applications différentes ne peuvent pas communiquent à l'aide d'interfaces locales (ce qui signifie des vues locale et sans interface).

Si vous avez un composant Web (WAR) ainsi qu'un composant métier (EJB-JAR) qui se trouvent dans la même application, la solution la plus intuitive et simple consiste à les regrouper dans un EAR ou dans un WAR (depuis Java EE 6). .

5
Piotr Nowicki

Vous utilisez les interfaces distantes, mais vous effectuez une recherche à l'aide de JNDI (c'est ce que je ferais), de cette manière, vous trouvez l'instance de l'EJB sur le serveur et vous pouvez l'utiliser dans votre application Web.

Bien que vous ayez toujours besoin d'un fichier jar avec les interfaces EJB dans le projet d'application Web.

EDITet je suis d’accord avec JB Nizet, pourquoi voudriez-vous que le WAR sorte en dehors de l’AEP?

0
Alvin Baena

Les interfaces distantes peuvent être appelées à travers des applications, de partout sur le serveur d'applications, ainsi que de l'extérieur, même à partir d'autres hôtes.

Supposons donc que vous avez besoin d’une interface distante (@Remote). Dans EJB 3.1, vous pouvez utiliser l'injection de dépendance.

0
AValchev