初步安裝
下載和安裝BEA WebLogic Server(www.bea.com/framework.jsp?CNT=overview.htm &FP=/content/PRodUCts/weblogic/server)。創建一個服務器域。下載MySQL JDBC驅動程序jar文件(www.mysql.com/products/connector/j/)和MySQL數據庫服務器(www.mysql.com/products/mysql/)。開發一個java應用程序或獲取一個XSLT實用工具,使用XSLT把JBoss部署描述符轉換為WebLogic部署描述符。
在部署描述符轉換前,在JBoss中開發的應用程序不能在WebLogic中部署。在本文中,我們將通過轉換部署描述符的方法,把一個在JBoss中開發的實體EJB應用程序示例遷移到WebLogic應用服務器上。
示例應用程序包含一個Catalog實體EJB。清單1中顯示的是該EJB的bean類(CatalogBean.java)。遠程接口(Catalog.java)和home接口(CatalogHome.java)顯示在清單2和清單3中。把JBoss EJB應用程序部署到WebLogic中并不需要修改實體EJB類,只需要修改該EJB的部署描述符。
清單1:CatalogBean.java
import javax.ejb.*;abstract public class CatalogBean implements EntityBean { private EntityContext ctx; public CatalogBean() {}; public void setEntityContext(EntityContext ctx) { this.ctx = ctx; } public void unsetEntityContext() { this.ctx = null; } abstract public String getCatalogId(); abstract public void setCatalogId(String catalogId); abstract public String getJournal(); abstract public void setJournal(String journal); abstract public String getPublisher(); abstract public void setPublisher(String publisher); public void ejbActivate() { } public void ejbPassivate() { } public void ejbLoad() { } public void ejbStore() { } public void ejbRemove() throws RemoveException { } public String ejbCreate(String catalogId) throws CreateException { setCatalogId(catalogId); return null; } public void ejbPostCreate(String catalogId) { }}
清單2:Catalog.java
import java.rmi.RemoteException;import javax.ejb.*;public interface Catalog extends EJBObject { public String getCatalogId() throws RemoteException; public String getJournal() throws RemoteException; public String getPublisher() throws RemoteException; public void setJournal(String journal) throws RemoteException; public void setPublisher(String publisher) throws RemoteException;}
清單3:CatalogHome.java
import javax.ejb.CreateException;import javax.ejb.EJBHome;import javax.ejb.FinderException;import java.rmi.RemoteException;public interface CatalogHome extends EJBHome { public Catalog create(String catalogId) throws CreateException, RemoteException; public Catalog findByPrimaryKey(String catalogId) throws FinderException, RemoteException;}
配置WebLogic JDBC
本小節描述在WebLogic Server上配置JDBC連接和MySQL數據庫的方法。首先配置一個JDBC連接池,接下來配置用于訪問JDBC連接池的JNDI數據源,然后把MySQL數據庫驅動程序jar文件(mysql-connector-java-3.0.16-ga-bin.jar)添加到示例服務器的CLASSPATH變量中。WebLogic Server的CLASSPATH變量是在<BEA>/user_projects/domains/mydomain/startWebLogic腳本文件中進行設置的。雙擊該腳本文件,啟動WebLogic示例服務器。服務器在端口7001啟動。通過URL http://localhost:7001/console來登錄WebLogic管理控制臺(Administration Console)。在顯示出來的管理控制臺登錄頁面上輸入用戶名和口令,就可以登錄到管理控制臺。
在管理控制臺中選擇Services>JDBC節點。要配置JDBC連接池,右擊Connection Pools節點,選擇Configure a new JDBCConnectionPool。在Choose database frame displayed中選擇MySQL作為Database Type(數據庫類型),選擇MySQL's Driver (Type 4)作為Database Driver(數據庫驅動程序)。單擊Continue按鈕。接著指定JDBC連接的連接屬性。在Database Name欄指定示例MySQL數據庫的名字test,在Host Name欄指定localhost,在Database User Name欄指定root。用root用戶名登錄MySQL數據庫不需要口令,但WebLogic Server需要為用戶名指定一個口令。單擊Continue按鈕繼續。
在Test database connection框中的Driver Classname欄指定MySQL驅動程序com.mysql.jdbc.Driver,該驅動程序用于建立與MySQL數據庫的連接。在URL欄指定jdbc:mysql://localhost/test作為連接數據庫的URL。單擊Test Driver Configuration按鈕,測試JDBC到數據庫的連接。如果已建立連接,會顯示內容為“connection successful”的消息。在Create and deploy框中,選擇將要部署連接池的服務器。單擊Create and deploy按鈕,部署JDBC連接池到服務器上。配置好的連接會部署到示例服務器上,同時該連接池的節點被添加到JDBC>Connection Pools節點中。要修改連接池配置,選擇該連接池節點,并修改各個選項卡上的設置:General、Target and Deploy、Monitoring、Control、Testing、Connections。
接下來,要配置WebLogic Server上的數據源。右擊Services>JDBC節點,選擇Configure a new JDBCTxDataSource,指定一個數據源名稱,在JNDI Name欄為數據源指定JNDI名稱,例如MySQLDS。單擊Continue按鈕繼續。在Connect to connection pool框中,從連接池列表中選擇前一節所配置的連接池,單擊Continue按鈕繼續。在Target the data source框中選擇一個服務器作為數據源的目標服務器,然后單擊Create按鈕。配置好的數據源會部署到示例服務器上,該數據源的節點被添加到數據源節點中。要修改數據源,選擇該數據源的節點,并修改各個選項卡上的設置,包括Configuration、Target和Deploy。該數據源可以通過在數據源配置中所指定的JNDI名稱MySQLDS來獲取。
轉換JBoss EJB應用程序
前一節已經在WebLogic Server上配置了MySQL數據庫。下面我們將把JBoss EJB應用程序轉換成WebLogic EJB應用程序,這涉及到部署描述符的轉換。JBoss實體EJB應用程序由以下部分組成;EJB部署描述符(ejb-jar.xml、jboss.xml和jbosscmp-jdbc.xml)、bean類(CatalogBean.java)、遠程接口(Catalog.java)和home接口(CatalogHome.java)。
要在JBoss服務器上部署實體EJB,應該創建一個EJB JAR文件。該文件結構如下:
META-INF/ ejb-jar.xml jboss.xml jbosscmp-jdbc.xmlCatalogBean.classCatalog.classCatalogHome.class
部署描述符中指定了EJB的結構化信息和應用程序匯編信息。結構化信息中包含將這個EJB指定為會話EJB還是實體EJB。ejb-jar.xml部署描述符中的應用程序匯編信息是在assembly-descriptor元素中指定的。JBoss中實體EJB的部署描述符為ejb-jar.xml、jboss.xml和jbosscmp-jdbc.xml,而WebLogic中對應的部署描述符依次是ejb-jar.xml、weblogic-ejb-jar.xml和weblogic-cmp-rdbms-jar.xml。下面我們將介紹這些文件間的轉換。
ejb-jar.xml部署描述符對于WebLogic和JBoss是相同的,清單4顯示了示例實體EJB的該部署描述符,其中定義了一個名為Catalog的實體EJB,它包含3個CMP字段:catalogId、journal和publisher,主鍵字段是catalogId。
清單4:ejb-jar.xml
<?xml version="1.0"?><!DOCTYPE ejb-jar PUBLIC"-//Sun Microsystems, Inc.//DTD Enterprise
JavaBeans 2.0//EN""http://java.sun.com/dtd/ejb-jar_2_0.dtd"><ejb-jar> <enterprise-beans> <entity> <ejb-name>Catalog</ejb-name> <home>com.ejb.CatalogHome</home> <remote>com.ejb.Catalog</remote> <ejb-class>com.ejb.CatalogBean</ejb-class> <persistence-type>Container</persistence-type> <prim-key-class>java.lang.String</prim-key-class> <reentrant>False</reentrant> <cmp-version>2.x</cmp-version> <abstract-schema-name>CatalogBean
</abstract-schema-name> <cmp-field> <field-name>catalogId</field-name> </cmp-field> <cmp-field> <field-name>journal</field-name> </cmp-field> <cmp-field> <field-name>publisher</field-name> </cmp-field> <primkey-field>catalogId</primkey-field> </entity> </enterprise-beans></ejb-jar>
從weblogic-ejb-jar.xml到jboss.xml的轉換
weblogic-ejb-jar.xml和jboss.xml是特定于供應商的EJB部署描述符。為了在WebLogic應用服務器上部署JBoss EJB應用程序,要將jboss.xml轉換成weblogic-ejb-jar.xml。jboss.xml中的根元素是jboss,weblogic-ejb-jar.xml中的根元素是weblogic-ejb-jar。對于jboss.xml和weblogic-ejb-jar.xml,都可以在jndi-name或local-jndi-name元素中指定EJB的JNDI名稱。清單5顯示的是示例實體EJB的jboss.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""http://www.jboss.org/j2ee/dtd/jboss_4_0.dtd">
清單5:jboss.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE jboss PUBLIC "-//JBoss//DTD JBOSS 4.0//EN""http://www.jboss.org/j2ee/dtd/jboss_4_0.dtd"><jboss> <enterprise-beans> <entity> <ejb-name>Catalog≪/ejb-name> <jndi-name>com.ejb.CatalogHome≪/jndi-name> </entity> </enterprise-beans></jboss>
使用定制的XSLT樣式表,即weblogic-ejb-jar.xslt(參見清單6),將ejb-jar.xml部署描述符轉換為weblogic-ejb-jar.xml部署描述符。該樣式表創建了weblogic-ejb-jar.xml,它是JBoss上的jboss.xml文件在WebLogic上的等效。清單7中顯示的是weblogic-ejb-jar.xslt樣式表所生成的weblogic-ejb-jar.xml文件。
清單6:weblogic-ejb-jar.xslt
<?xml version="1.0" encoding="UTF-8"?><xsl:stylesheetversion="1.0" xmlns:xsl=
"http://www.w3.org/1999/XSL/Transform"><xsl:output method="xml" doctype-public=
"-//BEA Systems, Inc.//DTD WebLogic 8.1.0 EJB//EN" doctype-system=
"http://www.bea.com/servers/wls810/dtd/weblogic-ejb-jar.dtd"/><xsl:template match="/jboss"><weblogic-ejb-jar><xsl:apply-templates select="enterprise-beans/entity"/></weblogic-ejb-jar></xsl:template><xsl:template match="entity"><weblogic-enterprise-bean> <ejb-name><xsl:value-of select="ejb-name"/></ejb-name> <entity-descriptor> <persistence> <persistence-use> <type-identifier>WebLogic_CMP_RDBMS</type-identifier> <type-version>7.0</type-version> <type-storage>META-INF/
weblogic-cmp-rdbms-jar.xml</type-storage> </persistence-use> </persistence> </entity-descriptor> <jndi-name><xsl:value-of select="jndi-name"/></jndi-name> </weblogic-enterprise-bean></xsl:template></xsl:stylesheet>
清單7:weblogic-ejb-jar.xml
<?xml version="1.0"?><!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" ><weblogic-ejb-jar> <weblogic-enterprise-bean> <ejb-name>Catalog</ejb-name> <entity-descriptor> <persistence> <persistence-use> <type-identifier>WebLogic_CMP_RDBMS</type-identifier> <type-version>7.0</type-version> <type-storage>META-INF/weblogic-cmp
-rdbms-jar.xml</type-storage> </persistence-use> </persistence> </entity-descriptor> <jndi-name>com.ejb.CatalogHome</jndi-name> </weblogic-enterprise-bean></weblogic-ejb-jar>
從jbosscmp-jdbc.xml到weblogic-cmp-rdbms-jar.xml的轉換
weblogic-cmp-rdbms-jar.xml中指定了CMP實體EJB的數據庫持久性信息。該文件包含實體EJB的表格名稱、連接數據庫的數據源和與該EJB CMP字段相對應的列。用于指定CMP實體EJB持久性信息的JBoss部署描述符是jbosscmp-jdbc.xml,清單8顯示了示例EJB的jbosscmp-jdbc.xml。
清單8:jbosscmp-jdbc.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE jbosscmp-jdbc PUBLIC
"-//JBoss//DTD JBOSSCMP-JDBC 4.0//EN""http://www.jboss.org/j2ee/dtd/jbosscmp-jdbc_4_0.dtd"><jbosscmp-jdbc> <defaults> <datasource>java:/MySqlDS</datasource> <datasource-mapping>mySQL</datasource-mapping> </defaults> <enterprise-beans> <entity> <ejb-name>Catalog</ejb-name> <create-table>true</create-table> <table-name>Catalog</table-name> <cmp-field> <field-name>catalogId</field-name> <column-name>catalogId</column-name> </cmp-field> <cmp-field> <field-name>journal</field-name> <column-name>journal</column-name> </cmp-field> <cmp-field> <field-name>publisher</field-name> <column-name>publisher</column-name> </cmp-field> </entity> </enterprise-beans></jbosscmp-jdbc>
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文件中的field-map元素指定了實體EJB CMP字段與數據庫中表的列之間的映射關系,它等效于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""http://www.jboss.org/j2ee/dtd
/jbosscmp-jdbc_4_0.dtd">
使用定制的XSLT樣式表(weblogic-cmp-rdbms-jar.xslt)(參見清單9)進行jbosscmp-jdbc.xml到weblogic-cmp-rdbms-jar.xml的轉換。該樣式表創建了weblogic-cmp-rdbms-jar.xml,它是JBoss上的jbosscmp-jdbc.xml文件在WebLogic上的等效。清單10中顯示的是weblogic-cmp-rdbms-jar.xml。
清單9:weblogic-cmp-rdbms-jar.xslt
<?xml version="1.0" encoding="UTF-8"?><xsl:stylesheetversion="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:output method="xml" doctype-public=
"-//BEA Systems, Inc.//DTD WebLogic 8.1.0 EJB RDBMS Persistence//EN" doctype-system="http://www.bea.com/servers
/wls810/dtd/weblogic-rdbms20-persistence-810.dtd"/><xsl:template match="/jbosscmp-jdbc"><weblogic-rdbms-jar><xsl:apply-templates select="enterprise-beans/entity"/><create-default-dbms-tables>
AlterOrCreate</create-default-dbms-tables></weblogic-rdbms-jar></xsl:template><xsl:template match="entity"><weblogic-rdbms-bean> <ejb-name><xsl:value-of select="ejb-name"/></ejb-name> <data-source-name><xsl:value-of
select="../../defaults/datasource"/></data-source-name> <table-map> <table-name><xsl:value-of select="table-name"/></table-name> <xsl:apply-templates select="cmp-field"/></table-map> </weblogic-rdbms-bean></xsl:template><xsl:template match="cmp-field"><field-map> <cmp-field><xsl:value-of select="field-name"/>
</cmp-field> <dbms-column><xsl:value-of select="column-name"/>
</dbms-column> </field-map></xsl:template></xsl:stylesheet>
清單10:weblogic-cmp-rdbms-jar.xml
<?xml version="1.0"?><!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'><weblogic-rdbms-jar> <weblogic-rdbms-bean> <ejb-name>Catalog</ejb-name> <data-source-name>java:/MySqlDS</data-source-name> <table-map> <table-name>Catalog</table-name> <field-map> <cmp-field>catalogId</cmp-field> <dbms-column>catalogId</dbms-column> </field-map> <field-map> <cmp-field>journal</cmp-field> <dbms-column>journal</dbms-column> </field-map> <field-map> <cmp-field>publisher</cmp-field> <dbms-column>publisher</dbms-column> </field-map> </table-map> </weblogic-rdbms-bean> <create-default-dbms-tables>AlterOrCreate
</create-default-dbms-tables></weblogic-rdbms-jar>
WebLogic部署描述符中的DTD與JBoss部署描述符中的DTD是不同的。借助于XSLT(如果要在部署描述符中表示附加的元素,可以修改定制的XSLT),可以實現從JBoss部署描述符到WebLogic部署描述符的轉換。接下來會將EJB應用程序部署到WebLogic Server上。
在WebLogic上部署EJB應用程序
完成從JBoss EJB部署描述符到WebLogic部署描述符的轉換后,在WebLogic Server上創建一個EJB JAR文件,該文件的結構如下:
META-INF/ ejb-jar.xml weblogic-ejb-jar.xml weblogic-cmp-rdbms-jar.xmlCatalogBean.classCatalog.classCatalogHome.class
編譯示例EJB類和接口。
java Catalog.java CatalogBean.java CatalogHome.java
將WebLogic部署描述符(ejb-jar.xml、weblogic-ejb-jar.xml和weblogic-cmp-rdbms-jar.xml)復制到META-INF目錄下。使用JAR工具(http://java.sun.com/j2se/1.4.2/docs/ tooldocs/windows/jar.Html)從WebLogic部署描述符、類和接口創建一個JAR文件。
jar cf CatalogEJB.jar CatalogBean.class
Catalog.class CatalogHome.class META-INF/*.xml
要部署WebLogic實體EJB應用程序,把JAR文件CatalogEJB.jar復制到<BEA>/user_projects/domains/mydomain/applications下,其中<BEA>是安裝WebLogic Server的目錄。當服務器啟動后,EJB應用程序就部署到WebLogic Server上了。WebLogic Server上的應用程序目錄對應于Jboss應用服務器上的部署目錄。
結束語
通過轉換部署描述符,JBoss上的實體EJB應用程序可以遷移到WebLogic應用服務器上。使用類似的過程,通過將jboss-web.xml部署描述符轉換成weblogic.xml,JBoss J2EE Web應用程序也可以遷移到WebLogic上。
原文出處
Migrating a JBoss EJB Application to WebLogic
http://wldj.sys-con.com/read/117492.htm
(出處:http://www.companysz.com)
新聞熱點
疑難解答