最近在开发一个企业的ERP系统,用到多个数据库,某一业务需要同时操作多个数据库,我们使用了JBoss作为Web服务器,数据源采用jdni方式,采用spring4注入方式进行多数据源和事务的配置,采用Hibernate4的SessionFactory进入数据操作, 下面介绍整个过程的配置:
1.Jboss JDBC数据源的配置
系统采用sqlserver2008作为数据库,sqlserver jdbc的配置
建立如下的目录结构:
jboss\modules\com\microsoft\sqlserver\jdbc\SQLServerDriver\main
把jdbc驱动程序sqljdbc4.jar copy到此目录,建立文件module.xml,内容如下:
<module xmlns="urn:jboss:module:1.1" name="com.microsoft.sqlserver.jdbc.SQLServerDriver"> <resources> <resource-root path="sqljdbc4.jar"/> </resources> <dependencies> <module name="javax.api"/> <module name="javax.transaction.api"/> <module name="javax.servlet.api" optional="true"/> </dependencies> </module>2.JBoss jdni数据源设置
打开配置文件jboss\standalone\configuration\standalone.xml,在datasources节点下添加两个datasource, frame和stk 对应两个数据库
和一个drivers
<datasource jndi-name="java:jboss/datasources/framework" pool-name="framework" enabled="true" use-java-context="true"> <connection-url>jdbc:sqlserver://localhost:1433;databaseName=erp_java</connection-url> <driver>mssqlxa</driver> <pool> <min-pool-size>2</min-pool-size> <max-pool-size>10</max-pool-size> </pool> <security> <user-name>sa</user-name> <password>ft4023581</password> </security> </datasource> <datasource jndi-name="java:jboss/datasources/stk" pool-name="stk" enabled="true" use-java-context="true"> <connection-url>jdbc:sqlserver://localhost:1433;databaseName=stk_net</connection-url> <driver>mssqlxa</driver> <pool> <min-pool-size>2</min-pool-size> <max-pool-size>10</max-pool-size> </pool> <security> <user-name>sa</user-name> <password>ft4023581</password> </security> </datasource> <drivers> <driver name="h2" module="com.h2database.h2"> <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class> </driver> <driver name="mssqlxa" module="com.microsoft.sqlserver.jdbc.SQLServerDriver"> <xa-datasource-class>com.microsoft.sqlserver.jdbc.SQLServerXADataSource</xa-datasource-class> </driver> </drivers>
注意:为了能同时对两个数据库进行操作(包括增删改),需要在配置文件增加如下内容,
<system-properties> <property name="com.arjuna.ats.arjuna.allowMultipleLastResources" value="true"/> </system-properties>这个内容必须放在配置文件的节点:</extensions>和<management>之间,否则会报错。
如果没有上面allowMultipleLastResources的设置,在进行多数据库更新时会出下如下错误。
javax.resource.ResourceException: IJ000461: Could not enlist in transaction on entering meta-aware object
导致不能open connection.
3.Spring配置文件
<?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:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:jee="http://www.springframework.org/schema/jee" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.2.xsd" > <context:component-scan base-package="com.framework.dao"/> <context:component-scan base-package="com.framework.dao.mssql"/> <context:component-scan base-package="com.framework.service"/> <context:component-scan base-package="com.framework.action"/> <context:component-scan base-package="com.stk.dao.mssql"/> <context:component-scan base-package="com.stk.service"/> <context:component-scan base-package="com.stk.action"/> <jee:jndi-lookup jndi-name="java:jboss/datasources/framework" id="datasourceFW" lookup-on-startup="true"></jee:jndi-lookup> <bean id="sessionFactoryFW" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> <property name="dataSource" ref="datasourceFW"/> <property name="packagesToScan" value="com.framework.domain"/> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">com.util.SQLServerDialect</prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.transaction.factory_class">org.hibernate.engine.transaction.internal.jta.JtaTransactionFactory</prop> <prop key="hibernate.current_session_context_class">jta</prop> </props> </property> </bean> <bean id="hibernateTemplateFW" class="org.springframework.orm.hibernate4.HibernateTemplate" p:sessionFactory-ref="sessionFactoryFW" /> <jee:jndi-lookup jndi-name="java:jboss/datasources/stk" id="datasourceStk" lookup-on-startup="true"></jee:jndi-lookup> <bean id="sessionFactoryStk" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> <property name="dataSource" ref="datasourceStk"/> <!-- --> <property name="packagesToScan" value="com.stk.domain"/> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">com.util.SQLServerDialect</prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.current_session_context_class">jta</prop> <prop key="hibernate.transaction.factory_class">org.hibernate.engine.transaction.internal.jta.JtaTransactionFactory</prop> </props> </property> </bean> <bean id="hibernateTemplateStk" class="org.springframework.orm.hibernate4.HibernateTemplate" p:sessionFactory-ref="sessionFactoryStk" /> <!-- spring 事务管理器 --> <bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager"> <property name="userTransactionName" value="java:jboss/UserTransaction"/> <property name="transactionManagerName" value="java:jboss/TransactionManager"/> </bean> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="select*" read-only="true" propagation="REQUIRED"/> <tx:method name="get*" read-only="true" propagation="REQUIRED"/> <tx:method name="load*" read-only="true" propagation="REQUIRED"/> <tx:method name="find*" read-only="true" propagation="REQUIRED"/> <tx:method name="query*" read-only="true" propagation="REQUIRED"/> <tx:method name="read*" read-only="true" propagation="REQUIRED"/> <tx:method name="sync*"/> <tx:method name="*" propagation="REQUIRED" rollback-for="Exception"/> </tx:attributes> </tx:advice> <aop:config> <aop:pointcut id="pointcut" expression="execution(* com.*.service.*.*(..))"/> <aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut"/> </aop:config> </beans>
相关推荐
《JBoss 7.1.1 + EJB 3.0 + MySQL 数据源配置详解》 在企业级Java应用开发中,JBoss Application Server(简称JBoss AS)是广泛使用的开源应用服务器,版本7.1.1是其稳定且功能强大的一个版本。EJB(Enterprise ...
随后,对 Eclipse 进行配置以支持 Jboss 7.1.1 服务器。需要切换到 Server 视图,右键点击新建服务器,选择 JBoss AS 7.1,并指定之前解压的 Jboss 安装目录。创建完毕后启动服务器,并通过浏览器访问 *** 来验证...
本配置指南旨在详细阐述JBoss 7.1.1的特性、配置方法以及管理实践,帮助用户深入了解并有效地利用该版本。 1. **JBoss 版本特性** - **JBoss 4**:引入了模块化架构,增强了安全管理,支持EJB 3.0。 - **JBoss 5*...
本文将重点介绍JBoss7.1.1的核心特性和管理员需要了解的关键概念,包括JBoss的主要版本特性、JBoss AS7的新特性、域(Domain)和群集(Cluster)的概念、JBoss7的配置方法、安全性配置、管理接口、JVM设置、命令行...
1. **配置JBoss**:首先,你需要将Spring和Hibernate的相关库添加到JBoss的类路径中,并且可能需要对JBoss的配置文件进行调整,以支持Spring和JTA。 2. **配置Spring**:创建Spring的配置文件,定义数据源、...
根据提供的标题、描述以及部分内容,本文将详细解析与MYECLIPSE + STRUTS2 + SPRING4 + HIBERNATE4 + STRUCTS2S+OGNL + MYSQL_5.7.12相关的技术栈及其应用。这些技术在企业级开发中非常常见,能够帮助开发者构建高效...
下面将详细介绍如何在JBoss 7.1.1中配置MySQL数据源。 首先,我们需要准备MySQL数据库的相关信息,包括数据库URL、用户名和密码。例如,如果你的MySQL服务器运行在本地,数据库名为`mydb`,用户为`root`,密码为`...
这涉及到Java命名和目录接口(JNDI),这是Java EE中用于在分布式系统中定位资源的标准方式。 需要注意的是,文档中还提到了一些技术细节和操作步骤,例如在Eclipse Marketplace安装JBossTools、具体操作选择JBoss...
这需要将jbpm4的相关服务迁移到Spring的配置中,让Spring管理事务,从而降低系统的耦合度。 在整合过程中,首先面临的是jbpm4的jpdl插件安装问题。jbpm4的流程定义通常使用JPDL(JBoss Process Definition Language...
JBoss AS 7.1.1 是 Red Hat 公司推出的开源 Java 应用服务器,是基于Java EE 6 平台的企业级中间件。它为开发者提供了在Linux 64位操作系统上运行和管理Java应用程序的框架。下面将详细介绍JBoss AS 7.1.1在Linux 64...
Jboss7上+maven搭建struts2+spring3+hibernate3完整能运行工程源码,在tomcat7上运行也成功测试了,注意:我工程文件是用myeclipse2013开发的,你需要导入自己ide的时候,会有兼容性问题:最好阁下是自己新建一个maven...
Jboss 7 + EJB 3.0 + Eclipse环境配置
总结一下,Linux下安装JBoss 7.1.1涉及的主要步骤包括:检查系统架构,下载安装包,上传到Linux,赋予执行权限,配置环境变量,修改配置文件,以及启动服务。每个步骤都需要细心操作,以确保JBoss能稳定运行。
4. **配置Jboss**: - 在Jboss的`standalone.xml`配置文件中,添加AJP连接器,指定协议为AJP/1.3,scheme为http,socket-binding为ajp。 - 同时,在`socket-binding-group`下配置对应的端口,如4001,确保与Apache...
### JBoss 7.1.1p 配置 MySQL 和 Oracle 数据库以及项目调用方法详解 #### 一、概述 在本篇文章中,我们将详细探讨如何在JBoss 7.1.1p环境中配置MySQL和Oracle数据库,并指导如何通过项目进行调用。通过这一过程,...
【JBOSS+TOMCAT集成开发环境】是一种常见的企业级应用服务器组合,它结合了JBOSS的全面中间件服务和TOMCAT的轻量级Servlet容器特性,为开发者提供了一个高效且灵活的开发与部署平台。在这个“完整版”中,用户可以...
虚拟路径的配置是JBoss中一项非常实用的功能,它允许开发者将实际的文件系统路径映射到一个更易于管理和访问的URL路径上,极大地提升了应用程序的灵活性和可维护性。 #### 一、理解虚拟路径 虚拟路径,顾名思义,...
接下来,你可以创建一个新的Java Web项目,配置相应的框架设置,如Struts的配置文件(struts-config.xml)、Spring的配置文件(applicationContext.xml)和Hibernate的配置文件(hibernate.cfg.xml)。 在实际开发...