关于JTA容器事务的提交和hibernate的问题?

1,容器管理的事务:事先在ejb-jar.xml中写了事务类型为Container,方法事务属性为Required,是否就表明在调用这个ben方法的时候,如果没有传递事务语境,那么就新建一个事务,在方法调用结束的时候,事务就自动提交(或回滚),也就是说事务的开始和结束全部由事务管理器(即应用服务器)来管理,对于编程用户来说都是透明的.
2,在以上的bean方法中写:
Session s = null;
try {
s = this.getHibernateSession();
s.save(author);
}
在方法运行过程中无任何Exception发生,但是对象author并没有被insert到数据库中;如果在s.save(author)后加入s.flush(),那么就insert到数据库中了。
------------
在hibernate的文档中说:当事务提交的时候flush(同步)隐含(即自动)发生。
那么我的问题是:在以上两点中,我的认识错误发生在哪?

为什么去掉flush(),hibernate不能随jta事务提交而提交数据

是 hibernate不能跟随CMT一起提交。

15:16:18,202 INFO [TransactionFactoryFactory] Transaction strategy: net.sf.hibe
rnate.transaction.JTATransactionFactory

jboss 输出显示已经使用jta了。

这个数据源也是从JNDI上lookup的,

你说的hibernate不能随CMT提交,是什么意思?
它有这个能力阿。难道还是我的配置问题么?

还有在jboss4 中怎么判断我的datasource有jta支持?
不就是xxx-ds.xml,jboss-cmp.xml,jaws.xml文件么,哎,我弄的头疼了。
请人帮忙阿

还有一个hibernate-service.xml

我也遇到了类似的问题:jboss4.0下,做一个spring+struts+hibernate的例子时,原来的hibernate事务管理器工作正常,但是我把它换成了JTA事务管理器以后(数据源也换成了容器的JNDI数据源了),报错说hibernate在一个全局事务中不能commit

hibernate支持CMT的。而且从jboss4的输出上也能看出cmt已经启动。
在javaeye.com上,robbin说我的数据源没有jta支持,但是在deploy下
我已经配置了postgres-ds.xml了阿,在jaws.xml中也声明绑定到jndi上了阿,在hibernate-serverice.xml上也声明采用这个数据源了,而且在hibernate.properties上也写了


hibernate.transaction.factory_class net.sf.hibernate.transaction.JTATransactionFactory


hibernate.transaction.manager_lookup_class net.sf.hibernate.transaction.JBossTransactionManagerLookup

,ejb也没有问题阿,如果throw EJBException,那么即使用了flush(),也会回滚,不能往数据库中insert数据阿。
神阿,帮帮我。

你给Hiernate用的数据源是容器的JNDI数据源吗?必须要用这个,不能用Hiernate自己配制的

嗯,是从JNDI上lookup来的。

我换用了sqlserver,用了它的XA驱动,然后配置XA驱动,问题就解决了。
关键还是要XA驱动啊。