Okazuje się jednak, że tak być nie musi. Klasy muszą się znajdować w katalogu GWT (w ktatlogu
client) w czasie kompilacji kodu GWT, ale później można je przenieść w dowolne miejsce w aplikacji.Muszą zostać jednak spełnione dwa warunki:
- Pakiet w którym znajduje się klasa musi być nadal ten sam.
- Moduł web musi mieć dostęp do skompilowanych źródeł.
W związku z tym struktura, w której całość działała w mojej aplikacji wyglądała tak:
EAR
- dao.jar
- business.jar
- web.war
- META-INF
- images
- css
- WEB-INF
- WEB-INF -> lib -> web.jar
- META-INF
- [...].js
- [...].html
Oczywiście tego typu struktura wymaga aby biblioteka GWT była importowana w module DAO (ze względu na interfejs
IsSerializable), ale jest to niewielkie poświęcenie za możliwość korzystania z tych samych obiektów w module GWT oraz w modulach biznesowych. Dzięki takiemu rozwiązaniu mogę załadować obiekt, na przykład przy pomocy JPA z bazy a następnie przekazać go bezpośrednio do warstwy webowej.Kompilacja
Całość została przezemnie zautomatyzowana przy pomocy skryptów antowych.
Standardowo obiekty są umieszczone w module DAO.
Przed kompilacją Obiekty są przenszone do modułu GWT.
<move todir="dao/src/pl/project/client/objects">
<fileset dir="webui/src/pl/project/client/objects"/>
</move>
Ant, kompiluje moduł GWT przy pomocy taska antowego dostępnego w bibliotece ant-gwt.
<taskdef resource="dk/contix/ant/gwt/ant-gwt.xml"
classpathref="project.classpath"/>
<gwtcompile destdir="${build.dir}/gwt-web" optimize="true">
<fileset dir="${module.web.basedir}/web/src">
<include name="**/*.gwt.xml"/>
</fileset>
</gwtcompile>
Przenosze spowrotem obiekty do DAO
<move todir="web/src/pl/project/client/objects">
<fileset dir="dao/src/pl/project/client/objects"/>
</move>
Kompiluje pozostałe elementy a następnie składam tworze pliki JAR, WAR oraz EAR
Warto wspomnieć, że GWT nie miało problemów z anotacjami.
Następnym razem napisze jak wymusić na GWT aby wywoływało bezpośrednio Beana EJB (na przyklad Stateless Session Bean), dzięki czemu wszystkie operacje wykonywane są wewnątrz transakcji.