2009-04-01 5 views
10

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

ответ

1

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

+2

Кроме того, я должен сказать, что в GWT 1.5 не нужно включать вышеупомянутую банку. Вместо этого просто используйте производственную банку, такую ​​как toplink-essentials.jar; конечно, передать его вашему GWT-компилятору для успешной компиляции; и НЕ записывайте в вашем app.gwt.xml – synergetic

6

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

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

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

http://google-web-toolkit.googlecode.com/issues/attachment?aid=1475633892125294312&name=jpa-annotations-source.jar

+0

Ссылка изменилась на HTTP: // Google-web- toolkit.googlecode.com/issues/attachment?aid=1475633892125294312&name=jpa-annotations-source.jar&token=672fe08de2c4a90493f62b6daaf3ae1e. Не следует зависеть от такой связи, поскольку они периодически восстанавливаются динамически. Должен google для «jpa-annotations-source.jar google-web-toolkit.googlecode.com/issues/attachment». –

1

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

В попытке устранить слой DTO я использовал Галаад тоже.

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

2

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

исток = «клиента»

источник пути = «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 можно найти на секции сборки сайта vitfish.java.net.

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

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

1

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

-1

Восстанавливается на комментарий Синергетический, вы сейчас (от GWT 1.5) нужно только добавить

<source path='javax.persistence'/> 

к вашему Module.gwt.xml