把WebLogic EJB程式遷移到JBoss上
WebLogic伺服器是一款頂級的商業應用程式伺服器。但是對於小規模的開發者來說,開發原始碼的、基於標準的應用程式伺服器JBoss是可以用來替換類似WebLogic或WebSphere等商業應用程式伺服器的。不幸的是,在WebLogic中開發的應用程式不能在JBoss中部署。JBoss遷移服務為我們提供了把應用程式遷移到JBoss上的支援。作為代替,透過把廠商特定的部署檔案資訊遷移到JBoss上,是可能把應用程式遷移到JBoss上的。為了演示如何把應用程式遷移到JBoss的過程,我們將把一個在WebLogic中開發的帶有Oracle資料庫的EJB應用程式遷移到帶有MySQL資料庫的JBoss應用程式伺服器上。
預安裝軟體
為了配置MySQL資料庫的JDBC連線,需要下載MySQL資料庫驅動程式類。
1.下載MySQL JDBC驅動程式.jar檔案
2.下載和安裝MySQL資料庫伺服器
3.下載和安裝JBoss 4.0應用程式伺服器
開發一個Java應用程式,我們將使用它和XSLT把WebLogic部署檔案轉換為JBoss部署檔案。該部署檔案也可以使用XSLT工具進行轉換。
概述
在不進行修改的時候,WebLogic中開發的應用程式是不能部署在JBoss中的。JBoss應用程式的部署檔案與WebLogic的部署檔案不同。在本文中,我們將把一個在WebLogic中開發的實體(entity)EJB應用程式示例遷移到JBoss中,遷移的方法是把WebLogic部署檔案轉換為JBoss部署檔案。
示例應用程式包含一個Catalog實體EJB。該EJB的bean類(CatalogBean.java)、遠端介面(Catalog.java)、和home介面(CatalogHome.java)都在本文下載連結的weblogic-jboss-resources.zip示例檔案中。我們將使用MySQL開放原始碼資料庫來配置JBoss應用程式。把WebLogic EJB應用程式部署到JBoss中並不需要修改實體EJB類,只需要修改該EJB的部署檔案。
配置JBoss和MySQL
MySQL是一個開放原始碼的資料庫,它適合於開放原始碼的專案和小型組織。為了配置JBoss和MySQL資料庫需要進行下面一些修改。
配置JBoss類路徑
為了使用JBoss 4.0和MySQL,我們首先要把驅動程式類.jar檔案(mysql-connector-java-3.0.9-stable-bin.jar)複製到<JBoss>/server/default/lib目錄中。其中的<JBoss>是JBoss應用程式伺服器安裝的目錄。lib目錄的.jar和.zip檔案都包含在JBoss伺服器的Classpath(類路徑)中。
配置MySQL資料來源
為了使用MySQL資料來源,需要把<JBoss>/docs/examples/jca/mysql-ds.xml複製到<JBoss>/server/default/deploy目錄中。當JBoss伺服器啟動的時候,deploy目錄中的資料來源配置檔案就被部署好了。依照下面的步驟修改mysql-ds.xml配置檔案:
· 把<driver-class/>設定為com.mysql.jdbc.Driver,<connection-url/>設定為jdbc:mysql://localhost/<database>,其中<database>是MySQL資料庫。<database>的值可以設定為test,它是MySQL中的示例資料庫。
· 在jndi-name元素中指定資料來源的JNDI名稱。
· 指定連線MySQL資料庫的使用者名稱和密碼。在預設情況下,root使用者名稱不需要密碼。
· 把type-mapping元素指定為mySQL。type-mapping元素指定了standardjbosscmp-jdbc.xml部署檔案中預定義的資料庫型別對映關係。對於MySQL資料庫來說,型別對映是mySQL。
修改過的mysql-ds.xml如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
<jndi-name>MySqlDS</jndi-name>
<connection-url>jdbc:mysql://localhost/test</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<user-name>root</user-name>
<password></password>
<metadata>
<type-mapping>mySQL</type-mapping>
</metadata>
</local-tx-datasource>
</datasources>
我們可以透過提供資料來源JNDI名稱從資料來源獲取一個JDBC連線:
InitialContext initialContext = new InitialContext();
javax.sql.DataSource ds = (javax.sql.DataSource)
initialContext.lookup("java:/MySqlDS");
java.sql.Connection conn = ds.getConnection();
配置登入資訊
現在我們根據MySQL資料庫設定來修改login-config.xml配置檔案。為了登入到MySQL資料庫,應用程式策略MySqlDbRealm是必要的。給login-config.xml新增下面的<application-policy/>元素:
<application-policy name = "MySqlDbRealm">
<authentication>
<login-module code =
"org.jboss.resource.security.ConfiguredIdentityLoginModule"
flag = "required">
<module-option name ="principal"></module-option>
<module-option name ="userName">root</module-option>
<module-option name ="password"></module-option>
<module-option name ="managedConnectionFactoryName">
jboss.jca:service=LocalTxCM,name=MySqlDS
</module-option>
</login-module>
</authentication>
</application-policy>
透過修改mysql-ds.xml和login-config.xml檔案,JBoss 4.0伺服器已經被配置好了,可以使用MySQL資料庫了。除了前面的一些特定的設定之外,可能還需要對JBoss部署檔案和JBoss JDBC配置檔案作一些修改。
如果"建立表"選項被選中(透過把jbosscmp-jdbc.xml中的create-table元素設定為true)用於部署CMP實體EJB,並且MySQL表的主鍵(或唯一鍵)的長度超過了500位元組,應用程式的部署過程會在MySQL資料庫中生成一個SQL語法錯誤。對於java.lang.String型別的CMP欄位,我們可以透過在standardjbosscmp-jdbc.xml部署檔案的mySQL型別對映中把用於Java型別java.lang.String的SQL型別設定為較低的VARCHAR值來減小主鍵(或唯一鍵)的長度。另一個可能出現的問題是jbosscmp-jdbc.xml部署檔案中的column-name元素。如果某個MySQL表的列名與MySQL保留字相同,在JBoss中部署J2EE應用程式的時候會產生一個錯誤。解決這個問題的方法是使列名與MySQL保留字不同。
轉換WebLogic EJB應用程式
在建立起使用MySQL的JBoss伺服器之後,你現在必須把該WebLogic EJB應用程式轉換為JBoss EJB應用程式,這就涉及到部署檔案的修改。WebLogic實體EJB應用程式由EJB部署檔案(ejb-jar.xml、weblogic-ejb-jar.xml和weblogic-cmp-rdbms-jar.xml),bean類(CatalogBean.java)、遠端介面(Catalog.java)和home介面(CatalogHome.java)組成。為了在WebLogic伺服器上部署實體EJB,需要建立一個EJB .jar檔案,這個EJB .jar檔案的結構如下:
META-INF/
ejb-jar.xml
weblogic-ejb-jar.xml
weblogic-cmp-rdbms-jar.xml
CatalogBean.class
Catalog.class
CatalogHome.class
EJB的結構資訊和應用程式彙編資訊都在部署檔案中指定。結構資訊包括說明EJB是對話EJB還是實體EJB。ejb-jar.xml部署檔案中的應用程式彙編資訊在assembly-descriptor元素中指定。WebLogic中該實體EJB部署檔案包括ejb-jar.xml、weblogic-ejb-jar.xml和weblogic-cmp-rdbms-jar.xml。相應的JBoss部署檔案是ejb-jar.xml、jboss.xml和jbosscmp-jdbc.xml。這些檔案之間的轉換如下所示。
ejb-jar.xml部署檔案對於WebLogic和JBoss來說都是一樣的,除了multiplicity元素之外。JBoss伺服器的ejb-jar.xml中的multiplicity元素需要大寫,例如One或Many,而不是one或many。
示例實體EJB的ejb-jar.xml部署檔案包含在示例程式碼中。示例ejb-jar.xml定義了一個叫做"Catalog"的實體EJB。這個示例EJB擁有CMP欄位catalogId、journal和publisher。其主鍵欄位是catalogId。
把weblogic-ejb-jar.xml轉換為jboss.xml
weblogic-ejb-jar.xml和jboss.xml部署檔案都是EJB廠商的特定部署檔案。為了把WebLogic EJB應用程式部署到JBoss應用程式伺服器上,必須把weblogic-ejb-jar.xml部署檔案轉換為jboss.xml。
weblogic-ejb-jar.xml中的根元素是weblogic-ejb-jar。jboss.xml中的根元素是jboss。在jboss.xml和weblogic-ejb-jar.xml部署檔案中指定某個EJB的JNDI名稱的元素是jndi-name或local-jndi-name。本文中的示例實體EJB的weblogic-ejb-jar.xml部署檔案也包含在示例程式碼中。weblogic-ejb-jar.xml部署檔案的DOCTYPE元素是:
<!DOCTYPE weblogic-ejb-jar PUBLIC
"-//BEA Systems, Inc.//DTD WebLogic 8.1.0 EJB//EN"
"http://www.bea.com/servers/wls810/dtd/weblogic-ejb-jar.dtd" >
jboss.xml部署檔案的DOCTYPE是:
<!DOCTYPE jboss PUBLIC "-//JBoss//DTD JBOSS 4.0//EN"
"">
我們透過一個自定義的XSLT樣式表jboss.xslt(包含在示例程式碼中)把部署檔案weblogic-ejb-jar.xml轉換為jboss.xml。該樣式表建立jboss.xml,它是與WebLogic的weblogic-ejb-jar.xml部署檔案相當的JBoss檔案。使用jboss.xslt樣式表所生成的jboss.xml檔案也包含在示例程式碼中。
把weblogic-cmp-rdbms-jar.xml轉換為jbosscmp-jdbc.xml
weblogic-cmp-rdbms-jar.xml部署檔案指定了CMP實體EJB的資料庫持續資訊。weblogic-cmp-rdbms-jar.xml檔案包含實體EJB的表名稱、連線到資料庫的資料來源和與該實體EJB CMP欄位對應的列。示例實體EJB的weblogic-cmp-rdbms-jar.xml部署檔案包含在可以下載的.zip檔案中。指定CMP檢視EJB持續資訊的JBoss部署檔案是jbosscmp-jdbc.xml。
weblogic-cmp-rdbms-jar.xml的根元素是weblogic-rdbms-jar;jbosscmp-jdbc.xml的根元素是jbosscmp-jdbc。weblogic-cmp-rdbms-jar.xml檔案中指定連線到資料庫的資料來源的data-source-name元素與jbosscmp-jdbc.xml部署檔案中的datasource元素功能相當。weblogic-cmp-rdbms-jar.xml指定實體EJB CMP欄位與資料庫表的列之間對映關係的field-map元素與jbosscmp-jdbc.xml中的cmp-field元素功能相當。weblogic-cmp-rdbms-jar.xml中指定列名的dbms-column元素與jbosscmp-jdbc.xml中的column-name元素功能相當。weblogic-cmp-rdbms-jar.xml部署檔案的DOCTYPE是:
<!DOCTYPE weblogic-rdbms-jar PUBLIC
'-//BEA Systems, Inc.//DTD WebLogic 8.1.0 EJB RDBMS Persistence//EN'
'http://www.bea.com/servers/wls810/dtd/weblogic-rdbms20-persistence-810.dtd'>
jbosscmp-jdbc.xml的DOCTYPE是:
<!DOCTYPE jbosscmp-jdbc PUBLIC "-//JBoss//DTD JBOSSCMP-JDBC 4.0//EN"
"">
我們使用自定義的XSLT樣式表jbosscmp-jdbc.xslt(包含在示例程式碼中)把部署檔案weblogic-cmp-rdbms-jar.xml轉換為jbosscmp-jdbc.xml。該樣式表建立jbosscmp-jdbc.xml,它是與WebLogic的weblogic-cmp-rdbms-jar.xml部署檔案功能相當的JBoss檔案。jbosscmp-jdbc.xml也包含下載在.zip檔案中。
WebLogic部署檔案的DTD與JBoss部署檔案的不同。使用自定義的XSLT的時候,如果部署檔案中還出現了一些額外的元素,可能還需要做進一步的修改,可以把WebLogic部署檔案轉換為JBoss部署檔案。在下面的部分中,我們將在JBoss伺服器上部署這個EJB應用程式。
在JBoss中部署該EJB應用程式
把WebLogic EJB部署檔案轉換為JBoss部署檔案之後,你必須建立一個心的EJB .jar檔案以部署到JBoss伺服器上。該JBoss .jar檔案的結構如下:
META-INF/
ejb-jar.xml
jboss.xml
jbosscmp-jdbc.xml
CatalogBean.class
Catalog.class
CatalogHome.class
編譯示例EJB類和介面:
java Catalog.java CatalogBean.java CatalogHome.java
把JBoss部署檔案ejb-jar.xml、jboss.xml和jbosscmp-jdbc.xml複製到META-INF目錄中。使用jar工具從JBoss部署檔案、類和介面中建立一個.jar檔案。
jar cf CatalogEJB.jar CatalogBean.class
Catalog.class CatalogHome.class META-INF/*.xml
部署該JBoss實體EJB應用程式的過程是,把該.jar檔案(EntityEJB.jar)複製到<JBoss>serverdefaultdeploy目錄(其中<JBoss>是JBoss安裝的目錄)中。當伺服器啟動的時候,該EJB應用程式就在JBoss伺服器上面部署好了。JBoss應用程式伺服器中的部署(deploy)目錄與WebLogic應用程式伺服器中的應用程式(applications)目錄對應。
結論
透過轉換部署檔案可以把WebLogic中部署的實體EJB應用程式遷移到JBoss應用程式伺服器上。使用相似的步驟,透過把weblogic.xml 部署檔案轉換為jboss-web.xml ,也可以把WebLogic J2EE Web應用程式遷移到JBoss上。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10901326/viewspace-965665/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 將EJB 3應用程式遷移到GlassFish
- 把正式庫的最新資料全部遷移到測試庫上
- 為什麼把 dig 遷移到 wire
- 把表遷移到其他的表空間
- 請問有做過weblogic轉移到jboss案例的朋友嘛?Web
- 訪問jboss上EJB遠端介面問題
- JBoss EJB 3.0 Preview ReleaseView
- 把 SQL Server 遷移到 Linux?不如換成 MySQLServerLinuxMySql
- 把Azure專線從Class模式遷移到ARM模式模式
- uniapp小程式遷移到TSAPP
- 從檔案系統遷移到ASM上ASM
- 遷移到ASMASM
- JBoss中EJB的開發(轉)
- 出海企業的“生意經”,AdTiming把移動廣告聚合平臺遷移到AWS上
- 從websphere6.1遷移到weblogic10.3的問題總結Web
- win10把系統遷移到ssd中的方法【圖文】Win10
- aix 下 oracle 11.2 rac 把資料遷移到新儲存AIOracle
- 從 JBoss v4.x 遷移到 IBM WAS Community Edition v2.xIBMUnity
- aix 下 oracle 11.2 rac 在同一臺機器上把資料遷移到新儲存AIOracle
- svn 遷移到gitGit
- svn遷移到gitGit
- SQLITE 遷移到 MYSQLSQLiteMySql
- 我如何將部落格遷移到 Kubernetes(上)
- 已有的遊戲如何快速穩定遷移到雲上?遊戲
- 【遷移】SqlServer 遷移到 MySQL 方法ServerMySql
- 把檔案系統的資料檔案遷移到ASM儲存ASM
- 都是weblogic和ejb惹的禍Web
- 10種可以遷移到雲的應用程式
- 將應用程式從Sql Server遷移到OracleSQLServerOracle
- JBOSS EAP 5專案遷移至JBOSS EAP 6
- 從Perforce遷移到GitGit
- blog遷移到此
- WSL遷移到其他磁碟
- jboss to weblogic移值說明(原創)Web
- 請教關於jboss與weblogic/websphereWeb
- Jboss7 部署EJB3 簡明教程
- 從Python & Zope到Java with EJB 3 & JBoss SEAMPythonJava
- 求救!weblogic9上的ejb用cluster如何和資料庫連線?Web資料庫