ici est ma mise en œuvre de DAO, je vais charger toute la table et mises en mémoire cache pendant une certaine période de tempsCDI intercepteurs d'appel méthode annotée au sein même instance
@ApplicationScoped
public class DataAccessFacade {
@Inject
private EntityManager em;
@CacheOutput
public Map<String, String> loadAllTranslation() {
List<Translation> list = em.createQuery("select t from Translation t").getResultList();
Map<String, String> result = new HashMap<String, String>();
// do more processing here, omitted for clarity
return result;
}
public String getTranslation(String key) {
return loadAllTranslation().get(key);
}
}
ici est mon client jersey
@Inject
DataAccessFacade dataAccessFacade;
@Path("/5")
@GET
@Produces(MediaType.TEXT_PLAIN)
public String t5(@QueryParam("id") String key) {
// load the data from dataAccessFacade
String text = dataAccessFacade.getTranslation(key);
String text2 = dataAccessFacade.loadAllTranslation().get(key);
}
dans le client si j'appelle le dataAccessFacade.loadAllTranslation(), je vais voir la logique intercepteur été exécutée
si j'appelle le dataAccessFacade.getTranslation() qui interne appelez le loadAllTranslation(), puis je n'ai pas vu l'intercepteur été exécuté
quel est le problème ici?
comment le résoudre? Un intercepteur lié à une classe intercepte toutes les méthodes.
j'ai essayé de déplacer l'annotation au niveau de la classe, même résultat. – Dapeng
Pas vraiment sûr. Pourriez-vous essayer cet intercepteur métier très simple et voir ce que vous obtenez: http://www.easybeans.org/doc/userguide/en/chunk-integrated/ch04s04.html –