JBoss是一款非常強大的J
EE應用程序服務器
但是這種強大的功能也帶來了復雜性
本文作者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=
encoding=
UTF
?>
<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>
</min
pool
size>
<max
pool
size>
</max
pool
size>
<idle
timeout
minutes>
</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>指定該服務只有在它所依賴的服務啟動後才啟動
該參數允許你編寫數據庫應該正確運行的服務
<depends>標簽還指示JBoss根據需要關閉某些數據項
示例中的這個標記表明mbean必須在數據庫啟動之前啟動
在數據庫關閉之後關閉
在定義好數據源之後
服務器的其它部分就可以使用它了
希望使用這個數據源的任何其它服務或配置都必須使用JNDI名稱來引用它
在示例中
JNDI名稱是DefaultDS
添加另一個數據源 為了給JBoss添加另一個數據源
你需要建立一個新的配置文件
我希望建立一個數據源
它連接到我本機的MySQL數據庫
並專門使用example數據庫
為了達到這個目標
我建立了一個與前面一個類似的配置文件
<?xml version=
encoding=
UTF
?>
<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>
</min
pool
size>
<max
pool
size>
</max
pool
size>
<idle
timeout
minutes>
</idle
timeout
minutes>
<track
statements/>
</local
tx
datasource>
</datasources>
我建立了名為ExampleDS的數據源
它通過JDBC
使用用戶名exampleUser和密碼examplePassword連接到一個MySQL數據庫
我還特別指定連接池最少有
個連接
最多不超過
個連接
並且這些連接不能空閒
接著我把這個文件存儲為deploy目錄中的example
ds
xml(這個文件的名稱並不重要
但是名稱一致是有好處的)
由於我的新數據源不需要
也不依賴於任何其它的模塊
配置信息中就沒有<depends>標簽
同時
由於我在這個文件中指定了使用數據庫的用戶名和密碼
我也不需要參照安全域(security domain)
使用新的數據源 現在我希望把JBoss中的一些服務移動到我的新數據源上
其原因很簡單
盡管Hypersonic是一個良好的數據庫
但是它不應該用於產品環境和/或高容量(high
traffic)系統
MySQL和其它幾個數據庫可以更好地扮演這個角色
Java消息服務 JBoss服務器中使用數據庫的一個最常見的部分是消息服務
服務器的這部分的容量很大
並且應該使用我的新數據源
Deploy/jms目錄中的下面兩個文件定義了消息服務如何使用數據源
· hsqldb
jdbc
state
service
xml
· hsqldb
jdbc
service
xml
首先
我修改了其中一個文件的名稱以突出數據庫的類型
把hsqldb
jdbc
state
service
xml 更名為mysql
jdbc
state
service
xml
我對mysql
jdbc
state
service
xml文件只作了一點點修改
<depends>標簽應該引用新的ExampleDS數據源而不是默認的DefaultDS
這可以確保該數據源在消息服務啟動前啟動了
我還改變了注釋信息
表明我用MySQL數據庫代替了默認的Hypersonic數據庫
下一步
應該刪除並替換hsqldb
jdbc
service
xml文件
由於這個文件定義了消息服務如何使用數據庫
我們必須在該文件中提供特定數據庫的信息
幸運的是
對於大多數通用的數據庫來說
JBoss替我們完成了這項工作
我從${JBOSS
ROOT}/doc/examples/jms檢索到MySQL特定的文件(mysql
jdbc
service
xml)
並把它放到deploy/jms目錄中
我只對該文件作了一個很小的修改
把數據源的名稱改變為ExampleDS
與我在數據源配置文件中指定的JNDI名稱相匹配
最後
為了使消息服務完全轉變
我把conf/login
config
xml文件中的DefaultDS改為ExampleDS
這個設置告訴JBoss
與消息服務相關的登錄信息也使用example數據庫
調度管理器 如果你要使用JBoss的調度管理器和它的數據庫調度程序(scheduler)
你也必須指向新的數據源
該配置文件位於deploy/schedule
manager
service
xml
搜索這個文件中的DefaultDS
找到需要重新配置的mbean
我把該mbean的DataSourceProperty(數據源屬性)指向ExampleDS
替代了指向DefaultDS
請注意
一定要檢查一個SQL語句
以確保使用你的數據庫工作正常
默認的容器控制(Container
Managed)持續性
為了改變默認的維持bean(bean
persistence)的數據庫
你必須更新conf/standardjbosscmp
jdbc
xml文件
把DefaultDS修改為ExampleDS
此外
你還必須更新<type
mapping>標簽以匹配新數據庫
這個標簽的值位於該文件中更深入的地方
對於本文的例子
我把這個值改變為mySQL
你還應該采用相同的方法更新conf/standardjaws
xml文件
把DefaultDS改變為ExampleDS
並更新<type
mapping>標簽
以反映使用的數據庫的類型
包裝 為了確保所有部分都轉換到了新數據源上
請刪除deploy/hsqldb
ds
xml文件並啟動JBoss
如果產生了任何錯誤
就說明你遺漏了某些配置文件
總之
我發現使用內建的Hypersonic數據庫進行開發比管理外部的數據庫帶來的痛苦要少一些
但是在產品環境中
Hypersonic是不適合任務需要的
把JBoss連接到更加牢固的數據庫對於維護服務器的性能大有幫助
From:http://tw.wingwit.com/Article/program/Java/ky/201311/27886.html