So I took the plunge and tried to implement Guice + Warp Persist to solve my lazy loading issues. I know I may not have it all figured out with regards to lazy loading but I can't even get simple data access to work now. Sorry for all the questions and issues. Can anyone provide some insight on what is wrong or what I am missing. The Hibernate configuration succeeds in the getModule() method.
Thanks. Code is below: My Web Application public class WicketApplication extends WebApplication { private PersistenceService service; public WicketApplication() { } @Override public Class<? extends Page> getHomePage() { return Home.class; } @Override public Session newSession(Request request, Response response) { return new MySession(request); } @Override protected void init() { Injector injector = Guice.createInjector(PersistenceService.usingHibernate() .across(UnitOfWork.REQUEST).transactedWith( TransactionStrategy.LOCAL).buildModule(), getModule()); addComponentInstantiationListener(new GuiceComponentInjector(this, injector)); service = injector.getInstance(PersistenceService.class); service.start(); injector.injectMembers(this); } private Module getModule() { return new Module() { public void configure(Binder binder) { // default values from development String connectionUrl = "<the url>"; String username = "<the username>"; String password = <the password>"; try { InitialContext context = new InitialContext(); connectionUrl = (String) context.lookup("java:comp/env/hibernate.connection.url"); username = (String) context.lookup("java:comp/env/hibernate.connection.username"); password = (String) context.lookup("java:comp/env/hibernate.connection.password"); } catch (NamingException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } // annotation and xml final AnnotationConfiguration config = new AnnotationConfiguration().configure(); config.setProperty("hibernate.connection.url", connectionUrl); config.setProperty("hibernate.connection.username", username); config.setProperty("hibernate.connection.password", password); config.setProperty("hibernate.current_session_context_class", "managed"); binder.bind(Configuration.class).toInstance(config); } }; } } My web.xml <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>MyApp</display-name> <context-param> <param-name>configuration</param-name> <param-value>development</param-value> </context-param> <!-- Warp Filter --> <filter> <filter-name>warpSessionFilter</filter-name> <filter-class>com.wideplay.warp.hibernate.SessionPerRequestFilter</filte r-class> </filter> <filter-mapping> <filter-name>warpSessionFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- Warp Filter --> <filter> <filter-name>wicket.filter</filter-name> <filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class > <init-param> <param-name>applicationClassName</param-name> <param-value>com.myapp.WicketApplication</param-value> </init-param> </filter> <filter-mapping> <filter-name>wicket.filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app> And my Hibernate Base Generic DAO: public abstract class HibernateGenericDao implements GenericDao { private final Class persistentClass; @Inject Provider<Session> hibernateSession; public HibernateGenericDao(Class persistentClass) { this.persistentClass = persistentClass; } @Override public List<Object> findAll() { Session session = hibernateSession.get(); List objects = null; Transaction tx = null; try { tx = session.beginTransaction(); Criteria criteria = session.createCriteria(persistentClass); objects = criteria.list(); tx.commit(); return objects; } catch (HibernateException e) { if (tx != null) tx.rollback(); throw e; } finally { } } }