JBoss是一款非常強大的J2EE應用程序服務器,但是這種強大的功能也帶來了復雜性。本文作者Marcus Zarra分析了如何在JBoss中配置多個數據庫以及數據源。 配置數據源 JBoss的默認安裝過程總共有三種配置選項:所有的(all)、默認的(default)和最小的(minimal)。如果
JBoss是一款非常強大的J2EE應用程序服務器,但是這種強大的功能也帶來了復雜性。本文作者Marcus Zarra分析了如何在JBoss中配置多個數據庫以及數據源。
配置數據源
JBoss的默認安裝過程總共有三種配置選項:所有的(all)、默認的(default)和最小的(minimal)。如果你第一次啟動JBoss服務器的時候沒有附帶任何參數,它自然就運行了默認配置。如果需要運行其它的配置,就必須使用-C參數運行啟動腳本,如下所示:
${JBOSS.ROOT}/bin/run.sh -c minimal
用這種方式啟動JBoss就指示它使用最小的服務器配置代替默認的配置。但是試圖改變JBoss自身的配置的時候,這種技術是非常有用的。你可以在不同的配置中進行修改操作,如果有必要就回滾到默認配置。可是,你在弄混數據源之前,應該把默認配置復制一份,這樣就可以安全地操作該副本了(在本文中,我把自己的副本叫作example,因此在服務器目錄中有四種配置信息:所有的、默認的、最小的和example)。
在JBoss中改變默認數據源的第一步是配置一個新數據源。JBoss中所有的數據庫配置都在你所工作的服務器目錄下的deploy目錄中定義的(在例子中是server/example/deploy)。JBoss使用的默認數據庫是純Java數據庫Hypersonic。這個數據庫的配置信息位於hsqldb-ds.xml文件中。這個XML配置文件描述了如何連接到Hypersonic數據庫。刪除這個文件中的所有注釋之後,我們得到如下所示的配置信息:
<?xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
<jndi-name>DefaultDS</jndi-name>
<connection-url>
jdbc:hsqldb:${jboss.server.data.dir}${/}hypersonic${/}localDB
</connection-url>
<driver-class>org.hsqldb.jdbcDriver</driver-class>
<user-name>sa</user-name>
<password></password>
<min-pool-size>5</min-pool-size>
<max-pool-size>20</max-pool-size>
<idle-timeout-minutes>0</idle-timeout-minutes>
<track-statements/>
<security-domain>HsqlDbRealm</security-domain>
<depends>jboss:service=Hypersonic,database=localDB</depends>
</local-tx-datasource>
<mbean code="org.jboss.jdbc.HypersonicDatabase" name="jboss:service=Hypersonic,database=localDB">
<attribute name="Database">localDB</attribute>
<attribute name="InProcessMode">true</attribute>
</mbean>
</datasources>
這些參數中的大多數與JDBC的參數相似。根(root)下的第一個部分是<local-tx-datasource>。這是你定義數據庫以及如何連接該數據庫的位置:驅動程序、URL、用戶名和密碼。你還定義了連接池中應該有多少個連接。
第二步分包含了兩個有趣的參數: <security-domain>允許你在login-config.xml文件中而不是在數據源配置信息中配置數據庫的用戶名和密碼。 <depends>指定該服務只有在它所依賴的服務啟動後才啟動。該參數允許你
第二步分包含了兩個有趣的參數:
· <security-domain>允許你在login-config.xml文件中而不是在數據源配置信息中配置數據庫的用戶名和密碼。
· <depends>指定該服務只有在它所依賴的服務啟動後才啟動。該參數允許你編寫數據庫應該正確運行的服務。<depends>標簽還指示JBoss根據需要關閉某些數據項。示例中的這個標記表明mbean必須在數據庫啟動之前啟動,在數據庫關閉之後關閉。
在定義好數據源之後,服務器的其它部分就可以使用它了。希望使用這個數據源的任何其它服務或配置都必須使用JNDI名稱來引用它。在示例中,JNDI名稱是DefaultDS。
添加另一個數據源
為了給JBoss添加另一個數據源,你需要建立一個新的配置文件。我希望建立一個數據源,它連接到我本機的MySQL數據庫,並專門使用example數據庫。為了達到這個目標,我建立了一個與前面一個類似的配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
<jndi-name>ExampleDS</jndi-name>
<connection-url>jdbc:mysql://localhost/example</connection-url>
<driver-class>org.gjt.mm.mysql.Driver</driver-class>
<user-name>exampleUser</user-name>
<password>examplePassword</password>
<min-pool-size>5</min-pool-size>
<max-pool-size>20</max-pool-size>
<idle-timeout-minutes>0</idle-timeout-minutes>
<track-statements/>
</local-tx-datasource>
</datasources>
我建立了名為ExampleDS的數據源,它通過JDBC,使用用戶名exampleUser和密碼examplePassword連接到一個MySQL數據庫。我還特別指定連接池最少有5個連接,最多不超過20個連接,並且這些連接不能空閒。接著我把這個文件存儲為deploy目錄中的example-ds.xml(這個文件的名稱並不重要,但是名稱一致是有好處的)。
由於我的新數據源不需要、也不依賴於任何其它的模塊,配置信息中就沒有<depends>標簽。同時,由於我在這個文件中指定了使用數據庫的用戶名和密碼,我也不需要參照安全域(security domain)。 使用新的數據源 現
由於我的新數據源不需要、也不依賴於任何其它的模塊,配置信息中就沒有<depends>標簽。同時,由於我在這個文件中指定了使用數據庫的用戶名和密碼,我也不需要參照安全域(security domain)。