Quelle est la relation entre java:comp/env et java:global?
Quelle est la relation entre java:comp/env
et java:global
(concernant l'article 3.1 spec)?
Semble comme java:comp/env
contient spécifiques à des références EJB.
Que signifie "spécifique" dans ce cas?
Vous devez vous connecter pour publier un commentaire.
java:global
est un espace de noms global pour l'ensemble de l'application serveur, qui comprend entre autres l'OREILLE des modules (qui sont considérées comme différentes applications).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 ensemble à être considéré comme un simple "composant" pour JNDI, mais pour les EJB les haricots c'est un espace de noms pour un seul haricot, puisque chaque fève est considéré comme un élément distinct.Il y a aussi un
java:app
et unjava:module
, dont les étendues de tomber entre global et comp.Une grande différence entre
java:comp/env
et les autres, c'est que le premier est strictement lecture seule lors de l'exécution et contient, entre autres, les fèves, qui sont injectés dans certains composant. Si par exemple envisager:Dans ce cas, le proxy qui a été injecté dans le champ
testBean
peut également être obtenu à partir dejava:comp/env
, mais seulement quandjava:comp/env
est référencé à partir de l'intérieur de ExampleBean (JNDI est fortement contextuelle).Si vous voulais un proxy différent de l'EJB
OtherBean
ou recherché une référence lorsqu'pas d'injection a été faite, vous pouvez obtenir ceux de toutes les autres zones. En fonction de la classe à laquelle vous êtes en train de faire le JNDI appel, vous serez en mesure d'utiliser de plus petites étendues.Par exemple, si
OtherBean
est définie dans le même module queExampleBean
, vous pouvez utiliserjava:module
, si c'est la même application (mais peut-être différents modules), vous pouvez utiliserjava:app
.Enfin,
java:global
est toujours plus sûr à utiliser, car elle ne dépend pas du contexte. Cela signifie que vous pourriez utiliser à partir de l'intérieur par exemple, un non-gérés complètement thread séparé. L'inconvénient de l'utilisationjava:global
est que vous devez inclure le nom de l'application et le nom du module si l'OREILLE est utilisé, et sinon au moins le nom du module.