使用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呢,谢谢大家了。。。。。。。。。。。。。。
...全文
2281 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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.
2024 年 Uber 乘车分析数据集 这个综合数据集包含 2024 年 Uber 运营的详细拼车数据,提供了有关预订模式、车辆性能、收入流、取消行为和客户满意度指标的丰富见解。 数据集概述 该数据集捕获了多种车辆类型的 148,770 个总预订,并提供了拼车作的完整视图,包括成功乘车、取消、客户行为和财务指标。 主要统计数据: 总预订量:148.77K 次乘车 成功率:65.96%(93K 完成骑行) 取消率:25%(37.43K 取消预订) 客户取消:19.15%(27K 乘车) 司机取消: 7.45% (10.5K 乘车) 数据模式 数据集包含以下列: 列名称 描述 Date 预订日期 Time 预订间 Booking ID 每次行程预订的唯一标识符 Booking Status 预订状态(已完成、客户取消、司机取消等) Customer ID 客户的唯一标识符 Vehicle Type 车辆类型(Go Mini、Go Sedan、Auto、eBike/Bike、UberXL、Premier Sedan) Pickup Location 游乐设施的起点 Drop Location 乘车目的地 Avg VTAT 司机到达上车地点的平均间(以分钟为单位) Avg CTAT 从取件到目的地的平均行程间(以分钟为单位) Cancelled Rides by Customer 客户发起的取消标志 Reason for cancelling by Customer 客户取消原因 Cancelled Rides by Driver 驱动程序启动的取消标志 Driver Cancellation Reason 司机取消原因 Incomplete Rides 未完成骑行标志 Incomplete Rides Reason 不完整骑行的原因

81,117

社区成员

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

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