2010-05-15 6 views
5

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.

+0

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. –

Répondre

0

Avez-vous déclaré un fournisseur de persistance dans votre persistence.xml? Quelque chose comme ça (j'utilise Hibernate ici, l'adapter à tout fournisseur persistance que vous utilisez):

<persistence 
    <persistence-unit name="emergitPU" transaction-type="..."> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    ... 
    </persistence-unit> 
</persistence> 

Si vous le faites, alors je soupçonne un problème de classpath. Avez-vous correctement mis en package le projet JPA dans la Webapp, par exemple au WEB-INF/lib?

+0

Merci. J'ai un fournisseur de persistance bien défini, j'ai mentionné que 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 seule solution consiste à créer un fichier ant personnalisé pour créer un fichier complet (par exemple, sortir le fichier JPA du projet JPA et le copier dans WEB-INF/lib)? Ou existe-t-il une solution Eclipse, donc je pourrais définir les propriétés du projet GWT correctement afin que le projet GWT sache inclure le fichier persistence.xml? – meliniak

+0

Ok, maintenant c'est un commentaire, pas une réponse. BTW, la mauvaise chose est qu'aucune nouvelle ligne peut être fournie ici, de sorte que le poste ne peut pas être formaté pour une lecture plus facile. J'ai créé le fichier avec META-INF/persistence.xml et l'ai placé dans WEB-INF/lib, mais cela ne fonctionne toujours pas. Je n'ai plus d'idées, en avez-vous encore à partager? – meliniak

+0

@meliniak Merci. Juste au cas où vous ne l'auriez pas remarqué, vous pouvez éditer votre question pour la mettre à jour (j'ai déplacé le suivi de la question initiale). Retour à votre question maintenant Recevez-vous exactement le même avertissement lors de l'empaquetage du pot dans 'WEB-INF/lib'? Si non, pouvez-vous mettre à jour la question avec la nouvelle trace? –

2

En luttant beaucoup avec le même message d'erreur, j'ai résolu le problème de la copie de tous les fichiers jar (eclipselink.jar, eclipselink-jpa-modelgen_2.1.0.v20100614-r7608.jar, javax.persistence_1.0.0.jar, javax. persistence_2.0.1.v201006031150.jar) depuis le zip EclipseLink vers le dossier .../war/WEB-INF/lib de mon projet GWT pour que tout soit disponible pour la jetée en mode hébergé. Comme vous pouvez le voir dans la liste des fichiers, j'utilisais EclipseLink 2.1. Veuillez adapter cette liste à votre implémentation JPA, si nécessaire.

En espérant que cela puisse vous aider aussi.

+0

Merci beaucoup pour cette solution, une longue journée de recherche se termine enfin! – Josh

Questions connexes