Bonjour,

J'ai développé un SI avec Glassfish + Postgresql, dont un des services appel un bean singleton TraitementManager qui utilise une méthode asynchrone. Cette méthode appel un Bean Managed Transaction pour mettre à jour le status du traitement. Voici en gros le code utilisé:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
 
@Stateless
@LocalBean
public class GestionTraitement implements IGestionTraitement{
  @EJB private TraitementManager manager;
 
  public void traitement(String traitement, String user, String objettraité){
 
    manager.startTraitement(traitement, user, objettraité);
 
  }
}
 
@Singleton
@LocalBean
public class TraitementManager{
 
  @EJB TraitementBMT traitementBMT;
 
  @Asynchronous
  public void startTraitement(String traitement, String user, String objettraité){
    List<Traitement> list = traitementBMT.getTraitements();
    for(Traitement t:list){
      traitementBMT.updateStatut(t,"en cours");
      //execute traitement
      traitementBMT.updateStatut(t,"fini");
    }
 
}
 
@Stateless
@TransactionManagement(TransactionManagementType.BEAN)
@LocalBean
public class TraitementBMT{
  @Resource UserTransaction utx;
  @PersistenceContext(unitName="ejbPU") EntityManager entityManager;
 
  public List<Traitement> getTraitements(){
    Query query =....
    ...
    List l = query.getResutlList();
    return (List<Traitement>) l;
  }
 
  public void updateStatut(Traitement t, String statut){
    utx.begin();
    t.setStatut(status);
    entityManager.merge(t);
    utx.commit();
  }
}
Mon problème c'est qu'à partir de la méthode asynchrone, l'injection ne fonctionne plus. utx et entityManager sont null losque j'arrive dans la classe TraitementBMT.
J'ai déjà tester plusieurs solution, notamment en appelant la classe par un new InitialContext puis initialContext.lookup(nomJNDI) mais ca ne marche pas non plus.

Merci pour toutes informations qui m'aiguillerai dans le bon sens.

Loïc