0

New Hibernate support and Spring

asked 2006-09-19 13:10:33 +0800

admin gravatar image admin
18691 1 10 130
ZK Team


Orignial message at:
https://sourceforge.net/forum/message.php?msg_id=3921742

By: raulraja

Does the new Hibernate support work when using Spring's HibernateTemplate and the spring wrappers for hibernate?

I have my hibernate code and DAO's with spring and I have the LazyInitializationProblem because of zk's use of threads.


delete flag offensive retag edit

18 Replies

Sort by ยป oldest newest

answered 2006-09-19 13:15:13 +0800

admin gravatar image admin
18691 1 10 130
ZK Team


Orignial message at:
https://sourceforge.net/forum/message.php?msg_id=3921748

By: tomyeh

Henri is working on this. It might take another one or two days.

link publish delete flag offensive edit

answered 2006-09-19 13:19:24 +0800

admin gravatar image admin
18691 1 10 130
ZK Team


Orignial message at:
https://sourceforge.net/forum/message.php?msg_id=3921755

By: raulraja

Thank you, when available, is this support for Hibernate+Spring goint to be announced somewhere?

link publish delete flag offensive edit

answered 2006-09-20 03:07:09 +0800

admin gravatar image admin
18691 1 10 130
ZK Team


Orignial message at:
https://sourceforge.net/forum/message.php?msg_id=3922970

By: henrichen

It should be available on next Freshly version. I will reply here too when available.

/henri

link publish delete flag offensive edit

answered 2006-09-20 04:42:29 +0800

admin gravatar image admin
18691 1 10 130
ZK Team


Orignial message at:
https://sourceforge.net/forum/message.php?msg_id=3923041

By: raulraja

Thank you

link publish delete flag offensive edit

answered 2006-09-22 14:01:46 +0800

admin gravatar image admin
18691 1 10 130
ZK Team


Orignial message at:
https://sourceforge.net/forum/message.php?msg_id=3928174

By: henrichen

Since ZK version 2006/9/21 Freshly. Please add following listener in your application's WEB-INF/zk.xml and you can use Spring's OpenSessionInViewFilter(or
Interceptor) as usual.

It bridge the ThreadLocal resources to event thread automatically so now the ThreadLocal pattern should works.

<listener>
<description>Spring TransactionSynchronizationManager handler</description> <listener-class>org.zkoss.zkplus.spring.SpringTransactionSynchronizationListene
r</listener-class>
</listener>


link publish delete flag offensive edit

answered 2006-09-28 18:31:18 +0800

admin gravatar image admin
18691 1 10 130
ZK Team


Orignial message at:
https://sourceforge.net/forum/message.php?msg_id=3937915

By: raulraja

Hello,

I have tried adding that and I still get the Lazy Initialization.
Is HibernateDAOSupport supported by this pattern? Could you provide an example of what should I add on my Spring config file and web.xml and a basic DAO implementation?
I would like not to use the ThreadLocal pattern if possible but use the HibernateDAOSupport instead.

link publish delete flag offensive edit

answered 2006-09-29 05:49:50 +0800

admin gravatar image admin
18691 1 10 130
ZK Team


Orignial message at:
https://sourceforge.net/forum/message.php?msg_id=3938520

By: henrichen

There is other reason that might cause LazyInitializationException. e.g. A "detached"
DAO calling data access method(save(), update() ...)

Can you give specific Exception message?

/henri

link publish delete flag offensive edit

answered 2006-09-29 05:52:54 +0800

admin gravatar image admin
18691 1 10 130
ZK Team


Orignial message at:
https://sourceforge.net/forum/message.php?msg_id=3938521

By: henrichen

HibernateDAOSupport + getHibernateTemplate() is supported by this ZK listener.
And all you have to do is config it in zk.xml.

/henri


link publish delete flag offensive edit

answered 2006-09-29 12:36:41 +0800

admin gravatar image admin
18691 1 10 130
ZK Team


Orignial message at:
https://sourceforge.net/forum/message.php?msg_id=3938944

By: raulraja

Hello here are my files and the exception being thrown.

DAO

public class PersistenceServiceImpl extends HibernateDaoSupport implements PersistenceService {

public void save(Object o) {
getHibernateTemplate().saveOrUpdate(o);
}

public Object load(Class clazz, Serializable id) {
return getHibernateTemplate().get(clazz,id);

}

public Collection loadAll(Class clazz) {
return getHibernateTemplate().loadAll(clazz);
}

public void remove(Object o) {
getHibernateTemplate().delete(o);
}

}

WEB.XML

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>
PortalAdmin</display-name>

<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</l
istener-class>
</listener>

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:applicationContext.xml
classpath:acegi-security.xml
</param-value>
</context-param>




<!-- //// -->
<!-- ZK -->
<listener>
<description>Hibernate Open Session In View lifecycle</description>
<listener-class>org.zkoss.zkplus.hibernate.OpenSessionInViewListener</li
stener-class>
</listener>
<listener>
<description>Hibernate thread session context handler</description>
<listener-class>org.zkoss.zkplus.hibernate.HibernateSessionContextListener</li
stener-class>
</listener>
<listener>
<description>Spring TransactionSynchronizationManager handler</description>
<listener-class>org.zkoss.zkplus.spring.SpringTransactionSynchronizationListen
er</listener-class>
</listener>
<listener>
<description>Used to cleanup when a session is destroyed</description>
<display-name>ZK Session Cleaner</display-name>
<listener-class>org.zkoss.zk.ui.http.HttpSessionListener</listener-class>
</listener>
<servlet>
<description>ZK loader for ZUML pages</description>
<servlet-name>zkLoader</servlet-name>
<servlet-class>org.zkoss.zk.ui.http.DHtmlLayoutServlet</servlet-class>

