配置文件如下:<?xml version="1.0" encoding="UTF-8"?><!--
- Application context definition for JPetStore's business layer.
- Contains bean references to the transaction manager and to the DAOs in
- dataAccessContext-local/jta.xml (see web.xml's "contextConfigLocation").
-->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
<!--
配置数据源
注意: 用org.apache.commons.dbcp.BasicDataSource, 要引入 apache commons
的commons-collections-3.1.jar, commons-dbcp-1.2.1.jar, commons-pool-1.2.jar三个包
<bean id="dataSourceInfo" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName">
<value>net.sourceforge.jtds.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:jtds:sqlserver://91.20.19.22:1433;DatabaseName=digger</value>
</property>
<property name="username">
<value>sa</value>
</property>
<property name="password">
<value>tax</value>
</property>
</bean>
-->
<!--配置事务管理-->
<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="userTransaction"><ref local="jotm"/></property>
</bean>
<!--使用jotm配置数据库连接-->
<bean id="jotm" class="org.springframework.transaction.jta.JotmFactoryBean"/>
<bean id="innerDataSourceInfo" class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown">
<property name="transactionManager"><ref local="jotm"/></property>
<property name="driverName"><value>net.sourceforge.jtds.jdbc.Driver</value></property>
<property name="url"><value>jdbc:jtds:sqlserver://localhost:1433;DatabaseName=digger</value></property>
<property name="minCon"><value>1</value></property>
<property name="maxCon"><value>2</value></property>
</bean>
<bean id="dataSourceInfo" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method="shutdown">
<property name="dataSource"><ref local="innerDataSourceInfo"/></property>
<property name="transactionManager"><ref local="jotm"/></property>
<property name="user"><value>sa</value></property>
<property name="password"><value>1</value></property>
</bean>
<bean id="innerDataSourceBridge" class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown">
<property name="transactionManager"><ref local="jotm"/></property>
<property name="driverName"><value>net.sourceforge.jtds.jdbc.Driver</value></property>
<property name="url"><value>jdbc:jtds:sqlserver://localhost:1433;DatabaseName=cdgsbridge</value></property>
<property name="minCon"><value>1</value></property>
<property name="maxCon"><value>2</value></property>
</bean>
<bean id="dataSourceBridge" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method="shutdown">
<property name="dataSource"><ref local="innerDataSourceBridge"/></property>
<property name="transactionManager"><ref local="jotm"/></property>
<property name="user"><value>sa</value></property>
<property name="password"><value>1</value></property>
</bean> <!-- 配置sessionFactory, 注意这里引入的包的不同-->
<bean id="sessionFactoryInfo"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref local="dataSourceInfo" />
</property>
<property name="mappingResources">
<list>
<value>gov/cd12366/bridge/domain/Login.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.SQLServerDialect
</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>
<bean id="sessionFactoryBridge"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref local="dataSourceBridge" />
</property>
<property name="mappingResources">
<list>
<value>gov/cd12366/bridge/domain/Login.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.SQLServerDialect
</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean> <bean id="LoginDAOInfo" class="gov.cd12366.bridge.persistence.dao.LoginDAO">
<property name="sessionFactory">
<ref local="sessionFactoryInfo" />
</property>
</bean>
<bean id="LoginDAOBridge" class="gov.cd12366.bridge.persistence.dao.LoginDAO">
<property name="sessionFactory">
<ref local="sessionFactoryBridge" />
</property>
</bean>
<bean id="CopyDataServer" class="gov.cd12366.bridge.server.CopyDataServer">
<!--<property name="LoginDAOInfo" ref="LoginDAOInfo"/>
<property name="LoginDAOBridge" ref="LoginDAOBridge"/>-->
</bean>
<!-- 配置事务代理,对方法进行不同的事务配置 -->
<bean id="CopyDataServerProxy"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
<property name="target">
<ref local="CopyDataServer" />
</property>
<property name="transactionAttributes">
<props>
<prop key="copyAndUpdate">PROPAGATION_REQUIRES_NEW</prop>
</props>
</property>
</bean></beans>
- Application context definition for JPetStore's business layer.
- Contains bean references to the transaction manager and to the DAOs in
- dataAccessContext-local/jta.xml (see web.xml's "contextConfigLocation").
-->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
<!--
配置数据源
注意: 用org.apache.commons.dbcp.BasicDataSource, 要引入 apache commons
的commons-collections-3.1.jar, commons-dbcp-1.2.1.jar, commons-pool-1.2.jar三个包
<bean id="dataSourceInfo" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName">
<value>net.sourceforge.jtds.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:jtds:sqlserver://91.20.19.22:1433;DatabaseName=digger</value>
</property>
<property name="username">
<value>sa</value>
</property>
<property name="password">
<value>tax</value>
</property>
</bean>
-->
<!--配置事务管理-->
<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="userTransaction"><ref local="jotm"/></property>
</bean>
<!--使用jotm配置数据库连接-->
<bean id="jotm" class="org.springframework.transaction.jta.JotmFactoryBean"/>
<bean id="innerDataSourceInfo" class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown">
<property name="transactionManager"><ref local="jotm"/></property>
<property name="driverName"><value>net.sourceforge.jtds.jdbc.Driver</value></property>
<property name="url"><value>jdbc:jtds:sqlserver://localhost:1433;DatabaseName=digger</value></property>
<property name="minCon"><value>1</value></property>
<property name="maxCon"><value>2</value></property>
</bean>
<bean id="dataSourceInfo" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method="shutdown">
<property name="dataSource"><ref local="innerDataSourceInfo"/></property>
<property name="transactionManager"><ref local="jotm"/></property>
<property name="user"><value>sa</value></property>
<property name="password"><value>1</value></property>
</bean>
<bean id="innerDataSourceBridge" class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown">
<property name="transactionManager"><ref local="jotm"/></property>
<property name="driverName"><value>net.sourceforge.jtds.jdbc.Driver</value></property>
<property name="url"><value>jdbc:jtds:sqlserver://localhost:1433;DatabaseName=cdgsbridge</value></property>
<property name="minCon"><value>1</value></property>
<property name="maxCon"><value>2</value></property>
</bean>
<bean id="dataSourceBridge" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method="shutdown">
<property name="dataSource"><ref local="innerDataSourceBridge"/></property>
<property name="transactionManager"><ref local="jotm"/></property>
<property name="user"><value>sa</value></property>
<property name="password"><value>1</value></property>
</bean> <!-- 配置sessionFactory, 注意这里引入的包的不同-->
<bean id="sessionFactoryInfo"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref local="dataSourceInfo" />
</property>
<property name="mappingResources">
<list>
<value>gov/cd12366/bridge/domain/Login.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.SQLServerDialect
</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>
<bean id="sessionFactoryBridge"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref local="dataSourceBridge" />
</property>
<property name="mappingResources">
<list>
<value>gov/cd12366/bridge/domain/Login.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.SQLServerDialect
</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean> <bean id="LoginDAOInfo" class="gov.cd12366.bridge.persistence.dao.LoginDAO">
<property name="sessionFactory">
<ref local="sessionFactoryInfo" />
</property>
</bean>
<bean id="LoginDAOBridge" class="gov.cd12366.bridge.persistence.dao.LoginDAO">
<property name="sessionFactory">
<ref local="sessionFactoryBridge" />
</property>
</bean>
<bean id="CopyDataServer" class="gov.cd12366.bridge.server.CopyDataServer">
<!--<property name="LoginDAOInfo" ref="LoginDAOInfo"/>
<property name="LoginDAOBridge" ref="LoginDAOBridge"/>-->
</bean>
<!-- 配置事务代理,对方法进行不同的事务配置 -->
<bean id="CopyDataServerProxy"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
<property name="target">
<ref local="CopyDataServer" />
</property>
<property name="transactionAttributes">
<props>
<prop key="copyAndUpdate">PROPAGATION_REQUIRES_NEW</prop>
</props>
</property>
</bean></beans>
解决方案 »
- 请求一个javascript问题
- 一个面试题有疑问
- 请求提交给一个frameset页面,子页面如何获得数据
- Servlet问题(高手指点)---- The requested resource (/Servlet1) is not available.
- 关于jdom生成xml的问题????????
- 用eclpise如何打开tomcat下的webapps?
- 紧急求救!!!在jboss中怎样配置多个数据库。。。。(在线等)
- 哥们,推荐几种好的Java集成开发环境?
- weblogic下怎样用cgi?谢谢!
- struct2标签的样式
- Linux环境下java不能访问mysql的数据库(急!急!急!)
- EJB Hello World
CopyDataServer.java
-----------------
/*
* Created on Feb 16, 2006
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package gov.cd12366.bridge.server;
import java.util.List;import gov.cd12366.bridge.domain.Login;
import gov.cd12366.bridge.persistence.iface.ILoginDAO;
import gov.cd12366.bridge.spring.CustomBeanFactory;import org.apache.log4j.Logger;
/**
* @author wafer
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class CopyDataServer {
static Logger logger = Logger.getLogger ( CopyDataServer.class.getName ());
//private ILoginDAO srcData;
//private ILoginDAO desData;
public CopyDataServer(){
//this.srcData = (ILoginDAO)CustomBeanFactory.getBean("LoginDAOInfo");
//this.desData = (ILoginDAO)CustomBeanFactory.getBean("LoginDAOBridge");
}
public void copyAndUpdate(int index) {
try{
ILoginDAO srcData = (ILoginDAO)CustomBeanFactory.getBean("LoginDAOInfo");
ILoginDAO desData = (ILoginDAO)CustomBeanFactory.getBean("LoginDAOBridge");
List list= srcData.getLogins();
Login login = (Login)list.get(index);
desData.saveLogin(login);
if(index==1){
login.setUsername("wafer4");
}
login.setPassword("kk");
srcData.updateLogin(login);
logger.info(login.getUsername() + " " + login.getPassword());
}catch(Exception e){
logger.error("error when copyAndUpdate!"+e.getMessage());
}
}
public void copy(){
ILoginDAO srcData = (ILoginDAO)CustomBeanFactory.getBean("LoginDAOInfo");
List list= srcData.getLogins();
for (int i=0;i<list.size();i++)
{
copyAndUpdate(i);
}
}
public static void main(String[] args) {
}
}调用代码如下:
/*
* Created on 2005-4-26
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/import java.util.List;import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Query;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import gov.cd12366.bridge.domain.*;
import java.io.InputStream;
import java.io.FileInputStream;import javax.sql.DataSource;import org.springframework.beans.factory.support.ManagedProperties;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import gov.cd12366.bridge.persistence.dao.*;
import gov.cd12366.bridge.persistence.iface.*;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.InputStreamResource;
import org.springframework.core.io.Resource;import gov.cd12366.bridge.spring.CustomBeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.apache.log4j.*;
import gov.cd12366.bridge.server.CopyDataServer;
import javax.sql.DataSource;
import javax.naming.Context;
import javax.naming.InitialContext;
import java.sql.*;
import java.util.*;
/**
* @author Administrator
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class Test {
static Logger logger = Logger.getLogger ( Test.class.getName () ) ;
public static void main(String[] args)
{
CopyDataServer copyDataServer = (CopyDataServer)CustomBeanFactory.getBean("CopyDataServerProxy");
copyDataServer.copyAndUpdate(0);
copyDataServer.copyAndUpdate(1);
logger.info("hello wafer!");
copyDataServer.copyAndUpdate(2);
logger.info("hello wafer!");
}
}
login(username,password);
表1中有3条数据
wafer1,kk
wafer2,kk
wafer3,kk我的目的是将表1数据复制到表2后,再更新表1的password字段,其中我在复制第2条数据时人为制造了错误(要求update一个不存在的记录-wafer4),因此产生异常,程序在抛出异常后就一直停在那里,不终止也不继续运行----表现为无法复制第3条数据且我故意输出的字符串"hello wafer!"在日志中找不到.异常日志如下:Hibernate: select login0_.username as username, login0_.password as password0_ from login login0_
15:29:50,687 INFO [main] CopyDataServer:45 - wafer1 kk
15:29:50,687 INFO [main] CopyDataServer:45 - wafer1 kk
Hibernate: update login set password=? where username=?
Hibernate: insert into login (password, username) values (?, ?)
Hibernate: update login set password=? where username=?
Hibernate: select login0_.username as username, login0_.password as password0_ from login login0_
15:29:51,406 INFO [main] CopyDataServer:45 - wafer4 kk
15:29:51,406 INFO [main] CopyDataServer:45 - wafer4 kk
Exception in thread "main" org.springframework.orm.hibernate3.HibernateSystemException: identifier of an instance of gov.cd12366.bridge.domain.Login altered from wafer2 to wafer4; nested exception is org.hibernate.HibernateException: identifier of an instance of gov.cd12366.bridge.domain.Login altered from wafer2 to wafer4
org.hibernate.HibernateException: identifier of an instance of gov.cd12366.bridge.domain.Login altered from wafer2 to wafer4
at org.hibernate.event.def.DefaultFlushEntityEventListener.checkId(DefaultFlushEntityEventListener.java:51)
at org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:82)
at org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:190)
at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:70)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:26)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:730)
at org.springframework.orm.hibernate3.SpringSessionSynchronization.beforeCommit(SpringSessionSynchronization.java:129)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.triggerBeforeCommit(AbstractPlatformTransactionManager.java:661)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:486)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:473)
at org.springframework.transaction.interceptor.TransactionAspectSupport.doCommitTransactionAfterReturning(TransactionAspectSupport.java:262)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:170)
at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:643)
at gov.cd12366.bridge.server.CopyDataServer$$EnhancerByCGLIB$$a5e4d5c4.copyAndUpdate(<generated>)
at Test.main(Test.java:88)
代码及配制如下:
applicationContext-jotm.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="jotm" class="org.springframework.transaction.jta.JotmFactoryBean"/> <bean id="jotmTransactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="userTransaction" ref="jotm"/>
</bean> <bean id="innerDataSource1" class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown">
<property name="transactionManager" ref="jotm"/>
<property name="driverName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/aaa"/>
</bean> <bean id="dataSource1" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method="shutdown">
<property name="dataSource" ref="innerDataSource1"/>
<property name="user" value="root"/>
<property name="password" value="1"/>
<property name="maxSize" value="2"/>
</bean> <bean id="innerDataSource2" class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown">
<property name="transactionManager" ref="jotm"/>
<property name="driverName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/bbb"/>
</bean> <bean id="dataSource2" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method="shutdown">
<property name="dataSource" ref="innerDataSource2"/>
<property name="user" value="root"/>
<property name="password" value="1"/>
<property name="maxSize" value="2"/>
</bean> <bean id="sessionFactory1" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource1"/>
<property name="mappingResources">
<list>
<value>com/saro/entity/FileEntity.hbm.xml</value>
<value>com/saro/security/entity/User.hbm.xml</value>
<value>com/saro/forum/entity/Board.hbm.xml</value>
<value>com/saro/forum/entity/Article.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean> <bean id="sessionFactory2" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource2"/>
<property name="mappingResources">
<list>
<value>com/saro/entity/FileEntity.hbm.xml</value>
<value>com/saro/security/entity/User.hbm.xml</value>
<value>com/saro/forum/entity/Board.hbm.xml</value>
<value>com/saro/forum/entity/Article.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean> <bean id="userDaox" class="com.saro.security.dao.UserDaoImpl">
<property name="sessionFactory" ref="sessionFactory1"/>
</bean> <bean id="articleDaox" class="com.saro.forum.dao.ArticleDaoImpl">
<property name="sessionFactory" ref="sessionFactory2"/>
</bean> <bean id="jotmServiceTarget" class="com.saro.example.JOTMService" >
<property name="userDao" ref="userDaox"/>
<property name="articleDao" ref="articleDaox"/>
</bean> <bean id="jotmService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager" ref="jotmTransactionManager"/>
<property name="target" ref="jotmServiceTarget"/>
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean></beans>测试代码:
public class JOTMService {
private UserDao userDao;
private ArticleDao articleDao; public void doTest(){
Article at=new Article();
at.setTitle("New Article 2");
at.setContent("========主帖=========");
User user=new User();
user.setUsername("aaa");
user.setPassword("bbb");
user.setEmail("[email protected]");
userDao.saveUser(user);
///
at.setPoster(user);
at.setParentArticle(null);
at.setLastUpdateTime(new java.util.Date());
articleDao.saveArticle(at);
} public void setUserDao(UserDao userDao) {
this.userDao = userDao;
} public void setArticleDao(ArticleDao articleDao) {
this.articleDao = articleDao;
} public static void main(String[] args) {
ApplicationContext contex=new FileSystemXmlApplicationContext("applicationContext-jotm.xml");
JOTMService s=(JOTMService)contex.getBean("jotmService");
s.doTest();
System.out.println("=============end================");
}
}
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'CopyDataServerProxy' defined in class path resource [gov/cd12366/bridge/spring/applicationContext_jotm.xml]: Cannot resolve reference to bean 'CopyDataServer' while setting bean property 'target'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'CopyDataServer' defined in class path resource [gov/cd12366/bridge/spring/applicationContext_jotm.xml]: Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'LoginDAOInfo' of bean class [gov.cd12366.bridge.server.CopyDataServer]: Bean property 'LoginDAOInfo' is not writable or has an invalid setter method. Did you mean 'loginDAOInfo'?
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'CopyDataServer' defined in class path resource [gov/cd12366/bridge/spring/applicationContext_jotm.xml]: Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'LoginDAOInfo' of bean class [gov.cd12366.bridge.server.CopyDataServer]: Bean property 'LoginDAOInfo' is not writable or has an invalid setter method. Did you mean 'loginDAOInfo'?
org.springframework.beans.NotWritablePropertyException: Invalid property 'LoginDAOInfo' of bean class [gov.cd12366.bridge.server.CopyDataServer]: Bean property 'LoginDAOInfo' is not writable or has an invalid setter method. Did you mean 'loginDAOInfo'?
at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:699)
at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:575)
at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:769)
at org.springframework.beans.BeanWrapperImpl.setPropertyValues(BeanWrapperImpl.java:796)
at org.springframework.beans.BeanWrapperImpl.setPropertyValues(BeanWrapperImpl.java:785)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:779)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:575)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:405)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:238)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:148)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:186)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:106)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:764)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:575)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:405)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:238)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:148)
at gov.cd12366.bridge.spring.CustomBeanFactory.getBean(CustomBeanFactory.java:29)
at Test.main(Test.java:85)
---
感觉是在处理如下配置
<bean id="jotmServiceTarget" class="com.saro.example.JOTMService" >
<property name="userDao" ref="userDaox"/>
<property name="articleDao" ref="articleDaox"/>
</bean>
时出错,能否把你的com.saro.security.dao.UserDaoImpl代码贴出来看一下
分布式事务还是用jta方便啊,哈哈.据说weblogic express是支持jta的,但不支持ejb,价格应该不贵吧.
把你的测试代码的main函数中s.doTest()执行三次,第1次正确,第2次设置为异常并回滚,第3次正确,结果应该是第1、3次数据插入成功,第2次失败。
你运行一下,看结果是否相符?
------------
是的,确实如此。第2次出现的异常捕捉后,第3次会继续执行,并成功写入。