2013-07-30 17 views
5

Sto sviluppando un'applicazione REST utilizzando Glassfish 4.0.GlassFish 4 + Filtro JAX-RS con @EJB

Nelle classi di risorse posso far funzionare l'iniezione rendendo la classe @Stateless e l'iniezione tramite @EJB (la classe iniettata è un EJB senza stato).

Tuttavia questo approccio non funziona in un filtro JAX-RS. Non riesco a fare in modo che l'iniezione funzioni.

See codice qui sotto:

@Provider 
public class UpdateFilter implements ContainerRequestFilter { 

    @EJB 
    private MyBeanInterface doStuffBean; 

    @Override 
    public void filter(ContainerRequestContext requestContext) { 

     ... 
    } 
} 

doStuffBean è sempre nullo.

Qualche suggerimento?

risposta

1

Credo che @EJB funzioni solo in classi gestite da Java EE come altri EJB e Servlet.

Se si utilizza CDI, è possibile utilizzare l'annotazione @Inject, ma se questa classe non è un ManagedBean, sarà necessario effettuare una ricerca.

+0

@Inject non funziona. Viene sollevata un'eccezione: ** UnsatisfiedDependencyException: nessun oggetto disponibile per l'iniezione ... **. – bafitor

+0

Ecco perché la tua classe non è un bean gestito. Non sono sicuro che sia in grado di rendere questo Provider un ManagedBean, quindi probabilmente dovrai creare il tuo produttore che esegue la ricerca EJB e quindi puoi immetterlo ovunque (ci sono molti articoli che mostrano come farlo) o tu può solo fare la ricerca in questa classe. – ZeusSelerim

0

Provare a utilizzare CDI sostituendo @Stateless da @ManagedBean e @EJB con @Inject. Questo funziona per me in JAX-RS.

Se si ha bisogno di EJB per scopi diversi dall'iniezione, potrebbe essere utile mantenere la doppia annotazione @Stateless @ManagedBean.

+0

Ho provato entrambe le soluzioni ma non funziona. Ho ottenuto un ** UnsatisfiedDependencyException: non c'era nessun oggetto disponibile per l'iniezione. **. Qualche idea? – bafitor

+1

Non l'ho visto prima con GF3 quindi probabilmente un problema in GF4. https://java.net/jira/browse/GLASSFISH-20597 dice che è stato risolto in v4.0.1 - è la versione che stai usando? In caso contrario, puoi provare alcuni dei suggerimenti per la soluzione alternativa all'indirizzo http://stackoverflow.com/questions/16216759/dipendenza-iniezione-con-jersey-2-0 Hai provato a rimuovere @Stateless o ne hai bisogno? – TheArchitect

Problemi correlati