熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

在JBoss中配置多個數據庫和數據源

2013-11-23 20:03:52  來源: Java開源技術 

  JBoss是一款非常強大的JEE應用程序服務器但是這種強大的功能也帶來了復雜性本文作者Marcus Zarra分析了如何在JBoss中配置多個數據庫以及數據源
  
  配置數據源
  JBoss的默認安裝過程總共有三種配置選項所有的(all)默認的(default)和最小的(minimal)如果你第一次啟動JBoss服務器的時候沒有附帶任何參數它自然就運行了默認配置如果需要運行其它的配置就必須使用C參數運行啟動腳本如下所示
  
  ${JBOSSROOT}/bin/runsh c minimal
  
  用這種方式啟動JBoss就指示它使用最小的服務器配置代替默認的配置但是試圖改變JBoss自身的配置的時候這種技術是非常有用的你可以在不同的配置中進行修改操作如果有必要就回滾到默認配置可是你在弄混數據源之前應該把默認配置復制一份這樣就可以安全地操作該副本了(在本文中我把自己的副本叫作example因此在服務器目錄中有四種配置信息所有的默認的最小的和example)
  
  在JBoss中改變默認數據源的第一步是配置一個新數據源JBoss中所有的數據庫配置都在你所工作的服務器目錄下的deploy目錄中定義的(在例子中是server/example/deploy)JBoss使用的默認數據庫是純Java數據庫Hypersonic這個數據庫的配置信息位於hsqldbdsxml文件中這個XML配置文件描述了如何連接到Hypersonic數據庫刪除這個文件中的所有注釋之後我們得到如下所示的配置信息
  
  <?xml version= encoding=UTF?>
  <datasources>
  <localtxdatasource>
  <jndiname>DefaultDS</jndiname>
  <connectionurl>
  jdbc:hsqldb:${jbossserverdatadir}${/}hypersonic${/}localDB
  </connectionurl>
  <driverclass>orghsqldbjdbcDriver</driverclass>
  <username>sa</username>
  <password></password>
  <minpoolsize></minpoolsize>
  <maxpoolsize></maxpoolsize>
  <idletimeoutminutes></idletimeoutminutes>
  <trackstatements/>
  <securitydomain>HsqlDbRealm</securitydomain>
  <depends>jboss:service=Hypersonicdatabase=localDB</depends>
  </localtxdatasource>
  <mbean code=orgjbossjdbcHypersonicDatabase name=jboss:service=Hypersonicdatabase=localDB
  <attribute name=Database>localDB</attribute>
  <attribute name=InProcessMode>true</attribute>
  </mbean>
  </datasources>
  
  這些參數中的大多數與JDBC的參數相似根(root)下的第一個部分是<localtxdatasource>這是你定義數據庫以及如何連接該數據庫的位置驅動程序URL用戶名和密碼你還定義了連接池中應該有多少個連接
  
  第二步分包含了兩個有趣的參數
  
  · <securitydomain>允許你在loginconfigxml文件中而不是在數據源配置信息中配置數據庫的用戶名和密碼
  
  · <depends>指定該服務只有在它所依賴的服務啟動後才啟動該參數允許你編寫數據庫應該正確運行的服務<depends>標簽還指示JBoss根據需要關閉某些數據項示例中的這個標記表明mbean必須在數據庫啟動之前啟動在數據庫關閉之後關閉
  
  在定義好數據源之後服務器的其它部分就可以使用它了希望使用這個數據源的任何其它服務或配置都必須使用JNDI名稱來引用它在示例中JNDI名稱是DefaultDS
  
  添加另一個數據源
  為了給JBoss添加另一個數據源你需要建立一個新的配置文件我希望建立一個數據源它連接到我本機的MySQL數據庫並專門使用example數據庫為了達到這個目標我建立了一個與前面一個類似的配置文件
  
  <?xml version= encoding=UTF?>
  <datasources>
  <localtxdatasource>
  <jndiname>ExampleDS</jndiname>
  <connectionurl>jdbc:mysql://localhost/example</connectionurl>
  <driverclass>orggjtmmmysqlDriver</driverclass>
  <username>exampleUser</username>
  <password>examplePassword</password>
  <minpoolsize></minpoolsize>
  <maxpoolsize></maxpoolsize>
  <idletimeoutminutes></idletimeoutminutes>
  <trackstatements/>
  </localtxdatasource>
  </datasources>
  
  我建立了名為ExampleDS的數據源它通過JDBC使用用戶名exampleUser和密碼examplePassword連接到一個MySQL數據庫我還特別指定連接池最少有個連接最多不超過個連接並且這些連接不能空閒接著我把這個文件存儲為deploy目錄中的exampledsxml(這個文件的名稱並不重要但是名稱一致是有好處的)
  
  由於我的新數據源不需要也不依賴於任何其它的模塊配置信息中就沒有<depends>標簽同時由於我在這個文件中指定了使用數據庫的用戶名和密碼我也不需要參照安全域(security domain)
  
  使用新的數據源
  現在我希望把JBoss中的一些服務移動到我的新數據源上其原因很簡單盡管Hypersonic是一個良好的數據庫但是它不應該用於產品環境和/或高容量(hightraffic)系統MySQL和其它幾個數據庫可以更好地扮演這個角色
  
  Java消息服務
  JBoss服務器中使用數據庫的一個最常見的部分是消息服務服務器的這部分的容量很大並且應該使用我的新數據源Deploy/jms目錄中的下面兩個文件定義了消息服務如何使用數據源
  
  · hsqldbjdbcstateservicexml
  · hsqldbjdbcservicexml
  
  首先我修改了其中一個文件的名稱以突出數據庫的類型把hsqldbjdbcstateservicexml 更名為mysqljdbcstateservicexml我對mysqljdbcstateservicexml文件只作了一點點修改<depends>標簽應該引用新的ExampleDS數據源而不是默認的DefaultDS這可以確保該數據源在消息服務啟動前啟動了我還改變了注釋信息表明我用MySQL數據庫代替了默認的Hypersonic數據庫
  下一步應該刪除並替換hsqldbjdbcservicexml文件由於這個文件定義了消息服務如何使用數據庫我們必須在該文件中提供特定數據庫的信息幸運的是對於大多數通用的數據庫來說JBoss替我們完成了這項工作我從${JBOSSROOT}/doc/examples/jms檢索到MySQL特定的文件(mysqljdbcservicexml)並把它放到deploy/jms目錄中我只對該文件作了一個很小的修改把數據源的名稱改變為ExampleDS與我在數據源配置文件中指定的JNDI名稱相匹配
  
  最後為了使消息服務完全轉變我把conf/loginconfigxml文件中的DefaultDS改為ExampleDS這個設置告訴JBoss與消息服務相關的登錄信息也使用example數據庫
  
  調度管理器
  如果你要使用JBoss的調度管理器和它的數據庫調度程序(scheduler)你也必須指向新的數據源該配置文件位於deploy/schedulemanagerservicexml搜索這個文件中的DefaultDS找到需要重新配置的mbean我把該mbean的DataSourceProperty(數據源屬性)指向ExampleDS替代了指向DefaultDS
  
  請注意一定要檢查一個SQL語句以確保使用你的數據庫工作正常
  
  默認的容器控制(ContainerManaged)持續性
  
  為了改變默認的維持bean(beanpersistence)的數據庫你必須更新conf/standardjbosscmpjdbcxml文件把DefaultDS修改為ExampleDS此外你還必須更新<typemapping>標簽以匹配新數據庫這個標簽的值位於該文件中更深入的地方對於本文的例子我把這個值改變為mySQL
  
  你還應該采用相同的方法更新conf/standardjawsxml文件把DefaultDS改變為ExampleDS並更新<typemapping>標簽以反映使用的數據庫的類型
  
  包裝
  為了確保所有部分都轉換到了新數據源上請刪除deploy/hsqldbdsxml文件並啟動JBoss如果產生了任何錯誤就說明你遺漏了某些配置文件
  
  總之我發現使用內建的Hypersonic數據庫進行開發比管理外部的數據庫帶來的痛苦要少一些但是在產品環境中Hypersonic是不適合任務需要的把JBoss連接到更加牢固的數據庫對於維護服務器的性能大有幫助
From:http://tw.wingwit.com/Article/program/Java/ky/201311/27886.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.