You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by Yury Luneff <bi...@ya.ru> on 2010/11/29 19:50:05 UTC
hibernatesessionmanager produces redundant exception
Greetings.
I made a simple example playing with hibernate spatial / etc. I have
following event handler on my page (tapestry 5.1.0.5):
public void onClick() {
Stop stop = new Stop();
WKTReader fromText = new WKTReader();
Geometry poly = null;
Transaction tx = null;
try {
logger.debug("hello, world");
tx = session.beginTransaction();
poly = fromText.read("POINT(1 2)");
stop.setPoint((Point) poly);
session.save(stop);
tx.commit();
} catch (Exception e) {
logger.error("exception: " + e.getMessage());
tx.rollback();
} finally {
}
}
Where session is org.hibernate.Session injected as
tapestry-hibernate-core provided.
Every time this event handler is called i receive an exception:
[WARN] TapestryIOCModule.PerthreadManager Error invoking listener org.apache.tapestry5.internal.hibernate.HibernateSessionManagerImpl@1bab2a6: Transaction not successfully started
org.hibernate.TransactionException: Transaction not successfully started
at org.hibernate.transaction.JDBCTransaction.rollback(JDBCTransaction.java:149)
at org.apache.tapestry5.internal.hibernate.HibernateSessionManagerImpl.threadDidCleanup(HibernateSessionManagerImpl.java:65)
at org.apache.tapestry5.ioc.internal.services.PerthreadManagerImpl.cleanup(PerthreadManagerImpl.java:86)
at org.apache.tapestry5.ioc.internal.RegistryImpl.cleanupThread(RegistryImpl.java:344)
at org.apache.tapestry5.ioc.internal.RegistryWrapper.cleanupThread(RegistryWrapper.java:36)
at org.apache.tapestry5.TapestryFilter.doFilter(TapestryFilter.java:133)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230)
at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:547)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
I suppose this is because playing with Session should be performed in
services, but i'm not sure.
What am I doing wrong? Why does HibernateSessionManager say "rollback"
on transaction he doesn't know anything about?
public void threadDidCleanup()
{
transaction.rollback();
session.close();
}
There is a bug in JIRA about that (more or less): https://issues.apache.org/jira/browse/TAP5-137
The behavior of this example doesn't have anything to do with
hibernate spatial, there is no exceptions inside try-catch produced.
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org
Re: hibernatesessionmanager produces redundant exception
Posted by Tom van Dijk <to...@tvandijk.nl>.
Well, the thing is that an injected Session is retrieved from the
HibernateSessionManager. This service is a per-thread service, so every
request (has a seperate, new thread and thus) has its own
HibernateSessionManager. This service automatically starts a new
transaction. (see also
https://svn.apache.org/repos/asf/tapestry/tapestry5/trunk/tapestry-hibernate-core/src/main/java/org/apache/tapestry5/internal/hibernate/HibernateSessionManagerImpl.java)
This basically makes sense, because usually what you want is a
transaction per thread and transaction control using the
HibernateSessionManager's control.
It appears that what you want to do manual transaction management.
Wouldn't it be an option to get a HibernateSessionSource injected and
use that service (which is not per-thread, but global) to acquire
sessions? That way, the HibernateSessionManager part will be skipped.
You may be right that TAP5-137 still needs fixing. Apparently, the
HibernateSessionManagerImpl assumes that it's the only one controlling
transactions. I believe that when transactions are manipulated /outside/
of the HibernateSessionManagerImpl, this /may/ cause issues. Maybe a
developer could look at it.
Op 29-11-2010 19:50, Yury Luneff schreef:
> Greetings.
>
> I made a simple example playing with hibernate spatial / etc. I have
> following event handler on my page (tapestry 5.1.0.5):
>
> public void onClick() {
> Stop stop = new Stop();
> WKTReader fromText = new WKTReader();
> Geometry poly = null;
> Transaction tx = null;
> try {
> logger.debug("hello, world");
> tx = session.beginTransaction();
> poly = fromText.read("POINT(1 2)");
> stop.setPoint((Point) poly);
> session.save(stop);
> tx.commit();
> } catch (Exception e) {
> logger.error("exception: " + e.getMessage());
> tx.rollback();
> } finally {
> }
> }
>
> Where session is org.hibernate.Session injected as
> tapestry-hibernate-core provided.
>
> Every time this event handler is called i receive an exception:
> [WARN] TapestryIOCModule.PerthreadManager Error invoking listener org.apache.tapestry5.internal.hibernate.HibernateSessionManagerImpl@1bab2a6: Transaction not successfully started
> org.hibernate.TransactionException: Transaction not successfully started
> at org.hibernate.transaction.JDBCTransaction.rollback(JDBCTransaction.java:149)
> at org.apache.tapestry5.internal.hibernate.HibernateSessionManagerImpl.threadDidCleanup(HibernateSessionManagerImpl.java:65)
> at org.apache.tapestry5.ioc.internal.services.PerthreadManagerImpl.cleanup(PerthreadManagerImpl.java:86)
> at org.apache.tapestry5.ioc.internal.RegistryImpl.cleanupThread(RegistryImpl.java:344)
> at org.apache.tapestry5.ioc.internal.RegistryWrapper.cleanupThread(RegistryWrapper.java:36)
> at org.apache.tapestry5.TapestryFilter.doFilter(TapestryFilter.java:133)
> at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
> at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
> at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
> at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
> at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
> at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
> at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230)
> at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
> at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
> at org.mortbay.jetty.Server.handle(Server.java:326)
> at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
> at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923)
> at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:547)
> at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
> at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
> at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
> at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
>
> I suppose this is because playing with Session should be performed in
> services, but i'm not sure.
>
> What am I doing wrong? Why does HibernateSessionManager say "rollback"
> on transaction he doesn't know anything about?
> public void threadDidCleanup()
> {
> transaction.rollback();
>
> session.close();
> }
>
> There is a bug in JIRA about that (more or less): https://issues.apache.org/jira/browse/TAP5-137
>
> The behavior of this example doesn't have anything to do with
> hibernate spatial, there is no exceptions inside try-catch produced.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
>