Quelle est la meilleure façon d'avoir un CDI et JPA dans Java SE?
Je voudrais avoir dans Java SE
@Stateless
public class CarDAO {
@Inject
private EntityManager em;
public Car findById(Long id) {
return em.find(Car.class, id);
}
}
@Singleton
public class Application {
@Inject
private CarDAO carDAO;
public void run() {
Car car = carDAO.findById(44);
System.out.println(car);
}
}
public class EntryPoint {
public static void main(String[] args) {
Application application = //missing code
application.run();
}
}
Ce que j'ai à faire pour y parvenir? Je suis l'aide de base de données postgres, et maven dans mon projet.
J'avais déjà lu quelque chose à propos de Soudure (mais ça ne regarde que comme des CDI). Je ne sais pas comment faire pour ajouter à Souder
possibilité d'injecter de l'Entité Gestionnaire. Je sais que je peux obtenir de l'Entité Gestionnaire de
EntityManagerFactory emf = Persistence.createEntityManagerFactory("mgr");
EntityManager em = emf.createEntityManager();
mais il n'est pas si commode que l'injection d'.
Ce serait formidable s'il n'y a aucun tutoriel à ce sujet. De toute façon, merci pour toute aide!
Ce Conteneur CDI utilisez-vous? Quelle version? Le modèle le plus courant est l'utilisation d'un producteur pour votre gestionnaire d'entité une fois votre EMF a été instancié.
OriginalL'auteur Dariusz Mydlarz | 2014-01-05
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, les Ejb sont une partie de Java EE, vous ne pouvez donc pas les utiliser en Java SE. Cependant, le CDI peut être utilisé en environnement Java SE, mon exemple va vous montrer comment l'utiliser avec de la Soudure, mais il y a aussi d'autres implémentations de noter que le CDI est juste de la spécification et de la Soudure est l'une des implémentations de cette spécification.
Afin d'utiliser de la Soudure, vous devez soit mettre
weld-se-x.x.x-Final.jar
sur le chemin de la classe ou de spécifier ses dépendances Maven commeAlors vous avez besoin pour démarrer le conteneur dans votre méthode principale, donc faire quelque chose comme ceci
Cela devrait vous aider à démarrer, vous pouvez utiliser le CDI Producteurs pour faire de votre
EntityManager
injectableVoir aussi Soudure de la documentation sur l'utilisation de CDI dans Java SE.
close()
sur l'EntityManager et/ou EntityManagerFactory?Le plus facile serait le broyeur méthode, cela va automatiquement fermer l'EntityManager après l'expiration de son champ d'application - voir mon edit.
Pourquoi utilisez-vous l' @EntityManager Qualificatif?
Désolé, selon les docs semble que vous n'avez pas besoin de la qualification, de l'essayer
docs.jboss.org/cdi/spec/1.1/...
OriginalL'auteur Petr Mensik
La réponse de pierre semble fonctionner, mais les dépendances Maven sont dépassés (voir ce bug)
OriginalL'auteur leftbit