spring与hibernate整合,如何配置与多个数据库连接的事务?

wafer_w 2006-02-15 11:09:34
现有两个不同的数据库,一个为sql2000,一个为oracle9i。问题:
1.如果两个数据库中有名字结构相同的两个表,如都为login,spring该如何配置对两个数据库该表的操作到一个事务中?hibernate是否可以用同一个pojo类和xml配置文件。
2.如果是对不同的表操作,又该如何配置?


对单个数据库的配置如下:
applicationContext.xml
------------------------------
<?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="dataSource" 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://psw3000:1433;DatabaseName=netstore</value>
</property>
<property name="username">
<value>nsrsccdqy</value>
</property>
<property name="password">
<value>35547118</value>
</property>
</bean>

<!-- 配置sessionFactory -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref local="dataSource" />
</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>

<!-- 配置transactionManager -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>

<bean id="LoginDAO" class="gov.cd12366.bridge.persistence.dao.LoginDAO">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>
<!-- 配置事务代理,对LoginDAO的insert,和get方法进行不同的事务配置 -->
<bean id="LoginDAOProxy"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
<property name="target">
<ref local="LoginDAO" />
</property>
<property name="transactionAttributes">
<props>
<prop key="insert*">PROPAGATION_REQUIRED</prop>
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>

</beans>
...全文
3616 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
zeq258 2006-02-16
  • 打赏
  • 举报
回复
我这样认为,

首先要对两个数据源进行事务控制,我门可以先不考虑事物,
那么我可以写一个方法,该方法中有对这两个数据源的操作,

然后我门利用spring 对这个方法进行事物控制,
只不过这个时候,我们用的是JtaTransactionManager。

Saro 2006-02-16
  • 打赏
  • 举报
回复
自己去看SpringReference啊....1楼的其实已说得很明白了

以下代码是从SpringReference中copy过来的:

<beans>

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

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

<bean id="mySessionFactory1" class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
<property name="dataSource" ref="myDataSource1"/>
<property name="mappingResources">
<list>
<value>product.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">net.sf.hibernate.dialect.MySQLDialect</prop>
</props>
</property>
</bean>

<bean id="mySessionFactory2" class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
<property name="dataSource" ref="myDataSource2"/>
<property name="mappingResources">
<list>
<value>inventory.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">net.sf.hibernate.dialect.OracleDialect</prop>
</props>
</property>
</bean>

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

<bean id="myProductDao" class="product.ProductDaoImpl">
<property name="sessionFactory" ref="mySessionFactory1"/>
</bean>

<bean id="myInventoryDao" class="product.InventoryDaoImpl">
<property name="sessionFactory" ref="mySessionFactory2"/>
</bean>

<bean id="myProductServiceTarget" class="product.ProductServiceImpl">
<property name="productDao" ref="myProductDao"/>
<property name="inventoryDao" ref="myInventoryDao"/>
</bean>

<bean id="myProductService"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager" ref="myTxManager"/>
<property name="target" ref="myProductServiceTarget"/>
<property name="transactionAttributes">
<props>
<prop key="increasePrice*">PROPAGATION_REQUIRED</prop>
<prop key="someOtherBusinessMethod">PROPAGATION_REQUIRES_NEW</prop>
<prop key="*">PROPAGATION_SUPPORTS,readOnly</prop>
</props>
</property>
</bean>

</beans>
wafer_w 2006-02-16
  • 打赏
  • 举报
回复
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 'transactionManager' while setting bean property 'transactionManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager' defined in class path resource [gov/cd12366/bridge/spring/applicationContext_jotm.xml]: Cannot resolve reference to bean 'jotm' while setting bean property 'userTransaction'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jotm' defined in class path resource [gov/cd12366/bridge/spring/applicationContext_jotm.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.FatalBeanException: Could not instantiate class [org.springframework.transaction.jta.JotmFactoryBean]; constructor threw exception; nested exception is java.lang.ExceptionInInitializerError: null
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager' defined in class path resource [gov/cd12366/bridge/spring/applicationContext_jotm.xml]: Cannot resolve reference to bean 'jotm' while setting bean property 'userTransaction'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jotm' defined in class path resource [gov/cd12366/bridge/spring/applicationContext_jotm.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.FatalBeanException: Could not instantiate class [org.springframework.transaction.jta.JotmFactoryBean]; constructor threw exception; nested exception is java.lang.ExceptionInInitializerError: null
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jotm' defined in class path resource [gov/cd12366/bridge/spring/applicationContext_jotm.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.FatalBeanException: Could not instantiate class [org.springframework.transaction.jta.JotmFactoryBean]; constructor threw exception; nested exception is java.lang.ExceptionInInitializerError: null
org.springframework.beans.FatalBeanException: Could not instantiate class [org.springframework.transaction.jta.JotmFactoryBean]; constructor threw exception; nested exception is java.lang.ExceptionInInitializerError: null
java.lang.ExceptionInInitializerError
at org.objectweb.jotm.Jotm.<init>(Jotm.java:140)
at org.springframework.transaction.jta.JotmFactoryBean.<init>(JotmFactoryBean.java:82)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:174)
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:150)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:52)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:498)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:372)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:238)
20:18:30,609 DEBUG [main] ConfigurationRepository:286 - Build protocol object for protocol name found 'jrmp'.
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 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:26)
at Test.main(Test.java:74)
Caused by: org.omg.CORBA.INITIALIZE: Error while instantiatingorg.objectweb.carol.rmi.multi.MultiPRODelegate vmcid: 0x0 minor code: 0 completed: No
at javax.rmi.PortableRemoteObject.createDelegateIfSpecified(Unknown Source)
at javax.rmi.PortableRemoteObject.<clinit>(Unknown Source)
... 29 more
Caused by: java.lang.IllegalStateException: Configuration of carol was not done and when trying to initialize it, it fails.
at org.objectweb.carol.util.configuration.ConfigurationRepository.checkInitialized(ConfigurationRepository.java:113)
at org.objectweb.carol.util.configuration.ConfigurationRepository.checkConfigured(ConfigurationRepository.java:126)
at org.objectweb.carol.util.configuration.ConfigurationRepository.getConfigurations(ConfigurationRepository.java:136)
at org.objectweb.carol.rmi.multi.MultiPRODelegate.<init>(MultiPRODelegate.java:73)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at java.lang.Class.newInstance0(Unknown Source)
at java.lang.Class.newInstance(Unknown Source)
... 31 more
Caused by: org.objectweb.carol.util.configuration.ConfigurationException: Cannot find a protocol with name 'lmi' in the list of available protocols.
at org.objectweb.carol.util.configuration.ConfigurationRepository.init(ConfigurationRepository.java:335)
at org.objectweb.carol.util.configuration.ConfigurationRepository.init(ConfigurationRepository.java:229)
at org.objectweb.carol.util.configuration.ConfigurationRepository.init(ConfigurationRepository.java:397)
at org.objectweb.carol.util.configuration.ConfigurationRepository.checkInitialized(ConfigurationRepository.java:111)
... 40 more
wafer_w 2006-02-16
  • 打赏
  • 举报
