Hi,

== Background ==

In a previous non-wicket project I was involved in we had a three (or four,
depending on how you see it) tier archiecture:

1. Persistence using JPA (using Hibernate as persistence provider and have
it working against a MySQL database)
2. Business logic inside "manager classes" using EJB Stateless Session Beans
3. Presentation using Servlet+JSP

When the users made actions [3] our servlets called business methods [2]
which in turn executed logic on objects and made CRUD persistence operations
[3].

This worked pretty well. But we had some problems with LAZY loading of
fields in enteties in our presentation layer [3]. We exclusively used the
transaction support of the stateless session beans in the EJB framework and
the presentation layer were never supposed to have to do any direct
persistence operations. It should all be done from our bussiness tier.
Still, when the presentation layer tried to getXXX() certain fields
accessing persistence was necessary. These accesses failed as we were
outside of a persistence context. We could think of these solutions:

1. Start doing persistence operations in our presentation tier. So that the
getXXX() methods could be called and the persistence retrival would be
successful. We decided against doing this as we wanted to keep our
presentation layer clean of such operations.
2. Load everything immediately after retrival or after a certain method from
our business layer [2]. We decided on created a separate method for this,
which would be called from the presentation layer [3] before it did anything
with enteties. These methods had the form XXX
retrieveAllLoadedVersionOfXXX(XXX xxx). Where XXX could be DogHouse and xxx
an instance of DogHouse. It worked. The downside was that we needed to have
these special methods in our business layer which were there only because of
our choice in persistence. Not a crystal clear layer separation. But we
thought it was good enough.
3. Start using Data Access Objects (DAO's) and for each entity have a DAO
which acted as a stupid data carrier. Then we would pass a clean POJO from
our business layer [2] to the presentation layer [3]. And not pass a proxy
object as you otherwise would have to.

== Wicket related design question ==

How do you solve this in your Wicket based designs? I would like to hear the
relation between your Wicket models and JPA/Hibernate in your designs. Do
you use some other framework to easen your burden? If so, how and why? Do
you use Java EE for anything? If so, why? If it's possible I would like to
have a design without DAO's. At least DAO's I have to create and fill with
data myself.

Best regards,
Kent

Reply via email to