GWT avec JPAGWT avec JPA - aucun fournisseur de persistance
Il y a deux projets dans mon espace de travail Eclipse, nous allons les nommer:
-JPAProject -GWTProject
JPAProject contient des trucs de configuration JPA (persistance .xml, classes d'entités et ainsi de suite). GWTProject est un exemple de projet GWT (tiré du tutoriel officiel de GWT).
Les deux projets fonctionnent bien seuls. C'est-à-dire, je peux créer EMF (EntityManagerFactory) dans JPAProject et obtenir des entités de la base de données. GWTProject fonctionne bien aussi, je peux l'exécuter, remplir le texte du champ dans le navigateur et obtenir la réponse.
Mon but est d'appeler JPAProject à partir de GWTProject pour obtenir des entités. Mais le problème est que lorsque vous appelez DAO, je reçois l'exception suivante:
[WARN] Server class 'com.emergit.service.dao.profile.ProfileDaoService' could not be found in the web app, but was found on the system classpath
[WARN] Adding classpath entry 'file:/home/maliniak/workspace/emergit/build/classes/' to the web app classpath for this session
[WARN] /gwttest/greet
javax.persistence.PersistenceException: No Persistence provider for EntityManager named emergitPU
at javax.persistence.Persistence.createEntityManagerFactory(Unknown Source)
at javax.persistence.Persistence.createEntityManagerFactory(Unknown Source)
at com.emergit.service.dao.profile.JpaProfileDaoService.<init>(JpaProfileDaoService.java:19)
at pl.maliniak.server.GreetingServiceImpl.<init>(GreetingServiceImpl.java:21)
...
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488)
[ERROR] 500 - POST /gwttest/greet (127.0.0.1) 3812 bytes
Je suppose que les mises en garde au début peuvent être omis pour l'instant.
Avez-vous des idées? Je suppose qu'il me manque un point de base. Tous les indices sont très appréciés.
Mise à jour: Mon fournisseur de persistance est bien défini, le projet JPA fonctionne bien par lui-même.
Je suppose que c'est aussi un problème lié au classpath. Lors de l'exécution du projet GWT, dans WEB-INF/lib
, il n'y a que gwt-servlet.jar
. Pensez-vous que la création d'un fichier Ant personnalisé pour construire tout est la seule solution (par exemple, faire en sorte que le projet JPA soit jar et le copier en WEB-INF/lib
)? Ou existe-t-il une solution Eclipse, afin que je puisse définir correctement les propriétés du projet GWT afin que le projet GWT sache inclure le fichier persistence.xml
?
Mise à jour: OK, je l'ai fonctionné. J'ai essayé de mettre persitence.xml partout dans war/WEB-INF là où c'était possible, mais j'ai continué à obtenir l'erreur 'no persistence provider'. Il s'est avéré qu'il ne s'agissait pas de persistence.xml. Je n'ai pas copié le fichier eclipselink jar dans WEB-INF/lib, donc il n'a pas pu trouver la classe du fournisseur définie dans persistence.xml. Copier tous les pots a fait la chose.
Merci beaucoup Pascal.
Pouvez-vous confirmer que Google App Engine n'est pas activé accidentellement? GAE ne vous permet pas de vous connecter aux bases de données, et est une erreur débutant très commune. –