Est-il possible de @Injecter un @RequestScoped fève dans un @EJB Stateless?
Est-il possible d'injecter une demande d'étendue de CDI fève dans un bean session sans état?
J'avais posé une question connexe de savoir et de pensée spécifiques CDI @RequestScoped dans @Stateless question méritait d'être son propre post.
En passant de l'état entre les méthodes d'EJB /@RequestScoped et @Stateless
J'ai aussi posé une question similaire à propos de JMS @MessageDriven des haricots fondamentalement veux savoir la même chose au sujet de @Stateless.
@RequestScoped CDI injection dans @MessageDriven bean
- Vous pourriez faire, c'est un proxy de toute façon, mais est-ce que sur le plan conceptuel de sens? N'auriez-vous pas plutôt faire l'inverse? De plus naturel et de l'auto-documentation du code.
- Juste point - même si cela fonctionne, il serait difficile de dire ce qui se passait au premier coup d'œil.
- J'étais sceptique aussi, mais la recherche de la CDI définition de la portée de la requête. Ce n'est pas seulement la requête http champ d'application, mais aussi le champ d'application qui couvre la demande d'une méthode asynchrone, méthode à distance, bmm, la manipulation d'une msg, etc. Donc, dans ce sens, il est utile comme une sorte de remplacement pour les données TLS.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez tout à fait faire ce que vous mentionnez et utiliser
@RequestScoped
les haricots dans une@Stateless
session bean et un@MessageDriven
bean. C'est une partie fondamentale de la CDI spec et TCK et de la garantie des portable.Remarque sur les banques multilatérales de développement
Sachez qu'il y a un test pour un
@Stateless
bean qui utilise un@RequestScoped
bean, mais il n'existe aucun test qui garantit une@MessageDriven
bean peut faire référence à@RequestScoped
haricots. C'était juste un oubli et est déjà fixée pour le Java EE 7 TCK. Donc, juste être conscient que si il ne fonctionne pas pour les MDB cas, il peut ne pas être de votre faute 🙂La solution serait tout simplement avoir votre MDB déléguer à un SessionBean de quelque nature que ce
@Stateless
,@Stateful
, et@Singleton
tous ont@RequestScoped
tests.Faire de l'EJB, elle-même, portée
Tout
@Stateless
,@Singleton
et@MessageDriven
peut avoir l'étendue des références injectés via@Inject
, ils ne peuvent pas être@RequestScoped
ou de tout autre portée. Seul le@Stateful
modèle est assez souple pour soutenir étendues. En d'autres termes, vous pouvez annoter le@Stateful
bean classe elle-même comme@RequestScoped
,@SessionScoped
, etc..En termes simples
@Stateless
,@Singleton
ont fixé des "scopes" déjà.@Singleton
est essentiellement@ApplicationScoped
et@Stateless
serait peut-être certains confectionnés portée comme@InvocationScoped
, si ça existait. Le cycle de vie d'un@MessageDriven
bean est entièrement du Connecteur qui l'anime et est donc également pas autorisés à avoir défini la portée.