使用spring时配置jndi以及JtaTransactionManager的问题,谢谢。。。。

snakewu 2008-11-03 11:10:51
我使用tomcat6.0.18+struts+spring 2.5.5+mysql,没有使用hibernate,

在tomcat的conf\Catalina\localhost的test.xml站台下配置了连接池:
<Resource name="jdbc/testdbconn" auth="Container" type="javax.sql.DataSource"
maxActive="50" maxIdle="30" maxWait="10000" logAbandoned="true"
username="root" password="123456" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/test"/>

在web.xml里面加入了:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>

<servlet>
<servlet-name>context</servlet-name>
<servlet-class>
org.springframework.web.context.ContextLoaderServlet
</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>

在action类中使用:
public void setServlet(ActionServlet actionServlet) {
super.setServlet(actionServlet);

if (actionServlet != null) {
ServletContext servletContext = actionServlet.getServletContext();
this.wac = WebApplicationContextUtils
.getRequiredWebApplicationContext(servletContext);
}
}

spring的applicationContext.xml是这样的:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
<bean id="dataSource"
class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>java:comp/env/jdbc/testdbconn</value>
</property>
</bean>

<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager"/>

<bean id="baseTransactionProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
abstract="true">
<property name="transactionManager"><ref bean="transactionManager"/></property>
<property name="transactionAttributes">
<props>
<prop key="insert*">PROPAGATION_REQUIRED,-Exception</prop>
<prop key="update*">PROPAGATION_REQUIRED,-Exception</prop>
<prop key="delete*">PROPAGATION_REQUIRED,-Exception</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>

<!--For Online-->
<bean id="testService" parent="baseTransactionProxy">
<property name="target">
<bean class="cn.com.test.service.testServiceImpl" >
</bean>
</property>
</bean>
</beans>

这个测试项目没有使用hibernate,
现在在tomcat启动加载applicationContext.xml时,报:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError: javax/transaction/RollbackException的错误,

于是我手动加入了一个jta.jar包,启动后报:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.IllegalStateException: No JTA UserTransaction available - specify either 'userTransaction' or 'userTransactionName' or 'transactionManager' or 'transactionManagerName'的错误,

这两个错误,特别是第二个错误我不明白,
我该如何修改applicationContext.xml呢,谢谢大家了。。。。。。。。。。。。。。
...全文
2192 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
hl_ghost 2008-11-03
  • 打赏
  • 举报
回复
在tomcat下用jta是否有问题?我记得他不支持分布式事务

<jee:jndi-lookup id="oracleDS" jndi-name="myOS">//在weblogic里配的。
<jee:environment>
java.naming.provider.url=t3://127.0.0.1:7001
java.naming.factory.initial=weblogic.jndi.WLInitialContextFactory
</jee:environment>
</jee:jndi-lookup>
<jee:jndi-lookup id="mysqlDS" jndi-name="mySQL">//在weblogic里配的。
<jee:environment>
java.naming.provider.url=t3://127.0.0.1:7001
java.naming.factory.initial=weblogic.jndi.WLInitialContextFactory
</jee:environment>
</jee:jndi-lookup>
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

<bean id="transactionManager"
class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="userTransactionName">
<value>java:comp/UserTransaction</value>
</property>
</bean>

我也菜哈,我就在weblogic上跑东西,所以tomcat是否这样也可以,你自己试下。
snakewu 2008-11-03
  • 打赏
  • 举报
回复
你好,
我加过类似
<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="transactionManagerName">
<value>javax.transaction.TransactionManager</value>
</property>
</bean>

或者
<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="transactionManagerName">
<value>Usertransaction</value>
</property>
</bean>
都不行。。。
请问我该如何加属性呢?
hl_ghost 2008-11-03
  • 打赏
  • 举报
回复
tomcat似乎不支持分布式事务,我用weblogic做过,http://blog.csdn.net/hl_ghost/archive/2008/08/27/2839930.aspx,谨供参考。

第二个错误很明显,你要给jta实现的transactionManager注入相应的属性。
snakewu 2008-11-03
  • 打赏
  • 举报
回复
up.

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