需求:
现有数据库 A,B,C,D
要求A,B A,C A,D 操作数据库时能够同步。
使用的数据库mssql 2005 驱动sqljdbc
解决方法:
1.基于容器的方法解决,使用jboss,weblogic
2.使用开源的框架 jtom等来解决
我选择了基于容器的方法,用jboss5(因为免费),原先不熟悉jboss配置起来开始比较麻烦的,
步骤1:
在%jboss-home%/docs/examples/jca 找到mssql-xa-ds.xml拷贝到%jboss-home%/server/default/deploy 下修改配置文件
<datasources>
<xa-datasource>
<jndi-name>MSSQLXADS</jndi-name>
<!-- uncomment to enable interleaving <interleaving/> -->
<isSameRM-override-value>false</isSameRM-override-value>
<xa-datasource-class>com.microsoft.sqlserver.jdbc.SQLServerXADataSource</xa-datasource-class>
<xa-datasource-property name="ServerName">localhost</xa-datasource-property>
<xa-datasource-property name="DatabaseName">web_charge</xa-datasource-property>
<xa-datasource-property name="SelectMethod">cursor</xa-datasource-property>
<xa-datasource-property name="URL">jdbc:sqlserver://localhost:1433</xa-datasource-property>
<!-- sql to call when connection is created -->
<new-connection-sql>select 1</new-connection-sql>
<!-- sql to call on an existing pooled connection when it is obtained from pool -->
<check-valid-connection-sql>select 1</check-valid-connection-sql>
<!-- not sure if these should be here-->
<user-name>tan</user-name>
<password>123456</password>
<use-java-context>false</use-java-context>
<min-pool-size>10</min-pool-size>
<max-pool-size>60</max-pool-size>
<idle-timeout-minutes>15</idle-timeout-minutes>
<blocking-timeout-millis>5000</blocking-timeout-millis>
<!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml (optional) -->
<metadata>
<type-mapping>MSSQLXADS2005</type-mapping>
</metadata>
</xa-datasource>
<xa-datasource>
<jndi-name>MSSQLXADS2</jndi-name>
<!-- uncomment to enable interleaving <interleaving/> -->
<isSameRM-override-value>false</isSameRM-override-value>
<xa-datasource-class>com.microsoft.sqlserver.jdbc.SQLServerXADataSource</xa-datasource-class>
<xa-datasource-property name="ServerName">192.168.3.44</xa-datasource-property>
<xa-datasource-property name="DatabaseName">test_charge</xa-datasource-property>
<xa-datasource-property name="SelectMethod">cursor</xa-datasource-property>
<xa-datasource-property name="URL">jdbc:sqlserver://192.168.3.44:1433</xa-datasource-property>
<!-- sql to call when connection is created -->
<new-connection-sql>select 1</new-connection-sql>
<!-- sql to call on an existing pooled connection when it is obtained from pool -->
<check-valid-connection-sql>select 1</check-valid-connection-sql>
<!-- not sure if these should be here-->
<user-name>tantan</user-name>
<password>123456</password>
<use-java-context>false</use-java-context>
<min-pool-size>10</min-pool-size>
<max-pool-size>60</max-pool-size>
<idle-timeout-minutes>15</idle-timeout-minutes>
<blocking-timeout-millis>5000</blocking-timeout-millis>
<!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml (optional) -->
<metadata>
<type-mapping>MSSQLXADS2005</type-mapping>
</metadata>
</xa-datasource>
</datasources>
步骤2:
把sql server2005驱动下的 sqljdbc_xa.dll拷贝到 mssql2005安装目录下的binn目录
,登陆数据库使用查询分析器执行xa_install.sql,然后为连接数据库的用户名添加SqlJdbcXaUser角色(选中master数据库才有)
步骤3:
运行 MS DTC 服务
在服务管理器中,MS DTC 服务应标记为“自动”,以确保其在启动 SQL Server 服务时运行。若要为 XA 事务启用 MS DTC,必须执行以下步骤:
在 Windows XP 和 Windows Server 2003 上:
在“控制面板”中,打开“管理工具”,然后打开“组件服务”。也可以单击“开始”按钮,单击“运行”,在“打开”框中键入 dcomcnfg,然后按“确定”打开“组件服务”。
展开“组件服务”、“计算机”,右键单击“我的电脑”,然后选择“属性”。
单击“MSDTC”选项卡,再单击“安全性配置”。
选中“启用 XA 事务”复选框,然后单击“确定”。这将使 MS DTC 服务重新启动。
再次单击“确定”以关闭“属性”对话框,然后关闭“组件服务”。
停止 SQL Server,然后重新启动,以确保它与 MS DTC 更改同步。
在 Windows Vista/7 上:
单击“开始”按钮,在“开始搜索”框中键入 dcomcnfg,然后按 Enter 打开“组件服务”。也可以在“开始搜索”框中键入 %windir%\system32\comexp.msc 打开“组件服务”。
依次展开“组件服务”、“计算机”、“我的电脑”和“分布式事务处理协调器”。
右键单击“本地 DTC”,再选择“属性”。
单击“本地 DTC 属性”对话框上的“安全”选项卡。
选中“启用 XA 事务”复选框,然后单击“确定”。这将使 MS DTC 服务重新启动。
再次单击“确定”以关闭“属性”对话框,然后关闭“组件服务”。
停止 SQL Server,然后重新启动,确保它与 MS DTC 更改同步。
新建servlet测试:
public class ContextConn extends HttpServlet {
/**
* Constructor of the object.
*/
public ContextConn() {
super();
}
/**
* Destruction of the servlet. <br>
*/
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.execute(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.execute(request, response);
}
PrintWriter out =null;
public void execute(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
out = response.getWriter();
UserTransaction utx = null;
try {
InitialContext jndiContext= new InitialContext();
utx= (javax.transaction.UserTransaction)jndiContext.lookup("UserTransaction");
utx.begin();
testMsSql_1() ;
testMsSql_1() ;
// if(true)throw new Exception("抛出的异常测试!");
utx.commit();
}catch(Exception e){
if(utx!=null){
try {
utx.rollback();
} catch (Exception e2) {
System.out.println(e2.getMessage());
System.out.println("事物回滚失败");
}
}
out.println(e.getMessage());
}
}
public void init() throws ServletException {
}
private Connection createXAConnection(String jndiname)throws Exception{
InitialContext jndiContext;
try {
jndiContext = new InitialContext();
DataSource ds = (DataSource)jndiContext.lookup(jndiname);
return ds.getConnection();
} catch (Exception e) {
// TODO Auto-generated catch block
out.print(e.getMessage()+"<br/>");
}
return null;
}
private void testMsSql_1() throws Exception {
Connection con = createXAConnection("MSSQLXADS2");
try{
if(con != null){
PreparedStatement pstmt =
con.prepareStatement("INSERT INTO xamin (colum1,colum2) VALUES (?, ?)");
pstmt.setString(1,"test");
pstmt.setString(2,"test2");
int insert= pstmt.executeUpdate();
System.out.println("测试成功"+insert+"条");
}
}catch(Exception e){
out.println(e.getMessage());
}
// if(con!=null){
// con.close();
// }
}
private void testMsSql_2() throws Exception{
Connection con = createXAConnection("MSSQLXADS");
try{
if(con != null){
PreparedStatement pstmt =
con.prepareStatement("INSERT INTO XAMin (f1,f2) VALUES (?, ?)");
pstmt.setInt(1,1);
pstmt.setString(2,"test");
int insert= pstmt.executeUpdate();
System.out.println("测试成功"+insert+"条");
}
}catch(Exception e){
out.println(e.getMessage());
}
// if(con!=null){
// con.close();
// }
}
}
总结:
分享到:
相关推荐
1. **配置JBoss**:首先,你需要将Spring和Hibernate的相关库添加到JBoss的类路径中,并且可能需要对JBoss的配置文件进行调整,以支持Spring和JTA。 2. **配置Spring**:创建Spring的配置文件,定义数据源、...
在IT行业中,JBoss JTA(Java Transaction API)配置是企业级Java应用中不可或缺的部分,它负责管理和协调数据库和其他资源的事务。当遇到"JBoss JTA configuration trouble shooting"的问题时,开发者通常需要深入...
Apache2.2+JBOSS 5 集群配置主要涉及在Linux环境下构建高可用性和负载均衡的服务器集群,以提升应用服务的稳定性和处理能力。以下是详细的知识点: 1. **JBoss集群架构**: JBoss 集群可以采用两种架构:客户端...
5. **指定JBoss路径**:在“JBoss AS Location”中,浏览并选择刚才解压的JBoss目录,然后点击“Finish”。MyEclipse会自动检测到JBoss的版本。 6. **创建服务器实例**:回到“Server”视图,右键点击,选择“New”...
在本教程中,我们将深入探讨如何在Spring MVC 3中结合MyBatis并利用JTA(Java Transaction API)以及JBoss 7.1应用程序服务器来配置多数据源环境。这个配置对于那些需要处理多个数据库或者分布式事务的项目来说至关...
jboss配置入门 jboss系统是一种基于Java的应用服务器,具有高性能、可扩展、安全性强等特点。在本文中,我们将对jboss的基本配置进行介绍,包括其文件夹结构、配置文件、负载均衡配置等。 jboss文件夹结构 jboss的...
配置JBoss服务器是确保其安全性和适应性的重要步骤。以下是对标题和描述中涉及的JBoss配置知识点的详细说明: 一、设置控制台登录窗口 默认情况下,JBoss的JMX控制台(http://localhost:8080/jmx-console)无需...
5. **使用工具辅助**:有一些工具可以帮助简化热部署过程,例如JRebel和Red Hat JBoss Developer Studio。这些工具可以实时跟踪代码更改,并自动同步到服务器,极大地提高了开发效率。 6. **批处理工具**:`fast...
通过配置或者注解,Spring可以帮助开发者轻松地在不同类型的事务边界(如方法级别)进行事务控制,同时支持JTA和非JTA环境。 在“HornetQ-JBoss-TS-MySQL-Tomcat-Spring-master”项目中,这些组件协同工作,实现了...
JBOSS log4j 配置 Log4j 是一个功能强大且灵活的日志记录工具,广泛应用于 Java 项目中。然而,在 JBOSS 服务器中使用 Log4j 时,可能会遇到一些冲突和配置问题。本文将详细介绍如何解决 JBOSS 和 Log4j 的冲突,...
【JBoss的安装、配置和部署】 JBoss是一款开源的应用服务器,它基于Java EE(Enterprise Edition)标准,提供了丰富的中间件服务,支持Web应用、EJB(Enterprise JavaBeans)、JMS(Java Message Service)等。在...
### jboss5.0.1 GA端口配置详解 #### 一、背景介绍 JBoss AS 5.0.1 GA(General Availability)是JBoss应用服务器的一个版本,广泛应用于企业级Java EE应用程序的开发与部署。在多服务环境下,可能会遇到端口冲突的...
5. **standalone.xml或domain.xml**(JBoss AS7及以上版本):这些是JBoss最新版本的配置文件,其中包含了所有关于数据源的配置。在JBoss AS7之后,配置方式有了较大改变,数据源配置移到了这些XML文件中。 JDBC是...
### JBoss配置虚拟路径详解 在企业级应用服务器领域,JBoss AS(Application Server)作为一款开源的Java应用服务器,提供了强大的平台支持多种Java EE应用的部署与运行。虚拟路径的配置是JBoss中一项非常实用的...
JBOSS实战-服务器配置指南【部分目录】,JBOSS实战-服务器配置指南
在JBoss 7及以上版本中,对EJB的配置过程相较于之前的版本有所变化,主要涉及到两个关键的配置文件:`jboss-ejb3.xml`和`ejb-jar.xml`。 `ejb-jar.xml`文件是EJB模块的标准配置文件,遵循Java EE规范。在这个文件中...
【JBoss5配置详解】 JBoss Application Server 5(简称JBoss AS 5)是一款开源的Java EE应用服务器,由Red Hat公司维护。它提供了一个用于部署和管理企业级Java应用程序的平台。JBoss AS 5是基于EJB 3.0规范的,...