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 {
}
}
}