Quelle est la relation entre java:comp/env et java:global?
Quelle est la relation entre java:comp/env
et java:global
(concernant 3.1 spec)?
On dirait que java:comp/env
contient spécifique aux références EJB.
Que signifie "spécifique" dans ce cas?
1 réponses
java:global
est un espace de noms global pour l'ensemble du serveur d'applications, qui inclut d'autres modules EAR (considérés comme des applications différentes).
java:comp/env
est un beaucoup plus petit espace de noms. Pour le module web, il correspond à tous les composants web (servlets, etc.) qui sont tous considérés comme un seul 'composant' pour JNDI, mais pour les beans EJB, c'est un espace de noms pour un seul bean, puisque chaque bean est considéré comme un bean séparé. composant.
Il y a aussi un java:app
et un java:module
, dont les étendues se situent entre global et comp.
Une grande différence entre java:comp/env
et les autres est que le premier est strictement en lecture seule à l'exécution et contient entre autres les beans qui sont injectés dans un composant. Donc, par exemple, considérons:
@Stateless
public class ExampleBean {
@EJB
OtherBean testBean;
}
Dans ce cas, le proxy qui a été injecté dans le champ testBean
peut également être obtenu à partir de java:comp/env
, mais seulement lorsque java:comp/env
est appelé dans ExampleBean (JNDI est fortement contextuelle).
Si vous vouliez un proxy différent de L'EJB OtherBean
, ou une référence quand aucune injection n'a été faite, vous pouvez les obtenir à partir de l'une des autres étendues. Selon la classe à partir de laquelle vous effectuez L'appel JNDI, vous pourrez utiliser des étendues plus petites.
Par exemple, si OtherBean
est défini dans le même module que ExampleBean
, vous pouvez utiliser java:module
, si c'est la même application (mais peut-être différents modules), vous pouvez utiliser java:app
.
Enfin, java:global
est toujours sûr à utiliser, car il ne dépend pas du contexte. Cela signifie que vous pouvez utiliser à l'intérieur, par exemple, un thread complètement séparé non géré. L'inconvénient d'utiliser java:global
est que vous devez inclure le nom de l'application et le nom du module si une EAR est utilisée, et sinon au moins le nom du module.