0

Exception:Transaction not successfully started

asked 2009-12-24 02:37:30 +0800

adam4891288 gravatar image adam4891288
657 1 5

严重: Failed to invoke class org.zkoss.zkplus.hibernate.OpenSessionInViewListener
org.hibernate.TransactionException: Transaction not successfully started

我开发的专案是使用ZK+Hibernate+Spring
但每次进行数据库的操作之后都会出现该Exception,但是又对数据的处理没有任何不良影响。也就是说,虽然一直出现这个Exception,但是系统仍然可以正常运行。
据我跟踪观察代码,该Exception并非在数据库操作时抛出,而是在每次数据库操作之后的一个ZK事件调用时出现(例如:alert等)。
请问这属不属于一个bug,或者有没有相关文章讨论过此问题,谢谢各位了。
以下是该Exception的全部信息:

严重: Failed to invoke class org.zkoss.zkplus.hibernate.OpenSessionInViewListener
org.hibernate.TransactionException: Transaction not successfully started
	at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:100)
	at org.zkoss.zkplus.hibernate.OpenSessionInViewListener.cleanup(OpenSessionInViewListener.java:65)
	at org.zkoss.zk.ui.util.Configuration.invokeExecutionCleanups(Configuration.java:842)
	at org.zkoss.zk.ui.impl.UiEngineImpl.execUpdate(UiEngineImpl.java:1077)
	at org.zkoss.zk.au.http.DHtmlUpdateServlet.process(DHtmlUpdateServlet.java:500)
	at org.zkoss.zk.au.http.DHtmlUpdateServlet.doGet(DHtmlUpdateServlet.java:385)
	at org.zkoss.zk.au.http.DHtmlUpdateServlet.doPost(DHtmlUpdateServlet.java:394)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
	at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:667)
	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
	at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
	at java.lang.Thread.run(Thread.java:595)

delete flag offensive retag edit

4 Replies

Sort by » oldest newest

answered 2009-12-29 01:42:11 +0800

iantsai gravatar image iantsai
2755 1

你可以Post 一下你的zk.xml 設定嗎?

另外,你的程式碼當中是如何叫用Spring Bean的?

link publish delete flag offensive edit

answered 2009-12-29 03:16:54 +0800

adam4891288 gravatar image adam4891288
657 1 5

<?xml version="1.0" encoding="UTF-8"?>

	<!--
	Created by ZK Studio
-->

<zk>
	<device-config>
		<device-type>ajax</device-type>
		<timeout-uri>index.html</timeout-uri>
		<!--
			An empty URL can cause the browser to reload the same URL
		-->
	</device-config>

	<!-- Hibernate SessionFactory lifecycle start-->
	<listener>
		<description>Hibernate SessionFactory lifecycle</description>
		<listener-class>org.zkoss.zkplus.hibernate.HibernateSessionFactoryListener</listener-class>
	</listener>


	<!-- Hibernate OpenSessionInView Pattern -->
	<listener>
		<description>Hibernate Open Session In View life-cycle</description>
		<listener-class>org.zkoss.zkplus.hibernate.OpenSessionInViewListener</listener-class>
	</listener>

	<!-- Hibernate thread session context handler -->
	<listener>
		<description>Hibernate thread session context handler</description>
		<listener-class>org.zkoss.zkplus.hibernate.HibernateSessionContextListener</listener-class>
	</listener>
	<!-- Hibernate SessionFactory lifecycle end-->
	<session-config>   
        <session-timeout>-1</session-timeout>   
</session-config> 
</zk>


另外,不好意思忘了说明,我的程式中尚未使用Spring的功能,
目前用到Spring的就只有使用
<bean id="MyComps" class="com.test.MyComps" scope="prototype"></bean>

作为zul页面中apply的映射而已:<window apply="${MyComps}">

link publish delete flag offensive edit

answered 2009-12-30 09:28:41 +0800

iantsai gravatar image iantsai
2755 1

你可以試一下在zk.xml裡面加入下列設定:

<system-config> <disable-event-thread/> </system-config>

然後看看問題變得如何。

如果還是有問題,可以請你詳細說明一下你的Hibernate 的Session(不是HttpSession)在你的程式碼當中是怎麼生成、關閉的嗎?

link publish delete flag offensive edit

answered 2009-12-30 19:01:54 +0800

adam4891288 gravatar image adam4891288
657 1 5

仍然有那个Exception出现,貌似是在每次触发event之后出现的。
我的Session获取方式

Session session = HibernateUtil.currentSession();

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: 2009-12-24 02:37:30 +0800

Seen: 1,168 times

Last updated: Dec 30 '09

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