2017-09-14 2 views
0

Je veux configurer un mécanisme de mise en cache @ApplicationScoped qui consiste simplement à stocker des valeurs de base de données qu'il lit au démarrage. Est-il possible de le faire sans tenir un EntityManager et d'autres dépendances injectées (c'est-à-dire une fabrique de requêtes) tout le temps? J'ai seulement besoin d'eux pendant l'initialisation.@ApplicationScoped - est-il possible d'obtenir des injections temporaires?

Répondre

1

Je ne suis pas sûr si le conteneur maintient vraiment la connexion ouverte. Mais disons que ça va. Tout d'abord, vous devez avoir le EntityManager injectable via CDI. Vous pouvez le faire comme ceci:

@ApplicationScoped 
public class EntityManagerProducer { 
    @Produces 
    @PersistenceContext(unitName = "my-pu-name") 
    private EntityManager em; 
} 

Ensuite, au sein de votre méthode d'initialisation vous pouvez utiliser:

public void init() { 
    EntityManager entityManager = CDI.current().select(EntityManager.class).get(); 
    // Do some stuff here 
    CDI.current().select(Entitymanager.class).destroy(entityManager); 
} 

Le .destroy doit veiller à ce que la dépendance est pas plus actif.