You can find the full source code for this website in the Seam package in the directory /examples/wiki. It is licensed under the LGPL.
A three-tier application is a system in which clients are capable of holding application state. This naturally conflicts with state held in the middle tier, by the Seam application container. This working document is used in our ongoing analysis of how such an architecture could look like and what Seam can bring to the table.
The first issue you'd run into with a three-tier architecture is the triple entity mapping problem. The following illustration shows the problem:
In addition to the gap between the database and the middle tier, you also have to deal with the gap between the client and the middle tier. This is not a trivial issue that can be solved by some simple data-transfer object assembler. Consider this: The JPA engine (Hibernate...) bridges the gap between your server-side models and the (shared by many applications) data model in the database. Of course, the object/relational mismatch between pointers in the Java layer and key references in the database management system results in additional complexity. However, any other mapping problem that is commonly solved by introducing a JPA engine again rears its head when we transfer and map data between the client and server of the application.