有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JBoss 7覆盖JNDI数据源

我有一个SpringWeb应用程序,带有Maven 3和数据源/bean,配置用于h2数据库上的本地开发。为了进行测试,存在JBoss AS 7.1服务器

如果我的应用程序部署在JBoss上,是否可以在一个特殊的JBoss XML文件中重写Bean/DataSource,以便在本地(IDE)事务中使用DriverManager数据源(请参阅第一段代码发布)和JndiObjectFactoryBean(第二段)

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的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) 个答案

  1. # 1 楼答案

    我设法用SVN补丁做到了这一点,它是在自动部署之前添加的。它更改了数据源定义

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

  2. # 2 楼答案

    正如我在配置中看到的那样,应用程序自己创建数据库连接

    您可以在应用服务器上定义数据源,并通过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>  
    
  3. # 3 楼答案

    您的JBoss有一个文件<jboss_home>/standalone/configuration/standalone.xml,如果您不提供其他文件,可以使用该文件

    出于测试目的,您可以尝试在同一目录中复制该文件,例如将其命名为test.xml,并在其中添加数据源定义。然后通过使用standalone.bat server-config=teststandalone.bat -c test启动JBoss来使用它