GWT с JPA - нет постоянного поставщика - PullRequest
5 голосов
/ 16 мая 2010

GWT с JPA

В моей рабочей области eclipse есть два проекта, назовем их:

-JPAProject -GWTProject

JPAProject содержит материал конфигурации JPA (persistence.xml), классы сущностей и тд).GWTProject - это примерный проект GWT (взят из официального руководства GWT).

Оба проекта работают в одиночку.То есть я могу создать EMF (EntityManagerFactory) в JPAProject и получать объекты из базы данных.GWTProject тоже работает нормально, я могу запустить его, заполнить текст поля в браузере и получить ответ.

Моя цель - вызвать JPAProject из GWTProject для получения сущностей.Но проблема в том, что при вызове DAO я получаю следующее исключение:

[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

Я предполагаю, что предупреждения в начале могут быть опущены на данный момент.

У вас есть идеи?Я предполагаю, что упускаю какой-то основной момент.Все советы приветствуются.


Обновление: Мой поставщик персистентности четко определен, проект JPA работает сам по себе.

Я думаю, это тоже проблема, связанная с classpath.При запуске проекта GWT в WEB-INF/lib есть только gwt-servlet.jar.

Считаете ли вы, что создание собственного файла Ant для создания всего объекта является единственным решением (например, создать jar-файл из проекта JPA и скопировать его в WEB-INF/lib)?Или есть какое-либо решение Eclipse, чтобы я мог правильно установить свойства проекта GWT, чтобы проект GWT знал, что он включает persistence.xml файл?

Обновление: ОК, я получил его на работу.Я пытался поместить persitence.xml везде, где это было возможно, в war / WEB-INF, но постоянно получал сообщение об ошибке «отсутствует поставщик постоянства».Оказалось, что речь не идет о persistence.xml.Я не скопировал jar eclipselink в WEB-INF / lib, поэтому не смог найти класс провайдера, определенный в persistence.xml.Копирование всех банок сработало.

Большое спасибо, Паскаль.

Ответы [ 2 ]

2 голосов
/ 25 июля 2010

Много борясь с тем же сообщением об ошибке, я решил проблему с копированием всех 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) из архива EclipseLink в папку ... / war / WEB-INF / lib моего проекта GWT, чтобы сделать все доступное для Jetty в режиме хостинга. Как видно из списка файлов, я использовал EclipseLink 2.1. При необходимости адаптируйте этот список к вашей реализации JPA.

Надеюсь, что это может помочь и вам.

0 голосов
/ 16 мая 2010

Есть ли у вас постоянный провайдер, объявленный в вашем persistence.xml? Примерно так (здесь я использую Hibernate, адаптирую его к любому провайдеру персистентности, который вы используете):

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

Если вы это сделаете, то я подозреваю, что проблема с classpath. Правильно ли вы упаковали проект JPA в веб-приложение, т.е. в WEB-INF/lib?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...