2015年8月6日星期四

EAP_028:Domain Mode下在server-group中定义system property

环境:JBoss EAP 6.4.0

需求是这样的:
(1)在Domain Mode下,定义在server group 1中的server需要访问数据库demoDB1;定义在server group 2中的server需要访问数据库demoDB2。demoDB1和demoDB2只是数据库的schema不同,其它的都一样。
(2)在Domain Mode下,定义在server group 1中的server 由apache httpd 1 做负载均衡;定义在server group 2中的server 由apache httpd 2 做负载均衡。

如果在使用domain.sh启动EAP 时,使用 -Dproperty=value的形式或者--properties=[property_file]的形式固然可以,但这不是一个在生产环境推荐的方法,并且跟客户的需求有一点出入——客户是希望根据不同的server-group定义不同的环境变量。

以数据库为例说明:

1. 修改domain.xml,找到server-groups,修改如下:
 <server-groups>
        <server-group name="main-server-group" profile="full">
            <jvm name="default">
                <heap size="1000m" max-size="1000m"/>
                <permgen max-size="256m"/>
            </jvm>
            <socket-binding-group ref="full-sockets"/>
            <system-properties>
                <property name="fullprofile.derbydb.name" value="demoDB1"/>
            </system-properties>
        </server-group>
        <server-group name="other-server-group" profile="full-ha">
            <jvm name="default">
                <heap size="1000m" max-size="1000m"/>
                <permgen max-size="256m"/>
            </jvm>
            <socket-binding-group ref="full-ha-sockets"/>
            <system-properties>
                <property name="fullhaprofile.derbydb.name" value="demoDB2"/>
            </system-properties>
        </server-group>
    </server-groups>

注意,这里在main-server-group profile="full" 中定义了环境变量fullhaprofile.derbydb.name,值为demoDB1;在other-server-group profile="full-ha" 中定义了环境变量fullhaprofile.derbydb.name,值为demoDB2;

2.  在full profile中,增加DemoDataSource1的定义,其中connection url部分引用了环境变量${fullprofile.derbydb.name:demoDBXXX}

<datasource jndi-name="java:jboss/datasources/DemoDataSource1" pool-name="DemoDataSource1" enabled="true" use-ccm="false">
                        <connection-url>jdbc:derby://localhost:1527/${fullprofile.derbydb.name:demoDBXXX}</connection-url>
                        <driver>org.apache.derby</driver>
                        <security>
                            <user-name>demo</user-name>
                            <password>demo</password>
                        </security>
                        <validation>
                            <validate-on-match>false</validate-on-match>
                            <background-validation>false</background-validation>
                        </validation>
                        <statement>
                            <share-prepared-statements>false</share-prepared-statements>
                        </statement>
                    </datasource>

为了测试起见,demoDBXXX实际是不存在的数据库schema,这样如果环境变量没有引用成功会报错。

3.  在full-ha profile中,增加DemoDataSource2的定义,其中connection url部分引用了环境变量${fullhaprofile.derbydb.name:demoDBXXX}

<datasource jndi-name="java:jboss/datasources/DemoDataSource2" pool-name="DemoDataSource2" enabled="true" use-ccm="false">
                        <connection-url>jdbc:derby://localhost:1527/${fullhaprofile.derbydb.name:demoDBXXX}</connection-url>
                        <driver>org.apache.derby</driver>
                        <security>
                            <user-name>demo</user-name>
                            <password>demo</password>
                        </security>
                        <validation>
                            <validate-on-match>false</validate-on-match>
                            <background-validation>false</background-validation>
                        </validation>
                        <statement>
                            <share-prepared-statements>false</share-prepared-statements>
                        </statement>
                    </datasource>

为了测试起见,demoDBXXX实际是不存在的数据库schema,这样如果环境变量没有引用成功会报错。

4.  分别启动 machine1、 machine2、 machine3,在management Console中测试两个数据库连接。
确认两个数据库依然可以连接成功。 

没有评论: