最近在开发一个企业的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>
相关推荐
jboss7.1.1+ejb3.0+MySQL数据源配置,包含项目源码,可直接导入MyEclipse
Jboss7.1.1+eclipse-kepler开发ejb3 使用eclipse4.3即kepler版本来集成jboss tools工具并使用jboss7.1.1来开发ejb3.1
JBoss7.1.1配置指南及管理员手册PDF版本,很清楚,介绍的也很详细
jboss7.1超详细说明,有群的说明 也有jboss7.1独有的”域“说明和详细配置
NULL 博文链接:https://xnbhnly.iteye.com/blog/1547459
Jboss7.1.1linux64位安装包,可用于部署javaweb应用程序
Jboss7上+maven搭建struts2+spring3+hibernate3完整能运行工程源码,在tomcat7上运行也成功测试了,注意:我工程文件是用myeclipse2013开发的,你需要导入自己ide的时候,会有兼容性问题:最好阁下是自己新建一个maven...
这是ejb3.1用jboss7.1.1开发的HelloWorld文档,网上有一个和这个差不多,但是有些错误,这个是修正版的
ejb3.0配置使用jboss7.1.1的数据源
Jboss 7 + EJB 3.0 + Eclipse环境配置
Jboss7 +apache 2.2.25+mod_jk 的配置集群 Jboss7 在windows下还没有看到有这块的文档 所以把写好的放上去和大家一志分享
企业门户网站源代码 所用到的技术:(JSP+MYSQL+TOMCAT/JBOSS+STURTS+SPRING)
linux 下 配置JBoss6.0+JDK7.0
NULL 博文链接:https://guoying252166655.iteye.com/blog/2068704
Jboss7.1.1p配置mysql和oracle以及项目调用参照.pdf
Eclipse+jboss的配置Eclipse+jboss的配置Eclipse+jboss的配置Eclipse+jboss的配置Eclipse+jboss的配置Eclipse+jboss的配置
手把手系列-Eclipse+JBossIDE+JBoss开发环境配置
Jboss配置虚拟路径
JBOSS+TOMCAT集成开发环境。完整版
spring 3.2.0+hibernate 4.1.6+struts2整合需要的jar包 的目录 antlr-2.7.7.jar aopalliance-1.0.jar asm-3.3.jar asm-commons-3.3.jar aspectjweaver-1.5.3.jar bonecp-0.7.1.RELEASE.jar cglib-2.1.3.jar ...