GWT с использованием сущностей из EJB - PullRequest
0 голосов
/ 25 ноября 2010

Возможно, у меня возникла глупая проблема с использованием классов сущностей на страницах GWT. Говорят, что для отображения некоторого класса на страницах GWT этот класс должен быть определен в пакете клиентского приложения GWT. Например. Приложение GWT в com.foo.clinet может использовать только классы, определенные в этом пакете, и его подпакеты, которые будут отображаться в компонентах (таких как сетки GWT, метки ...)

Но что, если у вас есть какой-то другой проект, в котором вы определили эти объекты, как правило, EJB (представьте веб-проект структуры, проект ejb). Вы можете получать эти объекты через службу RPC, но затем не можете использовать их в компонентах (простое добавление jar этого проекта не поможет). Первая возможность состоит в том, чтобы преобразовать их в некоторый другой объект значения с более или менее такими же атрибутами, но определенными в этом веб-проекте. Но это дублирование кода, которое никогда не бывает приятным, потому что просто когда вы меняете сущность, вы должны изменить соответствующий объект значения представления. Конечно, есть несколько вариантов, как делать такие вещи автоматически (например, через отражение, которое, к сожалению, медленно ...).

Итак, вопрос в том, есть ли какое-то типичное элегантное решение или шаблон проектирования, как решить эту проблему без дублирования кода? Большое спасибо

Ответы [ 2 ]

0 голосов
/ 26 ноября 2010

Возможно, я нашел решение, но я не уверен, что оно правильное.Я уточню свою проблему немного точнее.Я получил эту структуру.

/MyApp/Ejb-module/x/y/z/MyClass.java
/MyApp/Web-module/x/y/MyApp.gwt.xml

и хочу включить MyClass.java в GWT компилятор БЕЗ необходимости переместить его куда угодно.

Iтолько что определил, что /MyApp/Ejb-module build будет также включать *.java файлы, а затем в /MyApp/Web-module/a/b я добавил Inclusion.gwt.xml, куда я положил

<module>
    <source path="z" />
</module>

и обновил MyApp.gwt.xml с помощью

<inherits name="x.y.Inclusion"/>
0 голосов
/ 25 ноября 2010
  1. Поместите ваши EJB в отдельный пакет / каталог (например, com.example.common), а затем добавьте объявление источника в дескриптор вашего модуля GWT (xyz.gwt.xml):

    <source path="common"/> //relative to your xyz.gwt.xml location 
    

    Компилятор GWT затем также скомпилирует EJB-компоненты, и они будут видны вашим другим кодом GWT.

  2. Создание "поддельных" классов аннотаций EJB с использованием суперсорсинга.Это обычная техника для замены классов версией GWT.Описано здесь: http://fredsa.allen -sauer.com / 2009/04 / 1st-look-at-app-engine-using-jdo.html

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