J'essaie de créer un serveur multithreading. Le problème est que je reçois l'erreur suivante:
play.Exception.jpaException: le contexte JPA n'est pas initialisé. JPA Entity Manager commence automatiquement lorsqu'une ou plusieurs classes annotées avec l'annotation @ javax.persistence.Entéity se trouve dans l'application. Em> Qu'est-ce que j'essaie de faire est d'accéder à la DB du nouveau fil ici Code p> des idées? p> p>
4 Réponses :
Je suppose que votre thread est lancé avant que le jeu ait une chance de démarrer le gestionnaire d'entité JPA. p>
Si votre classe de modèle est annotée avec @entTity, le gestionnaire d'entité aurait été créé et votre erreur n'apparaîtrait pas. p>
Donc, vous avez quelques options. Soit, p>
Personnellement, j'irais avec l'option 2. Il est mieux documenté et que les plugins de lecture sont plus importants pour prolonger le cadre plutôt que de modifier l'ordre du traitement. P>
N'utilisez pas de fil uni, utilisez des travaux à la place: et balljob: p>
C'est environ 10 ans que je réalise, cependant, le travail est une chose très générique. Il serait préférable de spécifier le package pour l'objet d'emploi sur une importation. Je ne sais pas si vous voulez dire par lots de printemps ou autre chose.
Ceci est NATATAIREE QUE CE QUE CI-DESSOUS: P> class Runner extends Runnable {
@Override
public void run() {
if (JPA.local.get() == null) {
EntityManager em = JPA.newEntityManager();
final JPA jpa = new JPA();
jpa.entityManager = em;
JPA.local.set(jpa);
}
JPA.em().getTransaction().begin();
... DO YOUR STUFF HERE ...
JPA.em().getTransaction().commit();
}
}
Mise à jour: Vous pouvez supprimer toutes les trucs JPA et le remplacer par jpaplugin.starttx et jpaplugin.closetx.
Comment travailler avec jpa.Local avec le cadre de jeu 1.4?, Cela change complètement
J'aime la simple la solution. Malheureusement, si j'utilise le démarrage, je ne suis pas sûr qu'il y ait un objet JPA à faire référence. Points bonus Si vous pouvez également fournir une réponse amicale de démarrage de printemps aussi :)
class Runner extends Runnable {
@Override
public void run() {
EntityManager em = JPA.newEntityManager();
em.setFlushMode(FlushModeType.COMMIT);
JPA jpa = new JPA();
jpa.bindForCurrentThread(JPA.DEFAULT, em, false);
em.getTransaction().begin();
// ... DO YOUR STUFF HERE ...
em.getTransaction().commit();
}
}
Ne donnez pas seulement du code comme solution, donnez-lui une explication avec elle également.