L'injection d'un statique EJB, non?
Je veux écrire ce morceau de code :
@Stateless
public class MyEjb
{
@EJB
private static MyOtherEjbWhichIWantStatic myOtherEjb;
}
Il fait sens pour moi, que je veux injecter un EJB dans ma classe, comme un élément statique, pour diverses raisons.
Java n'est pas très heureux avec qui, malheureusement,
com.sun.enterprise.container.common.spi.util.InjectionException: Illegal use of static field private static MyOtherEjbWhichIWantStatic myOtherEjb on class that only supports instance-based injection
Je ne comprends pas, pourquoi je ne peux pas injecter un statique EJB dans un autre EJB ?
Vous devez vous connecter pour publier un commentaire.
Comme d'autres l'ont souligné, ce n'est pas autorisé par le cahier des charges et la version courte est que le
@EJB
annotation est pris en charge uniquement pour les membres statiques dans les classes avec unmain()
fonction (voir la spécification EJB 3.0 et le client d'application conteneur).Pourquoi est-il si? Tout d'abord, en lecture/écriture aux champs statiques sont totalement interdits dans les Ejb (c'est la partie de l'EJB de restriction). De Pourquoi ne puis-je pas utiliser nonfinal champs statiques dans mon haricot d'entreprise?
Mais lors de l'utilisation en lecture seulement les champs statiques est autorisée, ce qui ne serait pas approprié pour les Ejb. Les Ejb Stateless peuvent être mis en commun, un conteneur peut décider de les détruire (ce qui est de la mise en œuvre spécifique) et que vous souhaitez que le conteneur choisir instance que vous allez utiliser, en particulier dans les environnements distribués. En d'autres termes, ne supposez jamais que vous êtes lié à une instance particulière.
Donc au final, oui, c'est un non-sens.
Parce que le spec ne le permet pas:
Noter que l'exception (application client classes principales) n'existe que parce que ces classes ne sont jamais instanciée. Fondamentalement, les champs statiques sont généralement problématique, et doublement dans un serveur d'application, parce qu'ils peuvent contourner la séparation de traitement de la demande de threads et de transactions, qui sont le point de l'ensemble de l'aide d'un serveur d'application dans la première place.
De Java EE 5 spécification de l'injection de la statique des Ejb n'est autorisé que dans l'application client classes principales.