在J2EE項目的開發階段,開發人員通常使用的是JBoss開源應用服務器。而在生產階段,商業應用服務器BEA WebLogic Server因其增強的特性成為不錯的選擇。遺憾的是,在JBoss中開發的應用程序不能在WebLogic Server上直接部署,需要進行修改。
原因是WebLogic Server的部署描述符與JBoss的部署描述符不同。將應用程序遷移到WebLogic上的方法是把特定于供應商的部署描述符轉換為WebLogic部署描述符。在本文中,我們將把一個在JBoss中開發的EJB應用程序遷移到WebLogic應用服務器上,其中使用的數據庫是MySQL。
初步安裝
下載和安裝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 suclearcase/" target="_blank" >ccessful”的消息。在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.xml
CatalogBean.class
Catalog.class
CatalogHome.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>
原文轉自:http://www.anti-gravitydesign.com