2010-12-07 68 views
1

Je suis confronté à un problème lors de l'utilisation de DI et d'intercepteurs dans une application JSF.L'injection d'EJB échoue lorsqu'un intercepteur est présent

J'ai un bean backing qui observe les événements JSF et effectue une recherche de données initiale. Dans la page JSF du haricot est enregistrée comme écouteur d'événement comme suit:

<f:event type="preRenderView" listener="#{myBean.loadData}"/> 

Le haricot est assez vers l'avant et ressemble fondamentalement ceci:

@Named 
@RequestScoped 
public class MyBean { 

    @EJB 
    private SomeDao dao; 

    public void loadData() { ... } 

    public void performSomeStuff() { ... } 

} 

Le dao est correctement injecté et tout va bien jusqu'à ici . Maintenant, je voudrais effectuer un chargement paresseux qui est fait dans un intercepteur (le code particulier n'a pas d'importance car le même comportement apparaît lorsque l'intercepteur procède juste sur le contexte d'invocation). Donc, avant d'appeler performSomeStuff() Je voudrais faire en sorte que toutes les données sont chargées:

@Interceptors(MyInterceptor.class) 
    public void performSomeStuff() { ... } 

A ce stade, l'EJB ne soit pas injecté plus longtemps (NPE apparaît ...) - des idées sur la ce?

Réglages:

  • GlassFish 3.0.1
  • WELD-000900 1.0.1 (SP3)
  • Mojarra 2.0.2 (FCS b10)

Merci à l'avance!

Cordialement, Alex

+0

et avez-vous essayé d'injecter un autre composant (non-ejb)? Est-ce que ça marche? – Bozho

+0

essayé d'autres composants et un autre ejb ainsi, résultat jusqu'à présent: tout ce qui est annoté @Inject est injecté, tout ce qui est annoté @EJB ne ... – alexhanschke

+0

pourrait être un bug. signalez-le :) – Bozho

Répondre

0

Si vous voulez faire des progrès, vous pouvez essayer d'utiliser intercepteurs 299 liés avec un intercepteur de liaison, par opposition au style EJB. S'il y a un bug dans la zone, le fait que votre intercepteur fonctionne un peu plus tard pourrait apporter un certain soulagement.