package com.ajita.jta; import org.springframework.context.ApplicationContext; import org.springframework.context.support.FileSystemXmlApplicationContext; import com.ajita.jta.service.UserService; public class Main { public static void main(String[] args) { try { ApplicationContext ctx = new FileSystemXmlApplicationContext("classpath:applicationContext.xml"); UserService userService = ctx.getBean("userService", UserService.class); userService.saveUser("hwwang2222222222222", "123"); } catch (Exception ex) { ex.printStackTrace(); } } }
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.ajita</groupId> <artifactId>SimpleDemo</artifactId> <version>0.1</version> <repositories> <repository> <id>maven.apache</id> <name>maven.apache</name> <url>http://repo.maven.apache.org/</url> </repository> <repository> <id>maven</id> <name>maven</name> <url>http://repo1.maven.org/maven2/</url> </repository> </repositories> <properties> <spring.version>3.1.0.RELEASE</spring.version> <hibernate.version>4.1.0.Final</hibernate.version> <atomikos.version>3.8.0</atomikos.version> </properties> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>${hibernate.version}</version> <exclusions> <exclusion> <groupId>cglib</groupId> <artifactId>cglib</artifactId> </exclusion> <exclusion> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.atomikos</groupId> <artifactId>transactions-jta</artifactId> <version>${atomikos.version}</version> </dependency> <dependency> <groupId>com.atomikos</groupId> <artifactId>transactions-jdbc</artifactId> <version>${atomikos.version}</version> </dependency> <dependency> <groupId>com.atomikos</groupId> <artifactId>transactions-hibernate3</artifactId> <version>${atomikos.version}</version> <exclusions> <exclusion> <artifactId>hibernate</artifactId> <groupId>org.hibernate</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId> <version>1.6.1</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.25</version> </dependency> <dependency> <groupId>net.sourceforge.jtds</groupId> <artifactId>jtds</artifactId> <version>1.2.6</version> </dependency> <dependency> <groupId>cglib</groupId> <artifactId>cglib</artifactId> <version>2.2.2</version> </dependency> </dependencies> <build> <finalName>SimpleDemo</finalName> </build> </project>
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:task="http://www.springframework.org/schema/task" xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.2.xsd"> <context:component-scan base-package="com.ajita.*" /> <tx:annotation-driven /> <tx:jta-transaction-manager /> <bean id="dataSourceA" class="com.atomikos.jdbc.AtomikosDataSourceBean" init-method="init" destroy-method="close"> <property name="uniqueResourceName"> <value>DataSourceA</value> </property> <property name="xaDataSourceClassName"> <value>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</value> </property> <property name="xaProperties"> <props> <prop key="databaseName">myoa</prop> <prop key="serverName">127.0.0.1</prop> <prop key="port">3306</prop> <prop key="user">root</prop> <prop key="password">system</prop> <prop key="url">jdbc:mysql://127.0.0.1:3306/myoa</prop> </props> </property> <property name="minPoolSize"> <value>1</value> </property> </bean> <bean id="dataSourceB" class="com.atomikos.jdbc.AtomikosDataSourceBean" init-method="init" destroy-method="close"> <property name="uniqueResourceName"> <value>dataSourceB</value> </property> <property name="xaDataSourceClassName"> <value>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</value> </property> <property name="xaProperties"> <props> <prop key="databaseName">myoa2</prop> <prop key="serverName">127.0.0.1</prop> <prop key="port">3306</prop> <prop key="user">root</prop> <prop key="password">system</prop> <prop key="url">jdbc:mysql://127.0.0.1:3306/myoa2</prop> </props> </property> <property name="minPoolSize"> <value>1</value> </property> </bean> <!-- <bean id="dataSourceB" class="com.atomikos.jdbc.AtomikosDataSourceBean" init-method="init" destroy-method="close"> <property name="uniqueResourceName"> <value>DataSourceB</value> </property> <property name="xaDataSourceClassName"> <value>net.sourceforge.jtds.jdbcx.JtdsDataSource</value> </property> <property name="xaProperties"> <props> <prop key="databaseName">SimpleDB</prop> <prop key="serverName">127.0.0.1</prop> <prop key="portNumber">1434</prop> <prop key="user">sa</prop> <prop key="password">123456</prop> </props> </property> <property name="minPoolSize"> <value>1</value> </property> </bean> --> <bean id="entityManagerFactoryA" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> <property name="persistenceXmlLocation"> <value>classpath*:persistence.xml</value> </property> <property name="persistenceUnitName" value="PersistenceUnitA" /> <property name="dataSource" ref="dataSourceA" /> <property name="jpaVendorAdapter"> <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> <property name="showSql" value="true" /> <property name="databasePlatform" value="org.hibernate.dialect.MySQL5InnoDBDialect" /> </bean> </property> </bean> <bean id="entityManagerFactoryB" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> <property name="persistenceXmlLocation"> <value>classpath*:persistence.xml</value> </property> <property name="persistenceUnitName" value="PersistenceUnitB" /> <property name="dataSource" ref="dataSourceB" /> <property name="jpaVendorAdapter"> <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> <property name="showSql" value="true" /> <property name="databasePlatform" value="org.hibernate.dialect.SQLServerDialect" /> </bean> </property> </bean> <bean id="atomikosTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager" init-method="init" destroy-method="close"> <property name="forceShutdown" value="false" /> </bean> <bean id="atomikosUserTransaction" class="com.atomikos.icatch.jta.J2eeUserTransaction"> <property name="transactionTimeout" value="300" /> </bean> <bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager" depends-on="atomikosTransactionManager,atomikosUserTransaction"> <property name="transactionManager" ref="atomikosTransactionManager" /> <property name="userTransaction" ref="atomikosUserTransaction" /> <property name="allowCustomIsolationLevels" value="true" /> </bean> </beans>
persistence.xml
<?xml version="1.0" encoding="UTF-8"?> <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> <persistence-unit name="PersistenceUnitA" transaction-type="JTA"> <class>com.ajita.jta.entity.MySqlUser</class> <properties> <property name="hibernate.transaction.manager_lookup_class" value="com.atomikos.icatch.jta.hibernate3.TransactionManagerLookup" /> <property name="hibernate.transaction.factory_class" value="org.hibernate.transaction.CMTTransactionFactory" /> </properties> </persistence-unit> <persistence-unit name="PersistenceUnitB" transaction-type="JTA"> <class>com.ajita.jta.entity.SQLServerUser</class> <properties> <property name="hibernate.transaction.manager_lookup_class" value="com.atomikos.icatch.jta.hibernate3.TransactionManagerLookup" /> <property name="hibernate.transaction.factory_class" value="org.hibernate.transaction.CMTTransactionFactory" /> </properties> </persistence-unit> </persistence>
package com.ajita.jta.service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.ajita.jta.dao.MySqlUserDao; import com.ajita.jta.dao.SQLServerUserDao; import com.ajita.jta.entity.MySqlUser; import com.ajita.jta.entity.SQLServerUser; @Service public class UserService { @Autowired private MySqlUserDao mysqlJpaDao; @Autowired private SQLServerUserDao sqlserverJpaDao; @Transactional public boolean saveUser(String username,String password){ MySqlUser user1=new MySqlUser(); user1.setUsername(username); user1.setPassword(password); mysqlJpaDao.save(user1); SQLServerUser user2=new SQLServerUser(); user2.setUsername(username); sqlserverJpaDao.save(user2); return true; } }
package com.ajita.jta.entity; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name = "user_table") public class MySqlUser { @Id @Column(name="ID") @GeneratedValue(strategy=GenerationType.IDENTITY) private int id; @Column(name="UserName") private String username; @Column(name="Password") private String password; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
package com.ajita.jta.entity; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name = "UserSyn") public class SQLServerUser { @Id @Column(name = "ID") @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; @Column(name = "Name") private String username; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } }
package com.ajita.jta.dao; import java.util.Collection; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import org.springframework.stereotype.Repository; @Repository("mysqlJpaDao") public class MySqlUserDao { @PersistenceContext(unitName = "PersistenceUnitA") private EntityManager entityManager; public EntityManager getEntityManager() { return entityManager; } public void setEntityManager(EntityManager entityManager) { this.entityManager = entityManager; } public void save(Object entity) { entityManager.persist(entity); } public void update(Object entity) { entityManager.merge(entity); } public <T> void saveAll(Collection<T> entities) { for (T entity : entities) { save(entity); } } public void delete(Object entity) { entityManager.remove(entity); } public <T> void deleteAll(Collection<T> entities) { for (T entity : entities) { delete(entity); } } }
package com.ajita.jta.dao; import java.util.Collection; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import org.springframework.stereotype.Repository; @Repository("sqlserverJpaDao") public class SQLServerUserDao { @PersistenceContext(unitName = "PersistenceUnitB") private EntityManager entityManager; public EntityManager getEntityManager() { return entityManager; } public void setEntityManager(EntityManager entityManager) { this.entityManager = entityManager; } public void save(Object entity) { entityManager.persist(entity); } public void update(Object entity) { entityManager.merge(entity); } public <T> void saveAll(Collection<T> entities) { for (T entity : entities) { save(entity); } } public void delete(Object entity) { entityManager.remove(entity); } public <T> void deleteAll(Collection<T> entities) { for (T entity : entities) { delete(entity); } } }
相关推荐
在分布式环境中,Hibernate可以使用JTA进行全局事务管理,允许跨多个资源(如数据库、JMS队列等)的事务协调。 ### 7. Spring与Hibernate事务整合 Spring提供了一套强大的事务管理机制,可以与Hibernate无缝集成,...
Spring提供了多种事务管理器实现,如`DataSourceTransactionManager`用于JDBC事务,`HibernateTransactionManager`用于Hibernate事务,以及`JtaTransactionManager`用于Java Transaction API (JTA)事务。这些实现类...
代码生成工具 Hibernate用它在运行时扩展 Java类和实现,同cglib包 slf4j-api-1.5.8.jar和slf4j-log4j12-1.5.0.jar hibernate使用的一个日志系统 spring.jar spring核心包 spring-security-core-2.0.4.jar 和 ...
- **PlatformTransactionManager接口**:这是Spring提供的事务管理接口,如DataSourceTransactionManager(基于JDBC的事务管理)、HibernateTransactionManager(基于Hibernate的事务管理)等。 3. **编程式事务...
(远程方法调用/远程方法调用/)一个JVM中的代码可以通过网络实现远程调用另一个JVM的某个方法JTA :(Java事务API / java事务接口/) JTS :(Java事务处理服务/ java事务服务/) Web服务:不限制于语言,使用xml和...
得益于ASM的动态代码生成技术,部分耗时操作通过动态代码固化为硬编码实现,EF-ORM的大部分操作性能要超过已知的其他框架。 实际性能测试表明,EF的大部分操作都要快于Hiberante和MyBatis, 部分操作速度甚至数十倍...
提供了查询、更新、批处理、调用、(JTA)事务、数据源管理等功能,可以取代Mybatis、Hibernate作为系统的核心ORM框架。 Rexdb提供了工具类风格的接口,不需要编写映射配置,使用简便;同时,它还具备同类框架中最...