Hello together!
I am trying to implement an OpenSessionInViewInterceptor (OSIVI) using Cocoons
(2.2) Enter/LeaveSitemapEventListener. I have one class wich implements both
Listener interfaces:
...
public void enteredSitemap(EnterSitemapEvent event) {
log.debug("Opening Hibernate Session and beginning transaction.");
Session session = sessionFactory.openSession();
session.beginTransaction();
TransactionSynchronizationManager.bindResource(
sessionFactory, new SessionHolder(session));
TransactionSynchronizationManager.initSynchronization();
}
...
public void leftSitemap(LeaveSitemapEvent event) {
Session session = sessionFactory.getCurrentSession();
try {
log.debug("Committing the database transaction.");
session.getTransaction().commit();
} catch ( RuntimeException ex ) {
try {
log.error( ex );
log.debug("Rolling back the database transaction.");
session.getTransaction().rollback();
if ( session.isOpen() ) {
session.close();
}
} catch ( RuntimeException e ) {
log.error( e );
throw e; // Let the exception propagate up the stack.
}
} finally {
try {
if ( session.isOpen() ) {
session.close();
}
} catch ( RuntimeException e ) { /* do nothing */ }
TransactionSynchronizationManager.unbindResource( sessionFactory );
TransactionSynchronizationManager.clearSynchronization();
}
}
...
I thought this would work, since i manually bind the session to the 'current'
thread. But after opening the session (and some DB Work wich is logged to
stdout) I get following Exception from out of leftSitemap( ... ):
org.hibernate.HibernateException: No Hibernate Session bound to thread, and
configuration does not allow creation of non-transactional one here
at
org.springframework.orm.hibernate3.SpringSessionContext.currentSession(SpringSessionContext.java:63)
at
org.hibernate.impl.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:544)
at
de.ifado.isac.web.OpenSessionInViewInterceptor.leftSitemap(OpenSessionInViewInterceptor.java:70)
at
org.apache.cocoon.components.treeprocessor.ConcreteTreeProcessor.process(ConcreteTreeProcessor.java:256)
at
org.apache.cocoon.components.treeprocessor.ConcreteTreeProcessor.process(ConcreteTreeProcessor.java:171)
at
org.apache.cocoon.components.treeprocessor.TreeProcessor.process(TreeProcessor.java:247)
at
org.apache.cocoon.servlet.RequestProcessor.process(RequestProcessor.java:351)
at
org.apache.cocoon.servlet.RequestProcessor.service(RequestProcessor.java:169)
at
org.apache.cocoon.sitemap.SitemapServlet.service(SitemapServlet.java:84)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at
org.apache.cocoon.servletservice.ServletServiceContext$PathDispatcher.forward(ServletServiceContext.java:468)
at
org.apache.cocoon.servletservice.ServletServiceContext$PathDispatcher.forward(ServletServiceContext.java:443)
at
org.apache.cocoon.servletservice.spring.ServletFactoryBean$ServiceInterceptor.invoke(ServletFactoryBean.java:264)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at $Proxy5.service(Unknown Source)
at
org.apache.cocoon.servletservice.DispatcherServlet.service(DispatcherServlet.java:106)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at
org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
at
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1093)
at
org.apache.cocoon.servlet.multipart.MultipartFilter.doFilter(MultipartFilter.java:131)
at
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
at
org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360)
at
org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at
org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
at
org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:726)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
at
org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:206)
at
org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
at
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
at org.mortbay.jetty.Server.handle(Server.java:324)
at
org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
at
org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:828)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:514)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
at
org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
at
org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:450)
I have registered the Listener throug a bean definition inside my blocks
COB-INF/config/spring/listener.xml:
<bean id="openSessionInViewInterceptor"
class="de.ifado.isac.web.OpenSessionInViewInterceptor">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
The SessionFactory is defined elsewhere (and retrieved after global WebAppCtx
is build through Cocoon/Spring.
I have no idea why my sessionContext gets lost!?
Help appreciated,
greetings,
Patrick
--
Ist Ihr Browser Vista-kompatibel? Jetzt die neuesten
Browser-Versionen downloaden: http://www.gmx.net/de/go/browser
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]