域含有BEA WebLogic Server實例的配置信息。它包含有關服務器、集羣和機器的配置信息。域還含有關於資源,例如Java數據庫連接(Java DataBase Connectivity,JDBC)、連接池、JDBC數據源、連接工廠和Java消息服務(Java Message Service,JMS)隊列等的配置信息。此外,域還包含有關部署在該實例上的應用程序的配置信息。域配置信息保存在config.xml文件中。在本文中,我將評價WebLogic域配置的各種策略。
您可以直接操縱config.xml文件(例如,手動編輯該文件)。但是本文評價的大多數工具將間接操縱config.xml。大多數工具(例如,WebLogic Console)處理Java管理擴展(JMX) Management Bean(MBean)。WebLogic Server實例在config.xml文件中保存Mbean的狀態。
域配置和JMX
config.xml文件含有關於WebLogic Server實例的持久性信息。當WebLogic Server 實例啓動時,WebLogic Server讀取config.xml文件並部署資源和應用程序。資源和應用程序具有相應的MBean。服務器通過這些Mbean接觸配置信息。有許多不同類型的Mbean。在本文中,我主要討論config.xml文件中與條目對應的Mbean。
如果在運行時更改了Mbean的屬性值,新的值將被保存在config.xml文件中,使它成爲持久的值。例如,如果在WebLogic Server Console中修改Mbean的屬性值,該屬性值也將保存在config.xml文件中。因而,在服務器重啓期間,可以利用配置屬性值,因爲配置屬性值持久地保存在config.xml文件中。
下節描述了域創建和配置的的各種方法,並將不同的可用選項分類。
衆多的選項
幸運的是,可以使用很多不同的方法來創建和配置域。最常用的創建域的方法是使用Domain Configuration Wizard(域配置嚮導),而最常用的配置域的方法是使用WebLogic Console。還有許多其他可用的方法,包括:
- 使用域配置嚮導
- 使用域配置模板
- 使用無聲腳本
- 使用WLShell腳本
- 使用WLST腳本
- 直接使用Java編碼和JMX應用程序編程接口(API)
- 使用記號替代法(例如,Bedrock)
- 使用weblogic管理員命令
- 使用wlconfig和wldeploy Ant任務
- 手動編輯config.xml文件
下面是根據配置域所採用的技術將上述選項分類的一種方法:
- 手動:WebLogic Console、Complete Domain Configuration Wizard
- 模板:自定義符號替代腳本(例如,使用Ant)、Bedrock、完全模板、擴展模板
- 腳本:無聲、WLShell、WLST、Ant
- 使用Java編程
將上述選項分類的另一種方法是根據它們是否隨WebLogic平臺一起發佈:
- 包括的(和支持的): WebLogic Console、完全Domain Configuration Wizard、完全模板、 擴展模板、無聲腳本、Ant
- 其他的:WL Shell、WLST、自定義符號替代腳本、Bedrock
還有一種將上述選項分類的方法是:根據服務器在線或者離線時,是否需要修改選項。當服務器的實例正在運行時,進行在線修改。由服務器在線修改JMX Mbean,並保存在config.xml文件中。當服務器正在運行時,建議不要直接修改config.xml文件。
- 在線:WebLogic Console、ANT、WLST
- 離線:完全Domain Configuration Wizard、完全模板、擴展模板、無聲腳本、WLShell、自定義符號替代腳本、Bedrock
爲了舉例說明域配置的各種策略,您將創建一個域,並修改它。
高級目標
使用不同的域創建和配置策略,您將實現下面的目標:請不要立即按照這些步驟做。稍後,我將要求您每次使用不同的策略創建和配置域:
- 創建 WebLogic Workshop 域
- 將服務器的調試級別變爲信息級
- 改變服務器,使能夠對標準輸出(stdout)調試
- 配置一個名爲semJDBCConnectionPool的JDBC連接池
- 配置一個名爲jdbc/semJDBCDataSource的JDBC數據源,其JNDI名稱爲jdbc/semJDBCDataSource
- 配置一個名爲semJMSConnectionFactory的JMS連接工廠
- 配置一個名爲semJMSJDBCStore的JMSJDBCStore
- 配置一個名爲semJMSServer的JMSServer
- 配置一個名爲semJMSJDBCStore的semJMSServe倉庫
- 配置一個名爲PersonQueue的JMS隊列,其JNDI名稱爲jms/PersonQueue
- 部署示例應用程序:SEMApp Enterprise ARchive(EAR)
- 測試應用程序,驗證域配置
對於每一種策略,某些步驟,例如域創建、數據庫配置和驗證配置都是通用的。下面幾節介紹這些步驟。
域創建
利用Domain Configuration Wizard,按照下面這些步驟創建一個WebLogic Workshop域。請不要立即進行這些步驟。稍後,在我詳細解釋不同策略的時候,我會要求您執行這些步驟:
- 啓動Domain Configuration Wizard(例如,在Windows上, 選擇 Start > All Programs > BEA WebLogic Platform > Configuration Wizard)
- 選擇Create a new WebLogic Configuration,並點擊Next
- 選擇Basic WebLogic Workshop Domain,並點擊Next
- 選擇Express,並點擊Next
- 指定User name爲system
- 指定User password並將Confirm user password指定爲password ,並點擊Next
- 選擇Development Mode,並點擊Next
- 指定Configuration Name爲某些有意義的名稱,並點擊Create
- 點擊Done
在您能夠配置域之前,您需要配置數據庫。數據庫配置發生在創建域之後,配置域之前。
數據庫配置
所有示例都使用PointBase作爲數據庫。啓動WebLogic Server的實例(Workshop域的)也啓動了PointBase。在PointBase的實例中,創建用戶、模式(schema)和表。請不要立即進行這些步驟。稍後,在我詳細解釋不同策略的時候,我會要求您執行這些步驟:
- 驗證WebLogic Server的某個實例正在運行
- 啓動PointBase 控制檯(例如,在Windows 上,選擇Start > All Programs > BEA WebLogic Platform > Examples > WebLogic Workshop > PointBase Console)
- 在Connect to the database對話框中,指定下述各項
- 驗證數據庫的URL是:jdbc:pointbase:server://localhost:9093/workshop
- 驗證User是WebLogic
- 指定Password爲WebLogic
- 創建一個新用戶(例如,Ctrl+u),用戶名是sem、密碼也是sem
- 斷開與數據庫的連接(DBA菜單和Disconnect from Database)
- 使用sem作爲User、sem作爲Password連接到數據庫(DBA菜單和Connect to Database或者F3)
- 創建一種模式(例如,Ctrl + h),並命名爲sem
- 複製和粘貼db/sem.sql 的內容到Enter SQL Commands窗口中
- 選擇Execute All toolbar條目
- 驗證sem模式已用表生產
一旦創建了域,就要配置數據庫,並且要用資源和示例應用程序配置該域,需要驗證設置過程。
驗證域配置
要驗證創建和配置的域是否正確,請運行簡單的Junit測試程序。包含的源代碼示例含有一個示例應用程序和一個運行Junit測試的Ant文件。複製sample-build.properties到build.properties中,編輯build.properties中的條目以適合您的環境。build.properties只需要創建一次。一旦您創建並配置了某個域之後,我會要求您調用下面的命令:
ant - v code fact.
如果測試程序成功運行,則應用程序部署正確、資源配置正確。如果有任何異常,並且測試失敗,則應用程序或者資源沒有配置或者部署不正確。仔細檢查並分析棧跟蹤情況,並進行問題調試。
一旦測試程序成功運行,就關閉WebLogic Server實例(例如,域目錄/stopWebLogic.bat或者 sh)。總是利用腳本、而不是激烈的手段(如ctrl+c)來關閉WebLogic Server。
手動快速(Express )配置
利用域創建一節所述的步驟,用SEMDomain-Manual-Express作爲配置名創建一個新域。啓動WebLogic Server實例,利用數據庫配置一節所述的步驟配置數據庫。
在許多不同的項目中,我已經利用WebLogic Server Console成功地完成了多次手動配置。
更改日誌記錄級別
- 確定WebLogic Server正在運行
- 啓動WebLogic Server Console(例如:http://localhost:7001/console)
- 登錄到控制檯
- 選擇Servers / cgServer
- 選擇Logging選項卡
- 複選Debug to Stdout複選框
- 從下拉列表中,選擇Stdout Severity Threshold爲Info
- 選擇Apply
配置連接池
- 確定WebLogic Server正在運行
- 啓動WebLogic Server 控制檯(例如:http://localhost:7001/console)
- 登錄到控制檯
- 選擇Services/JDBC/Connection Pools
- 選擇Configure a new JDBC Connection Pool
- 從Database Type下拉列表中選擇PointBase
- 從Database Driver中,選擇PointBase's Driver (Type 4) Versions: 4.X
- 選擇Continue
- 指定Name爲semJDBCConnectionPool
- 指定Database Name爲workshop
- 指定Host Name爲localhost
- 指定Port爲9093
- 指定Database User Name爲sem
- 指定Password爲sem
- 指定Confirm Password爲sem
- 選擇Continue
- 測試驅動程序配置
- 創建並部署
配置數據源
- 確定WebLogic Server正在運行
- 啓動WebLogic Server 控制檯(例如:http://localhost:7001/console)
- 登錄到控制檯
- 選擇Services / JDBC / Data Sources
- 選擇Configure a new JDBC data Source
- 指定Name爲 jdbc/semJDBCDataSource
- 指定JNDI Name爲jdbc/semJDBCDataSource
- 選擇Emulate Two-Phase Commit for non-XA Driver
- 選擇Continue
- 指定Pool Name爲semJDBCConnectionPool
- 選擇Continue
- 點擊Create,確定數據源的目標
配置JMS連接工廠
- 確定WebLogic Server正在運行
- 啓動WebLogic Server 控制檯(例如:http://localhost:7001/console)
- 登錄到控制檯
- 選擇Services / JMS / Connection Factories
- 選擇Configure a new JMS Connection Factory
- 指定Name爲semJMSConnectionFactory
- 指定JNDI Name爲jms/semJMSConnectionFactory
- 選擇Create
- 作爲目標並在cgServer上部署
- 選擇Configuration選項卡
- 選擇Transactions子選項卡
- 選擇XA Connection Factory Enabled
- 選擇Apply
配置JMS JDBC庫
- 確定WebLogic Server正在運行
- 啓動WebLogic Server控制檯(例如:http://localhost:7001/console)
- 登錄到控制檯
- 在左邊的導航窗格中選擇Services / JMS / Stores
- 選擇Configure a new JMS JDBC Store
- 指定Name爲semJMSJDBCStore
- 選擇Connection Pool爲semJDBCConnectionPool
- 選擇Create
配置JMS服務器
- 確定WebLogic Server正在運行
- 啓動WebLogic Server控制檯(例如:http://localhost:7001/console)
- 登錄到控制檯
- 在左邊的導航窗格中,選擇Services / JMS / Stores
- 選擇Configure a new JMS Server
- 指定Name作爲semJMSServer
- 通過在下拉列表中進行選擇,指定Persistence Store爲semJMSJDBCStore
- 選擇Create
- 將semJMSServer的目標設爲cgServer
配置JMS隊列
- 確定WebLogic Server正在運行
- 啓動WebLogic Server控制檯(例如:http://localhost:7001/console)
- 登錄到控制檯
- 在左邊的導航窗格中,選擇Services/JMS/Servers/semJMSServer /Destinations
- 選擇Configure a new JMS Queue
- 指定Name爲PersonQueue
- 指定JNDI Name爲jms/PersonQueue
- 選擇create
- 選擇Redelivery子選項卡
- 指定Redelivery Limit爲3
- 選擇Apply
現在,您已經完成對應用程序資源的配置。但在部署應用程序之前,您仍需要配置與workshop相關的資源。
配置與workshop相關的資源
- 確定WebLogic Server正在運行
- 啓動WebLogic Server控制檯(例如:http://localhost:7001/console)
- 登錄到控制檯
- 在左邊的導航窗格中,選擇Services/JMS/Servers/semJMSServer/ Destinations
- 選擇Configure a new JMS Queue
- 指定Name爲SEMAppWeb.queue.AsyncDispatcher_error
- 指定JNDI Name爲SEMAppWeb.queue.AsyncDispatcher_error
- 選擇Create
- 選擇Redelivery子選項卡
- 指定Redelivery Limit爲0
- 選擇Apply
- 在左邊的導航窗格中,選擇Services/JMS/Servers/semJMSServer/ Destinations
- 選擇Configure a new JMS Queue
- 指定Name爲SEMAppWeb.queue.AsyncDispatcher
- 指定JNDI Name爲SEMAppWeb.queue.AsyncDispatcher
- 選擇Create
- 選擇Redelivery子選項卡
- 選擇Error Destination爲 SEMAppWeb.queue.AsyncDispatcher_error
- 選擇Apply
現在您已經準備好部署應用程序了。
部署應用程序
- 確定WebLogic Server正在運行
- 啓動WebLogic Server控制檯(例如:http://localhost:7001/console)
- 登錄到控制檯
- 在左邊的導航窗格中,選擇Deployments/Applications
- 選擇Deploy a new Application
- 瀏覽到SEMApp.ear文件的位置
- 選擇SEMApp.ear
- 選擇Continue
- 選擇Deploy
一旦應用程序部署成功,就重啓服務器。按照驗證域配置一節所述運行測試程序。
也存在其他利用Domain Configuration Wizard的手動策略。一個選擇是通過選擇Custom選項(而不是Express)來創建和配置一個全新的域。當嚮導提示您創建資源,例如JDBC Connection Pools時,按照創建和部署資源的步驟執行。另一個選擇是使用Domain Configuration Wizard配置一個已經創建的域。在Domain Configuration Wizard的第1步中,選擇Extend an existing WebLogic configuration。創建上述域的過程留做一個練習。但是使用這些策略並不一定能夠完成所有的配置,例如目的地的Redelivery屬性的配置。
爲了成功地使用手動策略,項目需要保存一個配置指南。該配置指南包含如上所述的逐步指令。但是,手動配置過程冗長乏味而且耗費時間。設置另一個域還需要額外的時間和精力,更重要的是,該過程還易於出錯。微小的配置錯誤,例如,JNDI名稱拼錯,都會導致大量的故障排除和調試工作。
自動化創建和配置域選項應該是首選。Java是功能強大的語言,用Java可以直接操縱Mbean。但這種方法是低層次的方法。還有其他可供選擇的方法,例如模板和腳本。在手動模板中,用標記將config.xml模板化。稍後再用實際值替代標記。手動模板方法要求非常深入、徹底地瞭解config.xml文件。在有些項目中,我曾使用過手動模板。Bedrock是基於Ant的、支持這樣的模板的工具。但是,Bedrock看起來不能有效地維護。另一種重要的模板技術是使用域模板。這種技術不要求深入地瞭解config.xml。模板的創建通過配置模板構建工具得到了很好地支持。下一節討論使用配置模板構建工具通過模板自動配置域的方法。
域模板
當您手動創建域時,您使用了workshop模板。但什麼是模板呢?模板是含有配置信息的Java ARchive(JAR)文件,是config.xml文件的相關片斷。有兩種類型的模板:完全模板和擴展模板。使用完全模板,可以創建一個新的域。上面所用的workshop模板就是完全模板的一個示例。而使用擴展模板,可以擴展一個域。稍後使用的DefaultWebApp模板則是擴展模板的一個示例。
怎樣創建一個模板呢?有一個稱爲配置模板生成器的特殊工具可以幫助完成,無論是完全模板還是擴展模板。創建模板的方法都有兩種。第一種方法是:擴展某一擴展模板。第二種方法是:根據現有的域創建模板。下一節,您將根據現有的域創建一個完全模板。
完全模板
這一節,我將舉例說明根據一個現有的、預先配置的並且工作的域來創建完全模板的方法。按照下述這些步驟創建一個完全模板:
- 啓動配置模板生成器(在Windows上,選擇Start > All Programs > BEA WebLogic Platform > Other Development Tools > Configuration Template Builder)
- 選擇Create a Configuration Template,並點擊Next
- 選擇Basic WebLogic Workshop Domain,並點擊Next
- 選擇一個現有的、預先配置的並且工作的SEM域(例如, SEMDomain-Manual-Express),並點擊Next
- 指定Name爲SEMTemplate- Complete
- 指定Author(例如,Bart)
- 指定Category(例如,SEM)
- 指定Descrīption,並點擊Next
- 點擊後續對話框中的Next,取默認值
- 在Create Template中,爲模板指定一個名稱(例如,SEMTemplate- Complete)、觀察並記住模板JAR文件的位置%BEA_HOME%/user_templates/,並點擊Create
- 點擊Done
現在,根據完全模板創建一個新域。按照下述這些步驟創建一個完全域:
基於完全模板的域創建
- 啓動域配置嚮導(在 Windows上, 選擇 Start > All Programs > BEA WebLogic Platform > Configuration Wizard)
- 選擇Create a new WebLogic Configuration,並點擊Next
- 瀏覽到完全模板(%BEA_HOME%/user_templates)的位置,而不是選擇默認的模板之一
- 選擇SEMTemplate-Complete,並點擊Next
- 點擊後續對話框中的Next,取默認值
- 指定Configuration Name爲某些有意義的內容(例如,SEMDomain-Complete),並點擊Create
- 點擊Done
然而,啓動此域中的WebLogic Server實例失敗。加密的安全憑證衝突。如下手動修改config.xml文件:
修改config.xml
- 將SecurityConfiguration元素的Credential屬性的值修改爲""
- 將EmbeddedLDAP元素的Credential屬性的值修改爲""
- 將cgPool Password屬性的值修改爲“weblogic”
- 將semJDBCConnectionPool Password屬性的值修改爲“sem”
按照驗證域配置一節所述的步驟驗證該域是否工作正常。
另一種重要的模板策略是創建一個擴展模板,例如一個擴展DefaultWebApp模板、並配置所有必需資源的擴展模板。創建該擴展模板、創建一個域,並用擴展模板擴展該域留做練習。
結束語
手動編輯config.xml文件進行域配置是一種容易出錯且危險的方法。而另一種極端的方法——通過編寫Java代碼來配置域則冗長乏味。常用的可供選擇的方法包括使用WebLogic Console、Domain Configuration Wizard來配置域。然而,這兩種可供選擇的方法都是手動的,可能重複性強,並且耗費時間。在探索自動化解決方案時,我評估了模板方法。請留意我的下一篇文章,它將評價腳本策略。我希望本文能幫助您在選擇使域配置自動化的工具和技術時能做到有備無患。