GWT с JPA - PullRequest
       40

GWT с JPA

10 голосов
/ 01 апреля 2009

Я пытаюсь построить приложение базы данных, используя GWT 1.5.3. Я использую аннотации JPA с моими объектами. Похоже, в хост-режиме RPC GWT работает нормально. Но когда я пытаюсь скомпилировать свое приложение, используя GWT-компилятор, я получаю сообщения об ошибках типа: «Не удается разрешить импорт javax.persistence», «Не удается разрешить сущность для типа» toplink-essentials.jar уже включен в мой путь к проекту. Какие еще настройки мне нужны для решения этой проблемы?

Ответы [ 7 ]

9 голосов
/ 07 апреля 2009

Вы можете использовать библиотеку Gilead (http://sourceforge.net/projects/gilead/)) для плавного управления объектами JPA с GWT.

Привет

6 голосов
/ 01 апреля 2009

Вам необходимо включить исходный код аннотаций JPA в путь сборки для вашего проекта GWT. Смотрите здесь для более подробной информации:

http://code.google.com/p/google-web-toolkit/issues/detail?id=1830&can=1&q=jpa

В частности, это jar-файл, который решит вашу проблему:

http://google -web-toolkit.googlecode.com / вопросы / приложения? Помощь = 1475633892125294312 & имя = JPA-аннотаций-source.jar

2 голосов
/ 23 октября 2009

Общая проблема JPA и GWT состоит в том, что сам GWT не поддерживает причудливые классы JPA, поэтому вы просто делаете простые постоянные объекты POJO DTO, которые реализуют java.io.Serializable и имеют простые аннотации ресурсов JPA. Вам необходимо создать классы сущностей в области видимости клиента GWT, либо добавить их в пакет yourproject.client, либо добавить их с помощью

исходный путь = "клиент"

source path = "folderOfYourEntities"

в файле YouProject.gwt.xml проекта GWT. Это будет включать объекты сущностей в клиенте GWT, чтобы они могли использовать их также на стороне клиента RPC. DAO должен быть на стороне сервера и может содержать все, что поддерживает ваш контейнер.

Проблема, с которой вы столкнулись сейчас, заключается в том, что при компиляции компилятор GWT говорит, что он не знает, что это за импорт аннотаций JPA в классах сущностей DTO. Вот почему вам нужен класс javax.persistence и исходные коды. Работает ссылка на jpa-annotation-source.jar от Rustmyself. Это просто скомпилированные файлы классов javax.persistence и файлы исходного кода, а также файл Persistence.gwt.xml. Это простой GWT-модуль для пакета javax.persistence. Если вы знаете, как создать свой собственный модуль GWT, у вас должны быть проблемы с выполнением всей этой работы. Кстати, официальный источник Java EE можно найти в разделе сборки сайта Glassfish Dev wiki.glassfish.java.net

Существует множество других решений, которые автоматически оборачивают ваши причудливые объекты PU в простые объекты с использованием прокси-сервера или лениво загружают их во время выполнения. Они работают, но не оптимальные решения. Лучше всего с самого начала сделать вещи простыми и надежными, используя объекты POJO JPA DTO в контексте клиента GWT и полноценный DAO на сервере.

Пример GWTPersistence
Я добавил настоящий рабочий пример того, как заставить GWT и JPA работать без проблем. Это проект NetBean с исходными кодами и файлом развертывания. См. GWTPersistence на NingZhang.info

1 голос
/ 27 декабря 2010

Просто сохраните другую версию своих сущностей, но без аннотаций!

1 голос
/ 06 июня 2009

Я также работаю с преобразованием данных JPA <-> GWT и т. Д.

Чтобы устранить слой DTO, я тоже использовал Gilead.

Здесь я возражаю против перевода javax.persistence. Чтобы избежать этого, я использовал декларации сопоставления XML JPA (orm.xml)

1 голос
/ 01 апреля 2009

Хорошо, я нашел то, что мне не хватало. Мне нужно было включить jpa-annotations-source.jar в путь моего GWT-компилятора в сценарии myapp-compile.cmd (или в файле сборки ant). Кстати, кто-нибудь может сказать мне происхождение этого файла jpa-annotations-source.jar?

0 голосов
/ 06 февраля 2013

Возвращаясь к комментарию синергетики, вам теперь (из GWT 1.5) нужно только добавить

<source path='javax.persistence'/>

на ваш Module.gwt.xml

...