在JEE项目的开发阶段开发人员通常使用的是JBoss开源应用服务器而在生产阶段商业应用服务器BEA WebLogic Server因其增强的特性成为不错的选择遗憾的是在JBoss中开发的应用程序不能在WebLogic Server上直接部署需要进行修改
原因是WebLogic Server的部署描述符与JBoss的部署描述符不同将应用程序迁移到WebLogic上的方法是把特定于供应商的部署描述符转换为WebLogic部署描述符在本文中我们将把一个在JBoss中开发的EJB应用程序迁移到WebLogic应用服务器上其中使用的数据库是MySQL
初步安装
下载和安装BEA WebLogic Server(/frameworkjsp?CNT= &FP=/content/products/weblogic/server)创建一个服务器域下载MySQL JDBC驱动程序jar文件(/products/connector/j/)和MySQL数据库服务器(/products/mysql/)开发一个Java应用程序或获取一个XSLT实用工具使用XSLT把JBoss部署描述符转换为WebLogic部署描述符
在部署描述符转换前在JBoss中开发的应用程序不能在WebLogic中部署在本文中我们将通过转换部署描述符的方法把一个在JBoss中开发的实体EJB应用程序示例迁移到WebLogic应用服务器上
示例应用程序包含一个Catalog实体EJB清单中显示的是该EJB的bean类(CatalogBeanjava)远程接口(Catalogjava)和home接口(CatalogHomejava)显示在清单和清单中把JBoss EJB应用程序部署到WebLogic中并不需要修改实体EJB类只需要修改该EJB的部署描述符
清单CatalogBeanjava
import javaxejb*;
abstract public class CatalogBean implements EntityBean {
private EntityContext ctx;
public CatalogBean() {};
public void setEntityContext(EntityContext ctx) {
thisctx = ctx;
}
public void unsetEntityContext() {
thisctx = 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)
{
}
}
清单Catalogjava
import javarmiRemoteException;
import javaxejb*;
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;
}
清单CatalogHomejava
import javaxejbCreateException;
import javaxejbEJBHome;
import javaxejbFinderException;
import javarmiRemoteException;
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文件(mysqlconnectorjavagabinjar)添加到示例服务器的CLASSPATH变量中WebLogic Server的CLASSPATH变量是在<BEA>\user_projects\domains\mydomain\startWebLogic脚本文件中进行设置的双击该脚本文件启动WebLogic示例服务器服务器在端口启动通过//localhost:/console来登录WebLogic管理控制台(Administration Console)在显示出来的管理控制台登录页面上输入用户名和口令就可以登录到管理控制台
在管理控制台中选择Services>JDBC节点要配置JDBC连接池右击Connection Pools节点选择Configure a new JDBCConnectionPool在Choose database frame displayed中选择MySQL作为Database Type(数据库类型)选择MySQLs Driver (Type )作为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驱动程序commysqljdbcDriver该驱动程序用于建立与MySQL数据库的连接在URL栏指定jdbc:mysql://localhost/test作为连接数据库的URL单击Test Driver Configuration按钮测试JDBC到数据库的连接如果已建立连接会显示内容为connection successful的消息在Create and deploy框中选择将要部署连接池的服务器单击Create and deploy按钮部署JDBC连接池到服务器上配置好的连接会部署到示例服务器上同时该连接池的节点被添加到JDBC>Connection Pools节点中要修改连接池配置选择该连接池节点并修改各个选项卡上的设置GeneralTarget and DeployMonitoringControlTestingConnections
接下来要配置WebLogic Server上的数据源右击Services>JDBC节点选择Configure a new JDBCTxDataSource指定一个数据源名称在JNDI Name栏为数据源指定JNDI名称例如MySQLDS单击Continue按钮继续在Connect to connection pool框中从连接池列表中选择前一节所配置的连接池单击Continue按钮继续在Target the data source框中选择一个服务器作为数据源的目标服务器然后单击Create按钮配置好的数据源会部署到示例服务器上该数据源的节点被添加到数据源节点中要修改数据源选择该数据源的节点并修改各个选项卡上的设置包括ConfigurationTarget和Deploy该数据源可以通过在数据源配置中所指定的JNDI名称MySQLDS来获取
转换JBoss EJB应用程序
前一节已经在WebLogic Server上配置了MySQL数据库下面我们将把JBoss EJB应用程序转换成WebLogic EJB应用程序这涉及到部署描述符的转换JBoss实体EJB应用程序由以下部分组成EJB部署描述符(ejbjarxmljbossxml和jbosscmpjdbcxml)bean类(CatalogBeanjava)远程接口(Catalogjava)和home接口(CatalogHomejava)
要在JBoss服务器上部署实体EJB应该创建一个EJB JAR文件该文件结构如下
METAINF/
ejbjarxml
jbossxml
jbosscmpjdbcxml
CatalogBeanclass
Catalogclass
CatalogHomeclass
部署描述符中指定了EJB的结构化信息和应用程序汇编信息结构化信息中包含将这个EJB指定为会话EJB还是实体EJBejbjarxml部署描述符中的应用程序汇编信息是在assemblydescriptor元素中指定的JBoss中实体EJB的部署描述符为ejbjarxmljbossxml和jbosscmpjdbcxml而WebLogic中对应的部署描述符依次是ejbjarxmlweblogicejbjarxml和weblogiccmprdbmsjarxml下面我们将介绍这些文件间的转换
ejbjarxml部署描述符对于WebLogic和JBoss是相同的清单显示了示例实体EJB的该部署描述符其中定义了一个名为Catalog的实体EJB它包含个CMP字段catalogIdjournal和publisher主键字段是catalogId
清单ejbjarxml
<?xml version=?>
<!DOCTYPE ejbjar PUBLIC
//Sun Microsystems Inc//DTD Enterprise JavaBeans //EN
jar__dtd>
<ejbjar>