2009-12-14 5 views
0

J'ai besoin d'injecter un haricot de printemps dans un contexte de couture. À moins que je ne déclare le haricot de printemps comme un EJB, je ne peux pas l'injecter dans d'autres composants à joints. Mais quand je fais cela, tous les champs injectés au printemps sont inutiles parce que Seam crée de nouvelles instances à l'exécution.Comment injecter un haricot de printemps dans un contexte Seam?

J'ai aussi essayé d'ajouter l'élément <seam:component/> à la définition de haricot de printemps et essayé de l'injecter dans le récipient avec l'annotation @In("beanId") dans la classe cible, mais je finis toujours avec un NullPointerException ...

EDIT :

J'ai lu les articles en ligne et fait comme ils disent. Mon composant de ressort est également ajouté au contexte de couture (je peux dire, parce que quand je définis un avec le même ID en couture, il se plaint). On dirait que @In ne ramasse pas ....

+0

Quelle version de Spring utilisez-vous? – Zach

+0

@Zach: J'utilise la version 2.5.3 – raoulsson

+0

Comment testez-vous votre application? Utilisez-vous SeamTest avec un serveur JBoss Embedded intégré? –

Répondre

1

Raoul,

Bien que je n'utilise Seam avec Spring, chapter 15 de Seam dans les livres d'action sur l'intégration parle de printemps. C'est gratuit et est mis à jour.

Vous avez dit

J'ai aussi essayé d'ajouter l'élément à la définition du grain de printemps et essayé de l'injecter dans le récipient avec le @In (« beanId »)

SEAM Le livre d'action indique

L'expression EL utilisée dans l'annotation @In, # {tournamentManager}, se résout en un bean nommé de manière équivalente dans le conteneur Spring, gracieuseté de la variable délégante resolv er

Avez-vous d'utiliser @In ("# {beanId}") au lieu de @In ("beanId"), ne fonctionnent pas?

J'ai vu

Par défaut, < couture: composant/> va créer un composant stateless Seam avec classe et le nom fourni dans la définition de haricots.

<bean id="someSpringBean" class="SomeSpringBeanClass" scope="prototype"> 
    <seam:component/> 
</bean> 

Et

L'attribut scope de < couture: composant/> peut être utilisé si vous souhaitez que le grain de printemps pour être géré dans un champ de Seam particulier. Le haricot de printemps doit être limité au prototype si la portée de la couture spécifiée est autre que STATELESS.

Avez-vous fait comme ci-dessus?

+0

Merci, j'ai lu exactement ça mais ça ne marche pas (encore) ... – raoulsson

+0

Oui, j'ai fait tout ça. Avec EL, sans EL. Va configurer un SeamTest maintenant ... – raoulsson

1

J'ai un projet en utilisant Seam + Spring et je dois définir @In (create = true) quand je veux injecter un bean Spring dans mon composant Seam sinon je reçois une exception NullPointerException, vous devriez l'essayer.

0

J'ai le même problème que le vôtre. J'ai suivi strictement le "Chapitre 27. Intégration Spring Framework" en couture ref. document. Mais mon haricot de printemps n'a jamais été injecté dans un composant de couture. Et finalement, j'ai découvert que j'avais le @BypassInterceptors dans mon composant seam. En supprimant cette annotation, mon haricot de printemps a été injecté avec succès. Puis j'ai réalisé que l'injection de dépendance est gérée par couture BijectionInterceptor. Ainsi, les @BypassInterceptors contourneront effectivement ce filtre :)

Questions connexes