Seam provides extensive support for Hibernate. If you decide to use Tapestry and Seam together, you dont need Tapestry/Hibernate Integration Library provided by Tapestry.
First you have to configure Hibernate. One way to do it is to create a hibernate.cfg.xml. Secondly, you can configure Seam to create Hibernate Session by writing following into your components.xml:
<components xmlns="http://jboss.com/products/seam/components" xmlns:core="http://jboss.com/products/seam/core" xmlns:persistence="http://jboss.com/products/seam/persistence" xmlns:security="http://jboss.com/products/seam/security" xmlns:transaction="http://jboss.com/products/seam/transaction" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation= "http://jboss.com/products/seam/core http://jboss.com/products/seam/core-2.0.xsd http://jboss.com/products/seam/persistence http://jboss.com/products/seam/persistence-2.0.xsd http://jboss.com/products/seam/security http://jboss.com/products/seam/security-2.0.xsd http://jboss.com/products/seam/transaction http://jboss.com/products/seam/transaction-2.0.xsd http://jboss.com/products/seam/components http://jboss.com/products/seam/components-2.0.xsd"> <persistence:hibernate-session-factory name="hibernateSessionFactory"/> <persistence:managed-hibernate-session name="userDatabase" session-factory="#{hibernateSessionFactory}" auto-create="true"/> </components>
This configuration creates a conversation-scoped Seam component named userDatabase. The managed Hibernate Session can be injected into your JavaBean components using the following code
@Name("userService") public class UserService { @In private Session userDatabase; public List<User> findAll(){ return userDatabase.createCriteria(User.class).list() } }
The component UserService can be injected into your Tapestry pages:
@In(create=true) private UserService userService;
So far it is not possible to inject a Seam-managed Hibernate session directly into your Tapestry pages or components. You need to inject the session into a Seam component which can be injected in your pages or components.