<init-param>
<param-name>update-uri</param-name>
<param-value>/zkau</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>zkLoader</servlet-name>
<url-pattern>*.zul</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>zkLoader</servlet-name>
<url-pattern>*.zhtml</url-pattern>
</servlet-mapping>
<servlet>
<description>The asynchronous update engine for ZK</description>
<servlet-name>auEngine</servlet-name>
<servlet-class>org.zkoss.zk.au.http.DHtmlUpdateServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>auEngine</servlet-name>
<url-pattern>/zkau/*</url-pattern>
</servlet-mapping>
<!-- //// -->
<!-- /// -->
<!-- DSP -->
<servlet>
<description><![CDATA[
The servlet loads the DSP pages.
]]></description>
<servlet-name>dspLoader</servlet-name>
<servlet-class>com.potix.web.servlet.dsp.InterpreterServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>dspLoader</servlet-name>
<url-pattern>*.dsp</url-pattern>
</servlet-mapping>
<!-- /// -->

</web-app>

EXCEPTION

org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.zonadental.modelo.Menu.children, no session or session was closed
org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationEx
ception(AbstractPersistentCollection.java:358)
org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationEx
ceptionIfNotConnected(AbstractPersistentCollection.java:350)
org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersis
tentCollection.java:343)
org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCo
llection.java:86)
org.hibernate.collection.PersistentSet.iterator(PersistentSet.java:138)
org.zkoss.zk.ui.util.impl.ForEachImpl.prepare(ForEachImpl.java:197)
org.zkoss.zk.ui.util.impl.ForEachImpl.next(ForEachImpl.java:143)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreate(UiEngineImpl.java:323)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild(UiEngineImpl.java:366)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreate(UiEngineImpl.java:318)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild(UiEngineImpl.java:366)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreate(UiEngineImpl.java:318)
org.zkoss.zk.ui.impl.UiEngineImpl.createComponents(UiEngineImpl.java:407)
org.zkoss.zk.ui.impl.AbstractExecution.createComponents(AbstractExecution.java:
188)
org.zkoss.zk.ui.HtmlMacroComponent.postCreate(HtmlMacroComponent.java:56)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild(UiEngineImpl.java:364)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreate(UiEngineImpl.java:318)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild(UiEngineImpl.java:366)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreate(UiEngineImpl.java:318)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild(UiEngineImpl.java:366)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreate(UiEngineImpl.java:318)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild(UiEngineImpl.java:366)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreate(UiEngineImpl.java:318)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild(UiEngineImpl.java:366)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreate(UiEngineImpl.java:318)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild(UiEngineImpl.java:366)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreate(UiEngineImpl.java:318)
org.zkoss.zk.ui.impl.UiEngineImpl.execNewPage(UiEngineImpl.java:243)
org.zkoss.zk.ui.http.DHtmlLayoutServlet.process(DHtmlLayoutServlet.java:149)
org.zkoss.zk.ui.http.DHtmlLayoutServlet.doGet(DHtmlLayoutServlet.java:105)
javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


Thanks for your help. I really appreciate it.


link publish delete flag offensive edit

answered 2006-09-29 13:47:25 +0800

admin gravatar image admin
18691 1 10 130
ZK Team


Orignial message at:
https://sourceforge.net/forum/message.php?msg_id=3939050

By: henrichen

1. The following listeners are ZK listners and should be configured in WEB-INF/zk.xml (NOT web.xml).

<listener>
<description>Hibernate Open Session In View lifecycle</description> <listener-class>org.zkoss.zkplus.hibernate.OpenSessionInViewListener</listener-class>
</listener>

<listener>
<description>Hibernate thread session context handler</description> <listener-class>org.zkoss.zkplus.hibernate.HibernateSessionContextListener</list
ener-class>
</listener>

<listener>
<description>Spring TransactionSynchronizationManager handler</description> <listener-class>org.zkoss.zkplus.spring.SpringTransactionSynchronizationListener
</listener-class>
</listener>

2. The OpenSessionInViewListener and HibernateSessionContextListener are to be used with Hibernate factory.getCurrentSession() pattern only (WITHOUT Spring).

3. If you use Spring + Hibernate, just configure the following in WEB-INF/zk.xml (again, NOT web.xml) is enough.

zk.xml
----------
<zk>
<listener>
<description>Spring TransactionSynchronizationManager handler</description>
<listener-class>org.zkoss.zkplus.spring.SpringTransactionSynchronizationList
ener</listener-class>
</listener>
</zk>


link publish delete flag offensive edit
Your reply
Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!

[hide preview]

Question tools

Follow

RSS

Stats

Asked: 2006-09-19 13:10:33 +0800

Seen: 746 times

Last updated: Oct 10 '06

Support Options
  • Email Support
  • Training
  • Consulting
  • Outsourcing
Learn More