banq 大哥,JTA问题请教

上次讨论在事务控制时应该使用JTA控制事务,我大概读了一些文章,发现我现在的确需要使用JTA。于是从Tomcat转向Jboss,但是我没搞懂JTA,Servlet Container,Hibernate,Application Server之间是个什么关系?各个容器之间是怎么协同工作的?
比如Hibernate可以不依赖Tomcat,它可以自己创建连接池。那么JTA和Application Server之间是什么关系呢?JTA一定需要Application Server支持吗?如果JTA也可以当成一个组件使用,那么我可以在Tomcat下使用JTA吗?
问题比较多,呵呵
[该贴被power1128于2008-01-02 12:26修改过]

JBoss等application server其实就是组件的容器,JTA是其中一个组件,如果让tomcat支持JTA,可以使用 JOTM或者使用Spring,这两种框架支持JTA有些区别,JOTM与服务器跟近些,通过JNDI供我们程序调用,而Spring则把JTA通过配置引入到我们的程序中。

将jotm集成到Tomcat5.5后,jndi报出如下异常:
javax.naming.NameNotFoundException
at org.objectweb.carol.jndi.enc.java.CompNamingContext.lookupCtx(CompNam
ingContext.java:689)
at org.objectweb.carol.jndi.enc.java.CompNamingContext.lookup(CompNaming
Context.java:179)
at org.objectweb.carol.jndi.enc.java.JavaURLContext.lookup(JavaURLContex
t.java:138)
at javax.naming.InitialContext.lookup(InitialContext.java:351)

数据源配置肯定没问题,不集成jotm时没有问题,可以通过jndi找到数据源,但是一加上jotm就出现这个错误,好像是Tomcat用了carol的JNDI,但是carol.properties文件里我配的是carol.start.jndi=false啊。
各位帮忙看看
[该贴被power1128于2008-01-02 20:00修改过]

主要还是JNDI方面有些问题,JNDI有下面几个步骤:
1. 在tomcat中配置数据源JNDI,在context.xml或server.xml中配置,Jotm不知会有无区别,你要检查一下。
2. 程序调用时 Java:comp/env + 你配置JNDI名称
3. 在web.xml中要使用env resource来声明你配置JNDI名称是一个数据源datasource。

那个估计就是Jotm的配置问题。也没时间继续弄了。而且发现Jotm的官方文档又老又旧。现在改用Jboss了,呵呵。
多谢Banq的解答。由于没有了事务的担心(以前一直用数据库事务),发现这时候在Service里写业务的时候感觉很自然。