回复
我用jotm做JTA,配置文件如下:

<?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>

</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>
<property name="minCon"><value>1</value></property>
<property name="maxCon"><value>5</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>

</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>
<property name="minCon"><value>1</value></property>
<property name="maxCon"><value>5</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>

<!-- 配置事务代理,对LoginDAO的insert,和get方法进行不同的事务配置 -->
<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="copy">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>

</beans>
--
但仍然报错
wafer_w 2006-02-16
  • 打赏
  • 举报
回复
哦,我的确没仔细看一楼的那段文字,的确已经说得很清楚了,要用JOTM
wafer_w 2006-02-16
  • 打赏
  • 举报
回复
如果我不是放在容器中而是独立运行的程序,那么就不能用spring来控制事务吗?
wafer_w 2006-02-16
  • 打赏
  • 举报
回复
jta只能在容器中运行吗?独立的程序能不能用?如果是tomcat5该如何配置?
Saro 2006-02-16
  • 打赏
  • 举报
回复
如果楼主用的是weblogic的话,spring专门为其设计了WebLogicJtaTransactionManager,为JtaTransactionManager的子类.
Saro 2006-02-16
  • 打赏
  • 举报
回复
jndi树上找不到java:comp/UserTransaction 的原因

服务器是weblogic?jboss?
试着指定userTransactionName看看,如下
<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager" >
<property name="userTransactionName">
<value>weblogic/transaction/UserTransaction</value>
</property>
</bean>
wafer_w 2006-02-16
  • 打赏
  • 举报
回复
applicationContext.xml修改如下:

<?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="dataSourceBridge" 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://localhost:1433;DatabaseName=cdgsbridge</value>
</property>
<property name="username">
<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>

<!-- 配置transactionManager, 注意这里引入的包的不同 -->
<bean id="transactionManager"
class="org.springframework.transaction.jta.JtaTransactionManager">
</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>

<!-- 配置事务代理,对LoginDAO的insert,和get方法进行不同的事务配置 -->
<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="copy">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>

</beans>

wafer_w 2006-02-16
  • 打赏
  • 举报
回复
楼上的兄弟,我配置后运行报错,在创建org.springframework.transaction.jta.JtaTransactionManager时出现的问题:
Error creating bean with name 'transactionManager' defined in class path resource [gov/cd12366/bridge/spring/applicationContext.xml]: Invocation of init method failed; nested exception is org.springframework.transaction.TransactionSystemException: JTA UserTransaction is not available at JNDI location [java:comp/UserTransaction]; nested exception is javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
org.springframework.transaction.TransactionSystemException: JTA UserTransaction is not available at JNDI location [java:comp/UserTransaction]; nested exception is javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
wafer_w 2006-02-15
  • 打赏
  • 举报
回复
楼上的能不能给个示例啊,理论我都看过!
infowain 2006-02-15
  • 打赏
  • 举报
回复
Spring提供了TransactionProxyFactoryBean作为动态代理的生成工厂,该工厂产生目标bean的动态AOP事务代理。事务代理根据所配置的事务属性自动管理事务操作。该事务代理对事务的透明管理依赖于一个在ApplicationContext范围全局可见的PlatformTransactionManager。Spring提供两个默认的事务管理器实现:DataSourceTransactionManager和JtaTransactionManager。前者只能支持单个jdbc数据源,后者可以支持多个数据源,可以做分布式事务管理。一般由容器提供支持JTA的事务管理器实现,Spring的JtaTransactionManager会自动通过JNDI检测TransactionManager或UserTransaction的存在,也可以在配置中指定JNDI的设置。如果想不依赖于容器实现分布式事务管理,可以采用开源的事务管理器实现JOTM。事务管理器必须要知道被管理的DataSource的位置,如果是DataSourceTransactionManager,在事务管理器配置中直接指定JDBC数据源的引用,如果是JtaTransactionManager,容器负责告知事务管理器需要管理的数据源。不管是哪一种情况,都需要在Dao中配置与事务管理器相对应的数据源。
wafer_w 2006-02-15
  • 打赏
  • 举报
回复
怎么这个问题这么难么,没有人知道?

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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