- 浏览: 174468 次
- 性别:
- 来自: 郑州
-
文章分类
- 全部博客 (90)
- web前端 (23)
- java (30)
- 其它 (7)
- jbpm4.4 (1)
- 服务器 (2)
- 数据库 (11)
- J2se (1)
- 812202 (0)
- access sql (1)
- 数据库管理工具 (1)
- smartupload (1)
- win7 控制台窗口已停止工作 (1)
- xfire spring web service (1)
- 免安装版本 tomcat 后台启动 设置 (1)
- js 处理日期类型 (1)
- input 自动填充 (1)
- android 连接webservice (2)
- tomcat 直接通过IP访问web项目 (1)
- svn 修改历史日志 (1)
- java 设计模式之适配器 (1)
- android 程序日志记录 (3)
- Win7 电脑突然USB无法识别 方法记录 (1)
- java 实现图片缩略 (1)
- android 更多,刷新 (3)
- access 导入mysql (1)
- java 加密,解密 (0)
- 闪回数据 (1)
- extjs 弹出进度条 (1)
- JSP 绝对路径显示服务器非webapps下的图片或资源 (0)
- html 制作彩信未完 (1)
- android 2.2 api (1)
- java 反射 (1)
- jquery 购物车 (1)
最新评论
-
masuweng:
oracle 迁移 sqlite -
nanjiwubing123:
你好 ,在IE6环境下运行demo,出现dhtmlXTreeO ...
dhtmlxtree 右键菜单的增加,删除,修改 -
李_俊:
呃,那么复杂,果断无视,找一个简单的。
java 源码混淆器 -
shanshan518:
兼容性不好,还有没有精确到秒,楼主
精确到秒的js日期时间选择器 -
mynamelzk:
日期时间选择器非常好用,谢谢你了
日期选择器,中文
转载
Spring+iBatis+JOTM实现JTA事务 JOTM是个开源的JTA事务管理组件,可以让程序脱离J2EE容器而获得分布式事务管理的能力。 测试过程如下: 一、环境 1、准备软件环境 spring-framework-2.5.6.SEC01-with-dependencies.zip ibatis-2.3.4 ow2-jotm-dist-2.1.4-bin.tar.gz MySQL-5.1 JDK1.5 2、创建数据库环境,注意数据库引擎为InnoDB,只有这样才能支持事务。 CREATE DATABASE IF NOT EXISTS testdb_a DEFAULT CHARACTER SET utf8; USE testdb_a; DROP TABLE IF EXISTS tab_a; CREATE TABLE tab_a ( id bigint(20) NOT NULL, name varchar(60) DEFAULT NULL, address varchar(120) DEFAULT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE DATABASE IF NOT EXISTS testdb_b DEFAULT CHARACTER SET utf8; USE testdb_b; DROP TABLE IF EXISTS tab_b; CREATE TABLE tab_b ( id bigint(20) NOT NULL, name varchar(60) DEFAULT NULL, address varchar(120) DEFAULT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 二、建立项目testJOTM 1、建立项目后,准备依赖的类库,结构如下: │ spring-aop.jar │ spring-beans.jar │ spring-context-support.jar │ spring-context.jar │ spring-core.jar │ spring-jdbc.jar │ spring-jms.jar │ spring-orm.jar │ spring-test.jar │ spring-tx.jar │ spring-web.jar │ spring-webmvc-portlet.jar │ spring-webmvc-struts.jar │ spring-webmvc.jar │ aspectjrt.jar │ aspectjweaver.jar │ cglib-nodep-2.1_3.jar │ asm-2.2.3.jar │ log4j-1.2.15.jar │ asm-commons-2.2.3.jar │ asm-util-2.2.3.jar │ aopalliance.jar │ mysql-connector-java-5.1.6-bin.jar │ ├─ibatis │ ibatis-2.3.4.726.jar │ sql-map-2.dtd │ sql-map-config-2.dtd │ ├─jotm │ license.txt │ xapool.jar │ jotm-core.jar │ jotm-standalone.jar │ jotm-jms.jar │ jotm-datasource.jar │ ow2-jta-1.1-spec.jar │ jotm-client.jar │ ├─jakarta-commons │ commons-attributes-api.jar │ commons-attributes-compiler.jar │ commons-beanutils.jar │ commons-codec.jar │ commons-collections.jar │ commons-dbcp.jar │ commons-digester.jar │ commons-discovery.jar │ commons-fileupload.jar │ commons-httpclient.jar │ commons-io.jar │ commons-lang.jar │ commons-logging.jar │ commons-pool.jar │ commons-validator.jar │ ├─junit │ junit-3.8.2.jar │ junit-4.4.jar │ license.txt │ └─log4j log4j-1.2.15.jar 2、根据表建立entity和SQLMap public class TabA implements Serializable { private Long id; private String name; private String address; //省略getter/setter public class TabB implements Serializable { private Long id; private String name; private String address; //省略getter/setter TabA.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd" > <!-- 表名:tab_a --> <sqlMap namespace="tab_a"> <typeAlias alias="TabA" type="com.lavasoft.stu.jtom.entity.TabA"/> <resultMap id="result_base" class="TabA"> <result property="id" column="id"/> <result property="name" column="name"/> <result property="address" column="address"/> </resultMap> <!-- 添加 --> <insert id="insert" parameterClass="TabA"> insert into tab_a( id, name, address ) values ( #id#, #name#, #address# ) <selectKey keyProperty="id" resultClass="long"> select LAST_INSERT_ID() </selectKey> </insert> <!-- 更新 --> <update id="update" parameterClass="TabA"> update tab_a set id = #id#, name = #name#, address = #address# where id = #id# </update> <!-- 删除 --> <delete id="deleteById" parameterClass="long"> delete from tab_a where id = #value# </delete> <!-- 根据ID获取 --> <select id="findById" parameterClass="long" resultMap="tab_a.result_base"> select * from tab_a where id = #value# </select> </sqlMap> TabB.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd" > <!-- 表名:tab_b --> <sqlMap namespace="tab_b"> <typeAlias alias="TabB" type="com.lavasoft.stu.jtom.entity.TabB"/> <resultMap id="result_base" class="TabB"> <result property="id" column="id"/> <result property="name" column="name"/> <result property="address" column="address"/> </resultMap> <!-- 添加 --> <insert id="insert" parameterClass="TabB"> insert into tab_b( id, name, address ) values ( #id#, #name#, #address# ) <selectKey keyProperty="id" resultClass="long"> select LAST_INSERT_ID() </selectKey> </insert> <!-- 更新 --> <update id="update" parameterClass="TabB"> update tab_b set id = #id#, name = #name#, address = #address# where id = #id# </update> <!-- 删除 --> <delete id="deleteById" parameterClass="long"> delete from tab_b where id = #value# </delete> <!-- 根据ID获取 --> <select id="findById" parameterClass="long" resultMap="tab_b.result_base"> select * from tab_b where id = #value# </select> </sqlMap> /** * TabADAO * * @author leizhimin 2009-6-25 12:39:19 */ public interface TabADAO { /** * 保存一个TabA对象 * * @param tabA TabA对象 * @return 返回保存后的对象 */ TabA saveTabA(TabA tabA); /** * 更新一个TabA * * @param tabA TabA对象 * @return 返回更新后的对象 */ TabA updateTabA(TabA tabA); /** * 删除指定标识的一个TabA * * @param id TabA标识 */ void deleteTabAById(Long id); /** * 获取指定标识的TabA * * @param id TabA标识 * @return 所查询到的TabA */ TabA findTabAById(Long id); } /** * TabADAO * * @author leizhimin 2009-6-25 12:43:55 */ public class TabADAOImpl extends SqlMapClientDaoSupport implements TabADAO { /** * 保存一个TabA对象 * * @param tabA TabA对象 * @return 返回保存后的对象 */ public TabA saveTabA(TabA tabA) { Long id = (Long) getSqlMapClientTemplate().insert("tab_a.insert", tabA); tabA.setId(id); return tabA; } /** * 更新一个TabA * * @param tabA TabA对象 * @return 返回更新后的对象 */ public TabA updateTabA(TabA tabA) { getSqlMapClientTemplate().update("tab_a.update", tabA); return tabA; } /** * 删除指定标识的一个TabA * * @param id TabA标识 */ public void deleteTabAById(Long id) { getSqlMapClientTemplate().delete("tab_a.deleteById",id); } /** * 获取指定标识的TabA * * @param id TabA标识 * @return 所查询到的TabA */ public TabA findTabAById(Long id) { return (TabA) getSqlMapClientTemplate().queryForObject("tab_a.findById",id); } } B的DAO和A类似,就不写了。 /** * 测试JOTM的Service * * @author leizhimin 2009-6-25 12:53:55 */ public interface StuJotmService { /** * 同时保存TabA、TabB * * @param a TabA对象 * @param b TabB对象 */ void saveAB(TabA a, TabB b); /** * 同时更新TabA、TabB * * @param a TabA对象 * @param b TabB对象 */ void updateAB(TabA a, TabB b); /** * 删除指定id的TabA、TabB记录 * * @param id 指定id */ void deleteABif(Long id); } /** * Created by IntelliJ IDEA. * * @author leizhimin 2009-6-25 12:58:48 */ //@Transactional public class StuJotmServiceImpl implements StuJotmService { private TabADAO tabADAO; private TabBDAO tabBDAO; /** * 同时保存TabA、TabB * * @param a TabA对象 * @param b TabB对象 */ // @Transactional(readOnly=false) public void saveAB(TabA a, TabB b) { tabADAO.saveTabA(a); tabBDAO.saveTabB(b); } /** * 同时更新TabA、TabB * * @param a TabA对象 * @param b TabB对象 */ // @Transactional(readOnly=false) public void updateAB(TabA a, TabB b) { tabADAO.updateTabA(a); tabBDAO.updateTabB(b); } /** * 删除指定id的TabA、TabB记录 * * @param id 指定id */ // @Transactional(readOnly=false) public void deleteABif(Long id) { tabADAO.deleteTabAById(id); tabBDAO.deleteTabBById(id); } public void setTabADAO(TabADAO tabADAO) { this.tabADAO = tabADAO; } public void setTabBDAO(TabBDAO tabBDAO) { this.tabBDAO = tabBDAO; } } /** * Spring上下文工具 * * @author leizhimin 2008-8-13 14:42:58 */ public class ApplicationContextUtil { private static ApplicationContext applicationContext; static { if (applicationContext == null) applicationContext = rebuildApplicationContext(); } /** * 重新构建Spring应用上下文环境 * * @return ApplicationContext */ public static ApplicationContext rebuildApplicationContext() { return new ClassPathXmlApplicationContext("/ApplicationContext.xml"); } /** * 获取Spring应用上下文环境 * * @return */ public static ApplicationContext getApplicationContext() { return applicationContext; } /** * 简单的上下文环境测试 */ public static void main(String[] args) { rebuildApplicationContext(); if (applicationContext == null) { System.out.println("ApplicationContext is null"); } else { System.out.println("ApplicationContext is not null!"); } } } 三、做JTOM、Spring、iBatis、Log4j等配置 JOTM配置:carol.properties #JNDI调用协议 carol.protocols=jrmp #不使用CAROL JNDI封装器 carol.start.jndi=false #不启动命名服务器 carol.start.ns=false Spring配置:ApplicationContext.xml <?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:jee="http://www.springframework.org/schema/jee" 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-2.0.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"> <!--指定Spring配置中用到的属性文件--> <bean id="propertyConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>classpath:jdbc.properties</value> </list> </property> </bean> <!-- JOTM实例 --> <bean id="jotm" class="org.springframework.transaction.jta.JotmFactoryBean"/> <!-- JTA事务管理器 --> <bean id="myJtaManager" class="org.springframework.transaction.jta.JtaTransactionManager"> <property name="userTransaction"> <ref local="jotm"/> </property> </bean> <!-- 数据源A --> <bean id="dataSourceA" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method="shutdown"> <property name="dataSource"> <bean class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown"> <property name="transactionManager" ref="jotm"/> <property name="driverName" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> </bean> </property> <property name="user" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </bean> <!-- 数据源B --> <bean id="dataSourceB" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method="shutdown"> <property name="dataSource"> <bean class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown"> <property name="transactionManager" ref="jotm"/> <property name="driverName" value="${jdbc2.driver}"/> <property name="url" value="${jdbc2.url}"/> </bean> </property> <property name="user" value="${jdbc2.username}"/> <property name="password" value="${jdbc.password}"/> </bean> <!-- 事务切面配置 --> <aop:config> <aop:pointcut id="serviceOperation" expression="execution(* *..servi1ce*..*(..))"/> <aop:advisor pointcut-ref="serviceOperation" advice-ref="txAdvice"/> </aop:config> <!-- 通知配置 --> <tx:advice id="txAdvice" transaction-manager="myJtaManager"> <tx:attributes> <tx:method name="delete*" rollback-for="Exception"/> <tx:method name="save*" rollback-for="Exception"/> <tx:method name="update*" rollback-for="Exception"/> <tx:method name="*" read-only="true" rollback-for="Exception"/> </tx:attributes> </tx:advice> <!--根据dataSourceA和sql-map-config_A.xml创建一个SqlMapClientA--> <bean id="sqlMapClientA" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"> <property name="dataSource"> <ref local="dataSourceA"/> </property> <property name="configLocation"> <value>sql-map-config_A.xml</value> </property> </bean> <!--根据dataSourceB和sql-map-config_B.xml创建一个SqlMapClientB--> <bean id="sqlMapClientB" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"> <property name="dataSource"> <ref local="dataSourceB"/> </property> <property name="configLocation"> <value>sql-map-config_B.xml</value> </property> </bean> <!--根据sqlMapClientA创建一个SqlMapClientTemplate的模版类实例sqlMapClientTemplateA--> <bean id="sqlMapClientTemplateA" class="org.springframework.orm.ibatis.SqlMapClientTemplate"> <property name="sqlMapClient" ref="sqlMapClientA"/> </bean> <!--根据sqlMapClientB创建一个SqlMapClientTemplate的模版类实例sqlMapClientTemplateB--> <bean id="sqlMapClientTemplateB" class="org.springframework.orm.ibatis.SqlMapClientTemplate"> <property name="sqlMapClient" ref="sqlMapClientB"/> </bean> <!-- 配置DAO,并注入所使用的sqlMapClientTemplate实例 --> <bean id="tabADAO" class="com.lavasoft.stu.jtom.dao.impl.TabADAOImpl"> <property name="sqlMapClientTemplate" ref="sqlMapClientTemplateA"/> </bean> <bean id="tabBDAO" class="com.lavasoft.stu.jtom.dao.impl.TabBDAOImpl"> <property name="sqlMapClientTemplate" ref="sqlMapClientTemplateB"/> </bean> <!-- Service配置,注入DAO --> <bean id="stuJotmService" class="com.lavasoft.stu.jtom.service.StuJotmServiceImpl"> <property name="tabADAO" ref="tabADAO"/> <property name="tabBDAO" ref="tabBDAO"/> </bean> </beans> 数据库配置:jdbc.properties jdbc.database=cms_release jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://192.168.0.2:3306/testdb_a?useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull jdbc.username=root jdbc.password=leizhimin jdbc2.database=cms_release jdbc2.driver=com.mysql.jdbc.Driver jdbc2.url=jdbc:mysql://192.168.0.1:3306/testdb_b?useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull jdbc2.username=root jdbc2.password=leizhimin iBatis的SQLMap配置: sql-map-config_A.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-config-2.dtd"> <sqlMapConfig> <settings cacheModelsEnabled="true" enhancementEnabled="true" lazyLoadingEnabled="true" errorTracingEnabled="true" useStatementNamespaces="true"/> <sqlMap resource="com/lavasoft/stu/jtom/entity/sqlmap/TabA.xml"/> </sqlMapConfig> sql-map-config_B.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-config-2.dtd"> <sqlMapConfig> <settings cacheModelsEnabled="true" enhancementEnabled="true" lazyLoadingEnabled="true" errorTracingEnabled="true" useStatementNamespaces="true"/> <sqlMap resource="com/lavasoft/stu/jtom/entity/sqlmap/TabB.xml"/> </sqlMapConfig> 日志的配置:log4j.properties log4j.rootLogger=INFO,CONSOLE,LOGFILE log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.Threshold=INFO log4j.appender.CONSOLE.Target=System.out log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout log4j.appender.CONSOLE.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss } - %-5p %c %x - %m%n log4j.appender.LOGFILE=org.apache.log4j.RollingFileAppender log4j.appender.LOGFILE.File=contestlog.log log4j.appender.LOGFILE.MaxFileSize=500KB log4j.appender.LOGFILE.MaxBackupIndex=10 log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout log4j.appender.LOGFILE.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss } - %-p %c %x - %m%n log4j.logger.com.ibatis=INFO log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=INFO log4j.logger.com.ibatis.common.jdbc.ScriptRunner=INFO log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=INFO log4j.logger.java.sql.Connection=debug log4j.logger.java.sql.Statement=INFO,CONSOLE log4j.logger.java.sql.PreparedStatement=INFO,CONSOLE 四、测试 public class Test { private static ApplicationContext ctx = ApplicationContextUtil.getApplicationContext(); private static StuJotmService ser = (StuJotmService) ctx.getBean("stuJotmService"); public static void test_() { TabA a = new TabA(); a.setId(1L); a.setName("aaa"); a.setAddress("address a"); TabB b = new TabB(); b.setId(1L); b.setName("bbb"); b.setAddress("address b"); ser.saveAB(a, b); } public static void main(String[] args) { test_(); } }
发表评论
-
Java中二进制、十进制、十六进制及ASCII码与String及字节数组与十六进制之间的转换
2013-07-16 19:15 0转载http://my.oschina.net/sorthW ... -
Spring中加载ApplicationContext.xml文件的方式【转】
2013-03-18 09:34 10631.利用ClassPathXmlApplicationCon ... -
Duplicate name in Manifest: SHA1-Digest
2012-11-27 17:17 4056Duplicate name in Manifest: SHA ... -
JSP 绝对路径显示服务器非webapps下的图片或资源
2012-05-08 19:08 0设置tomcate 虚拟路径 1:在tomcate/ser ... -
java 加密,解密
2012-04-05 17:20 0package test; impor ... -
java 实现图片缩略
2012-02-29 11:02 1024用到的Jar:Thumbnails 查看下载 地址:http ... -
java 设计模式之适配器
2012-02-20 10:48 949转载:http://www.lshine.com/index. ... -
tomcat 直接通过IP访问web项目
2012-02-19 12:28 48051:在开发时访问web项目是这样的http://localho ... -
xfire ibatis spring web service
2011-11-04 14:37 12911:所用的jar xfire-all-1.2.6.ja ... -
xfire spring web service
2011-11-03 18:17 1154转载 http:// ... -
java.lang.UnsatisfiedLinkError解决方法汇集(转载)
2011-08-04 16:59 18872转载http://blog.csdn.net/niux ... -
Spring事务配置的五种方式
2011-06-28 11:54 1020转载http://developer.51cto.com/ar ... -
JFileChooser使用详解
2011-06-21 10:38 4907JFileChooser 转载 (2010-11-30 23 ... -
java 连接各种数据库 总结
2011-05-24 23:09 4579Oracle8/8i/9i数据库(thin模式) Cl ... -
java 实现某个日期增减天数
2011-05-20 01:46 1370转载:http://blog.csdn.net/zdwzzu2 ... -
dom4j 验证xml dtd
2011-05-08 18:52 1130转载:http://hi.baidu.com/%C0%EE%D ... -
Eclipse 3.WindowBuilder Pro及使用SWT Designer
2011-05-06 11:59 1767转载:http://apps.hi.baidu.com ... -
swing 管理器二
2011-05-06 09:26 936import java.awt.Dimension; imp ... -
swing 布局管理器
2011-05-05 17:53 1189当选择使用JPanel和顶层容器的content pane时 ... -
java 源码混淆器
2011-04-19 16:41 12649[转载] http://blueskylan.itey ...
相关推荐
- 在Spring的配置文件中,配置JDBC数据源,这里需要为每个数据库配置一个数据源。 - 配置JOTM事务管理器,通过`UserTransaction`接口进行事务的开始、提交和回滚。 - 使用`PlatformTransactionManager`接口配置...
在使用JTA时,你需要确保MyBatis的数据源配置为JNDI数据源,以便于事务的统一管理。 总的来说,Spring配置JTA事务管理是一项关键任务,它确保了在分布式环境下的数据一致性。理解并正确配置JTA事务管理,能够让你的...
在多数据源配置中,Spring通过DataSource接口和相关的实现类(如AbstractDataSource)来管理数据源。开发者可以配置多个DataSource bean,并通过配置文件或Java配置类来指定它们的属性,如数据库连接URL、用户名、...
为了实现这种集成,我们需要在Spring配置文件中定义数据源、事务管理器以及IBatis的SqlSessionFactory。数据源配置确保了Spring能够连接到数据库,事务管理器则用于处理事务的提交和回滚,SqlSessionFactory是IBatis...
Spring+iBatis+JOTM实现JTA事务: 如何处理跨库事物:spring + jtom 的jta事务是个很好的选择. 这个源码示例非常不错,包括所有的源码和jar包,下载后eclipse 或 myeclipse 导入就能用。 里面有详细的说明和注释,...
- **ibatis配置**:通过XML配置文件或注解来配置ibatis,主要包括数据源配置、映射文件路径配置等。 - **ibatis基础语义** - **XmlSqlMapClientBuilder**:这是一个工具类,用于从XML配置文件构建`SqlMapClient`...
如果运行在支持JTA(Java Transaction API)的服务器上,可以使用JtaTransactionManager来管理多资源事务。下面是一些常见技术与对应事务管理器的匹配: - JDBC: DataSourceTransactionManager 或 ...
Ibatis的配置文件是整个框架的灵魂,它包含了数据源、事务管理器以及SQL映射文件的路径等信息。SqlMapClient配置后,我们可以通过SqlMapClientBuilder来实例化SqlMapClient对象。SqlMapClient提供了执行SQL映射文件...
通过Spring可以轻松管理iBATIS的配置和生命周期。 - 相对于Hibernate等“一站式”ORM解决方案,iBATIS提供了更多的灵活性,特别是在需要手工编写SQL语句的情况下,这使得iBATIS成为某些特定场景下更好的选择。 综上...
- **基于JTA的事务管理机制**:适用于分布式事务场景,适用于跨多个数据源的事务处理。 - **外部事务管理**:允许使用应用服务器提供的事务管理服务,如Spring的PlatformTransactionManager。 ### 缓存 Ibatis...
1. **配置数据源**:在WebLogic管理控制台中,创建JTA数据源,设置JNDI名称,关联到实际的数据库连接池。 2. **启用JTA事务管理**:在Spring配置文件中,配置`PlatformTransactionManager`为`...
ibatis的配置主要通过XML文件完成,其中最重要的文件是`sqlMapConfig.xml`,它包含了数据源、事务管理器等全局配置信息。此外,每个具体的数据库操作都通过单独的Mapper XML文件定义。 - **sqlMapConfig.xml**配置...
- **配置文件**:创建ibatis的配置文件(如SqlMapConfig.xml),配置数据源信息、事务管理器等。 3. **ibatis配置** - **数据源配置**:设置JDBC数据源,包括数据库连接信息(URL、用户名、密码等)。 - **映射...
在Hibernate中,JTA事务应用总结通常会讲解如何配置Hibernate以使用JTA,以及在多数据源环境下如何处理事务。 跨库事务处理,如在spring+hibernate+struts2+jta的项目中,需要考虑的细节更多,包括异常处理、回滚...
- **配置 iBATIS**:使用 XML 配置文件来配置 iBATIS,包括数据源信息、映射文件路径等。 ##### iBATIS 配置 - **SqlMapConfig.xml**:这是 iBATIS 的主配置文件,用于配置数据源、事务管理器以及其他全局设置。 - ...
5. **配置多个数据源**:在Spring中,可以配置多个DataSource实例,分别对应不同的数据库。通过`AbstractRoutingDataSource`或者自定义的路由数据源,可以在运行时动态选择合适的数据源进行操作。 6. **分布式事务...
- **配置文件**:创建`mybatis-config.xml`文件,用于配置数据源、事务管理器等。 - **数据源**:配置数据源属性,包括驱动名、数据库URL、用户名和密码。 - **事务管理**:指定事务管理的方式,可以选择JDBC事务...