2015-04-07 37 views
5

Sto usando RestEasy in un ambiente JBoss AS 7.1.1.EJB è nullo in PreProcessInterceptor

Ho implementato per motivi di sicurezza una classe PreProcessInterceptor. La classe è annotata con @Provider e @ServerInterceptor. L'intercettatore viene invocato ogni volta, il che va bene.

Ora, quello che mi dà fastidio è il seguente.

Inietto un EJB con l'annotazione @EJB nella classe. Quando viene chiamato PreProcessInterceptor, detto EJB è sempre null.

@Provider 
@ServerInterceptor 
public class SecurityInterceptor implements PreProcessInterceptor 
{ 
    @EJB 
    private SomeEjb someEjbServiceFacade; 

    ... some funny stuff 
} 

Questo EJB assomiglia seguito:

@Stateless 
public class SomeEjb extends AbstractServiceFacade 
{ 
    ... some important stuff 
} 

La parte divertente, funziona tramite lookup:

Context ctx = new InitialContext(); 
SomeEjb asf = (SomeEjb)ctx.lookup("java:global/mySuperApplication/SomeEjb"); 

fa qualcuno ha una spiegazione per questo comportamento?

Grazie in anticipo.

+0

Hai provato '@ Inject'? – kolossus

risposta

0

Prova ad aggiungere l'annotazione @Stateless alla classe SecurityInterceptor.

0

Cosa sono gli intercettori ?

Interceptors vengono utilizzati in combinazione con Java EE è riuscito classi per consentire agli sviluppatori per richiamare i metodi di intercettazione su un associated target class, in collaborazione con method invocations or lifecycle events.

La classe sottostante SomeEjb dovrebbe essere accessibile anche da associated target class i.e., SecurityInterceptor.

@Stateless 
public class SomeEjb extends AbstractServiceFacade 
{ 
    ... some important stuff 
} 

In-Per fare questo abbiamo bisogno di aggiungere il SecurityInterceptor nel <context-param> di web.xml.

Dovrebbe assomigliare a questo!

<context-param> 
     <param-name>resteasy.providers</param-name> 
     <param-value> 
     .... 
     com.myInterceptors.interceptors.security.SecurityInterceptor 
     </param-value> 
</context-param> 
+0

Se si utilizza CDI, è anche possibile utilizzare l'annotazione '@ Observer'. [Fare riferimento] (http://docs.oracle.com/javaee/6/tutorial/doc/gkhic.html) – 09Q71AO534

3

Non si può iniettare EJB in classe arbitraria, ma solo nel tipo specificato quali servlet, Filter, Listener, Stateless, Statefull, fagioli MessageDriven, Singleton. Se si desidera utilizzare EJB in altri tipi di classe, utilizzare l'accesso tramite JNDI come indicato sopra.