JBoss 7覆盖JNDI数据源

时间:2014-03-11 13:41:53

标签: java spring deployment jboss

我有一个Spring Web应用程序,其中包含Maven 3和数据源/ Bean,用于在h2数据库上进行本地开发。对于测试,存在JBoss AS 7.1服务器。

是否可以覆盖特殊JBoss XML-File中的Bean / DataSource,以便本地(IDE)使用DriverManagerDataSource(参见第一个代码发布)和JndiObjectFactoryBean(第二个),如果我的应用程序部署在JBoss上?

的applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:context="http://www.springframework.org/schema/context"
   xmlns:tx="http://www.springframework.org/schema/tx" xmlns="http://www.springframework.org/schema/beans"
   xsi:schemaLocation="http://www.springframework.org/schema/beans
<!-- And so on -->">

<!--GENERAL-->
<context:annotation-config/>
<context:component-scan base-package="com.mysuperapp"/>

<!--DATASOURCES-->
<bean id="activitiDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="org.h2.Driver"/>
    <property name="url" value="jdbc:h2:file:h2\activiti;MVCC=TRUE"/>
    <property name="username" value="sa"/>
    <property name="password" value=""/>
</bean>

<bean id="hibernateDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="org.h2.Driver"/>
    <property name="url" value="jdbc:h2:file:h2\hibernate;AUTO_SERVER=TRUE"/>
    <property name="username" value="sa"/>
    <property name="password" value=""/>
</bean>

<!--TXMANAGEMENT-->

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="persistenceUnitName" value="mysuperappPersistenceUnit"/>
    <property name="dataSource" ref="hibernateDataSource"/>
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
    </property>
    <property name="packagesToScan" value="com.mysuperapp.model"/>
    <property name="jpaPropertyMap">
        <map>
            <entry key="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
            <entry key="hibernate.hbm2ddl.auto" value="update"/>
        </map>
    </property>
</bean>

<!-- And so on -->

JBoss的自定义applicationContext.xml数据源

<bean id="activitiDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="java:jboss/datasources/activitiDataSource"/>
</bean>

<bean id="hibernateDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="java:jboss/datasources/hibernateDataSource"/>
</bean>

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

您的应用程序会自行创建数据库连接,我可以在您的配置中看到。

您可以在app-server上定义数据源,然后通过jndi查找获取数据源,而不是这样做。因此,您可以单独为每个系统配置数据库连接。

    <!-- DataSource-LookUp -->
 <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean" scope="singleton">  
    <property name="jndiName" value="java:jboss/datasources/MyDataSourceDS" />  
    <property name="resourceRef" value="true" />  
</bean>  

答案 1 :(得分:0)

您的JBoss有一个文件<jboss_home>/standalone/configuration/standalone.xml,如果您不提供另一个文件,则会使用该文件。

出于测试目的,您可以尝试在同一目录中制作该文件的副本,例如命名为test.xml并在那里添加数据源定义。然后通过使用standalone.bat --server-config=teststandalone.bat -c test

启动JBoss来使用它

答案 2 :(得分:0)

我设法使用SVN补丁执行此操作,该补丁在自动部署之前添加。它会更改DataSource定义。

在使用windows创建补丁并在linux下使用/ usr / bin / patch时应注意(CR + LF问题,将dos2unix文件名应用于补丁和要修补的文件)。