2012-05-10 15 views
2

Je me demandais ... Disons que j'ai deux haricots apatrides dans ejb 3.1:Bean @Stateless avec @EJB garanti d'être une instance ejb unique?

  1. @Stateless Class1

    @EJB MyUniqueInstanceBean uniqueBean1;

2.

@Stateless 
Class2 

@EJB MyUniqueInstanceBean uniqueBean2; 

sont-uniqueBean1 et uniqueBean2 garantis cas uniques de MyUniqueInstanceBean?

+1

1. Modifiez votre question pour que votre code soit formaté et n'oubliez pas d'utiliser des parenthèses si nécessaire (est-ce que MyUniqueInstanceBean est injecté dans Class1 et Class2?). 2. La réponse dépend de la façon dont vous avez défini MyUniqueInstanceBean: la réponse est oui si et seulement si c'est un Singleton – perissf

Répondre

2

Si MyUniqueInstanceBean est Stateless, il n'est pas entre vos mains sont les appels à uniquebean1 et uniquebean2 appelle réellement à la même instance. Dans la spécification EJB 3.1 est dit avec les mots suivants:

Parce que toutes les instances d'un bean session sans état sont équivalents, le conteneur peut choisir de déléguer une méthode de client invoquée pour toute instance disponible. Cela signifie, par exemple, que le conteneur peut déléguer les demandes provenant du même client dans la même transaction à différentes instances, et que le conteneur peut entrelacer les demandes de plusieurs transactions à la même instance.

Si MyUniqueInstanceBean est Stateful, il est garanti que uniquebean1 et uniquebean2 ne se réfèrent pas à même instance. Encore une fois à partir de la spécification:

Une session la vie d'instance de haricot commence quand un client obtient une référence à une instance de bean session avec état par la dépendance injection ou JNDI, ou lorsque le client appelle un créer procédé de la maison de la fève de session interface. Cela provoque le conteneur à appeler newInstance sur la classe de bean session à créer une nouvelle instance de bean session.

Si vous utilisez Singleton, puis les deux se réfèrent à même instance, parce qu'il n'y a qu'une seule instance:

Un bean session Singleton est une composante de haricot de session qui est instancié fois par application . Dans les cas où le conteneur est réparti sur de nombreuses machines virtuelles, chaque application aura une instance de bean pour chaque JVM.

+0

merci pour la clarification. Je soupçonnais que stateful garantirait une instance unique pour Class1 et Class2. – user899757

+0

Comment avoir les mêmes instances de beans avec état disponibles dans 2 beans sans état différents lorsque c'est le même client qui appelle les 2 beans sans état différents? – jch

Questions connexes