2017-09-30 1 views
0

Eh bien, je suis en train d'utiliser des haricots RequestedScoped dans un quartz d'emploi, voir:RequestedScope à quartz Job

public class JobRoboFtp implements Job { 

    @Inject 
    private AcervoVideoService acervoVideoService; 

    @Inject 
    private ConfiguracaoService configuracaoService; 

    @Inject 
    private FtpManager ftpManager; 

mais je me suis toujours:

No active contexts for scope type javax.enterprise.context.RequestScoped 

Eh bien, si je change ce service to @Dependent scope tout fonctionne mais je voudrais utiliser RequestedScope. Il y a un moyen?

Répondre

0

Puisque vous n'en avez pas dit beaucoup sur les versions, je vais supposer certaines des dernières versions de Weld 2.x (ou même 3.x) - alors il y a un moyen. Je suppose également que vous parlez de l'environnement SE, sinon la portée de la requête s'auto-activerait pendant les requêtes. Si nous parlons de CDI 1.2 (Weld 2.x), vous devez ajouter une dépendance explicite à Weld API et en faire usage. La dépendance est org.jboss.weld:weld-api et la fonctionnalité que vous recherchez est @ActivateRequestContext interceptor binding. Si vous cherchez un lien vers docs Weld, son here - notez que cela a été ajouté dans Weld 2.4!

Le principe est simple: il intercepte les appels de méthode et le contexte activé lors de la saisie de la méthode, puis le détruit lorsque vous quittez la méthode.

@ActivateRequestContext 
public void myMethod() { 
    // any content in here will have request context ACTIVE 
    doAwesomeThings(); 
} 

Si nous parlons de CDI 2.0/3.x de soudure - alors la même approche a été adaptée par CDI (version de soudure fonctionne là aussi). Vous pouvez lire à ce sujet here.