用户: 密码: 答案:   我要注册   忘记密码

加入收藏  设为首页

开发文档

CNJM首页

业界新闻

手机软件

终端应用

资源下载

EclipseME

CNJM论坛

                 

频道列表

J2ME开发 176篇
服务器端开发 33篇
JAVA语言 71篇
游戏与图形 101篇
WindowsMobile开发 6篇
Symbian开发 61篇
Brew开发 36篇
其它开发平台 6篇

热点文章

cookie和session机... 8538次
介绍一篇关于sessi... 8019次
一个可扩展的高速U... 6691次
使用Java实现UBBCo... 6576次
[J2EE新手入门]使...  6536次
JSP安全性初探 6476次
在Win2K+resin中配... 6098次
Apache下 配置WAP ... 5952次
JSP应用程序开发中... 5896次
所有支持WAP手机上... 5757次
J2EE应用性能问题...  5707次
JSP实用篇 5675次

文章搜索

搜 索
按 照
频 道
  
J2EE应用部署(二):实践篇
编辑:SteveQ    审核:rocks    文章来源:CNJM论坛精华
关键词:无    发表日期:2002-07-08 14:10:38    浏览次数:4959次
本文版权归原作者,中国JAVA手机网收录本文的目的是让更多人阅读到此文章。转载请注明出处为中国JAVA手机网<www.cnjm.net>
来自:http://www.cnjm.net/tech/article806.html

本文选自:赛迪网
===================================
提纲:
===================================
一、配置J2EE包
  1.1 企业应用的开发过程
  1.2 J2EE应用包的结构
  1.3 EAR部署描述器
二、一个简单的实例
  2.1 组件
  2.2 装配应用
JAVA手机网[www.cnjm.net]
  2.3 部署和运行应用
三、可选的应用部署描述器标记
===================================
正文:
===================================
一、配置J2EE包
在上一篇文章中,我们了解了J2EE应用封装和部署的一些基本知识,包括类装载器的不同角色和行为。接下来就可以配置和部署企业应用。为此,我们必须了解创建EAR文件的过程,以及应用部署描述器的内容。
JAVA手机网[www.cnjm.net]
1.1 企业应用的开发过程
构造一个企业应用的过程可以归纳为:
JAVA手机网[www.cnjm.net]
构造各个组件,包括EJB、JSP页面、Servlet和资源适配器等。
把这些组件打包成JAR文件格式的J2EE模块,同时提供J2EE模块部署描述器。J2EE模块是一种具有相同类型的一个或者多个J2EE组件的集合,也就是说,一个EJB模块可以包含一个以上的EJB,一个Web应用模块可以包含多个JSP页面和Servlet,一个资源适配器包可以包含多个资源适配器。
结合一个或者多个J2EE模块创建EAR文件,同时提供企业应用部署描述器,构造出J2EE应用。最简单的J2EE应用只包含一个J2EE模块,稍微复杂一点的J2EE应用可以由多个J2EE模块构成,更复杂的J2EE应用可以包含多个J2EE模块、模块里面包含的类所用到的依赖库。J2EE应用还可以包含描述部署过程的帮助文件和其他文档。
把J2EE应用部署到J2EE平台上。安装J2EE应用,然后把它与应用服务器提供的基础设施整合。在J2EE应用部署过程中,每一个J2EE模块按照该类模块的部署要求分别部署,每一个组件被部署到适合该组件类型的合适容器。例如,假设有一个my.ear文件,它包含my.jar和my.war。部署应用时,应用服务器的部署工具将把my.ear文件拷贝到应用服务器;接着,应用服务器的部署机制将提取出my.jar和my.war模块,按照当前平台的类装载要求分别部署这两个模块。如果这两个模块都部署成功,则整个J2EE应用部署成功。
J2EE企业应用开发和部署过程可以图示如下:


组件被封装成J2EE模块时带有一个部署描述器,J2EE模块可以通过部署工具创建。部署工具还可以用来部署和“反部署”独立的J2EE模块,用来把一个或者多个J2EE模块和另外的部署描述器封装成J2EE应用,用来把额外的内容加入J2EE应用或从J2EE应用删除某些内容,或者把整个应用部署到应用服务器上。
1.2 J2EE应用包的结构
J2EE企业应用包的结构很简单,它由一个或多个J2EE模块以及一个META-INF\目录下名为application.xml的部署描述器构成。文件用JAR格式打包,存储在扩展名为.ear的文件中。EAR文件可以包含依赖库,但这是可选的。EAR文件的一般结构是:
EJB .jar文件 Web应用.war文件 资源适配器.rar文件 应用客户端.jar文件 依赖库.jar文件 META-INF\ application.xml

下面是一个EAR文件的例子,它包含一个EJB模块、一个Web应用模块,不包含依赖库:
MyFirstEJB.jar MyFirstWeb.war META-INF\ application.xml

保存在EAR文件中的J2EE模块不一定要在根目录之下。例如,假设一个EAR文件包含一个EJB模块、一个资源适配器包,它的结构可以如下:
ejbs\ MySecondEJB.jar resources\ MyLegacyAdapter.rar META-INF\ application.xml

最后,下面是一个包含许多组件和依赖库的EAR文件:
ejbs\ MyThirdEJB.jar MyFourthEJB.jar resources\ MyLegacyAdapter.rar web\ MyWebApp1.war MyWebApp2.war lib\ Myxmlx.jar Mycommon.jar META-INF\ application.xml

EAR文件可以用部署工具创建,或者也可以改用JDK提供的jar工具创建。创建步骤为:

创建一个用来容纳EAR文件内容的临时目录。
把所有J2EE模块放入临时目录,创建META-INF\目录。
在META-INF\目录下创建application.xml部署描述器。
完成上述步骤之后,进入临时目录,运行jar工具创建EAR文件。

下面是一个运行jar工具的例子,它对前面例子进行打包:
jar cvf MyApplication.ear ejbs resources web lib META-INF

创建好EAR文件之后,我们就可以把J2EE应用部署到应用服务器上。
1.3 EAR部署描述器
理想情况下,我们用图形界面的工具编写application.xml文件。然而,有时我们必须手工构造或维护application.xml文件,因此理解application.xml文件用到的标记很重要。
application.xml部署描述器并不复杂,不需要很多标记就可以构造出一个合法的描述器。部署描述器的DTD定义的标记包括:


所有合法的J2EE应用描述器必须包含如下DOCTYPE声明:
<!DOCTYPE application PUBLIC "-//Sun Microsystems, Inc.//DTD J2EE Application
1.3//EN" "http://java.sun.com/dtd/application_1_3.dtd">

配置一个简单的application.xml部署描述器只需如下几步:
用标记声明一个企业应用。标记可以包含、和标记,供部署工具提供有关应用的描述信息使用。这些标记的内容和EJB、Web应用、资源适配器部署描述器内的同一标记的内容相同。
企业应用内的每一个模块必须有一个相应的标记描述模块。EJB用标记描述,Web应用用标记描述,资源适配器用标记描述,应用客户端程序用标记描述。除了标记之外,其他标记的内容都是指定EAR文件内包含J2EE模块的文件的相对URI,该URI必须相对于EAR文件的根。
如果企业应用包含一个Web应用J2EE模块,则必须提供一个标记和一个标记。标记是一个相对URI,指定EAR文件内包含J2EE模块的文件。这个URI和、、标记的URI同属一类。标记指定Web应用将在其下运行的上下文的名字。所有针对该Web应用内JSP页面和Servlet的请求都必须加上该上下文名字作为前缀。例如,如果部署Web应用时指定了:
<context-root>web1</context-root>

则所有对JSP页面和Servlet的请求必须是如下形式:
http://主机:端口/web1/......
在EAR文件内封装的每一个Web应用都要有一个唯一的值,任何两个Web应用不能有相同的值。如果EAR文件只包含一个Web应用,的值可以是空字符串。
二、一个简单的实例
在大多数使用EAR文件的情形中,企业应用包含一个EJB模块、一个Web应用模块,Web应用要用到EJB模块里面的EJB组件。下面的例子就属于这种情况,EJB和Web应用不需要任何依赖库。下面我们来看看构造这个例子的具体过程。
2.1 组件
在这个例子中,一个Servlet在无状态会话EJB的远程接口上调用invoke()方法,Servlet和EJB输出一些文字信息表明程序已经成功执行。如果控制台出现异常报告,它很可能意味着组件封装存在问题。本例的所有EJB源文件都属于test包,Servlet属于未命名的包。本例用到的Java文件包括:

MyEnterpriseServlet.java:Servlet的实现类,执行对EJB的调用
MyEnterprise.java:EJB的远程接口。
MyEnterpriseHome.java:EJB的Home接口。
MyEnterpriseBean.java::EJB的实现类。

MyEnterpriseBean.java的实现代码是:
package test;
JAVA手机网[www.cnjm.net]
import javax.ejb.*;
public class MyEnterpriseBean implements SessionBean {;
private InitialContext ctx;
public void ejbCreate() {;};
public void ejbRemove() {;};
public void ejbActivate() {;};
public void ejbPassivate() {;};
JAVA手机网[www.cnjm.net]
public void setSessionContext(SessionContext c) {;};
public void invoke() {;
System.out.println("正在执行EJB.");
};
};
JAVA手机网[www.cnjm.net]

MyEnterpriseServlet.java Servlet的实现代码是:

import javax.servlet.*;
JAVA手机网[www.cnjm.net]
import javax.servlet.http.*;
import java.io.*;
import javax.naming.*;
public class MyEnterpriseServlet extends HttpServlet {;
public void service(HttpServletRequest req, HttpServletResponse res)
throws IOException{;
res.setContentType("text/html;charset=GB2312");
PrintWriter out = res.getWriter();
try {;
System.out.println("正在服务器上运行Servlet");
InitialContext ctx = new InitialContext();
test.MyEnterpriseHome eHome = (test.MyEnterpriseHome)
ctx.lookup("MyEnterpriseEJB");
test.MyEnterprise e = eHome.create();
e.invoke();
}; catch(Exception e) {;
out.println("异常: " + e);
System.out.println("异常: " + e);
};
out.println("<html><head><title>测试</title></head>");
out.println("<body>");
JAVA手机网[www.cnjm.net]
out.println("<h1>检查控制台确信EJB已经被调用</h1>");
out.println("</body></html>");
};
};

编写好EJB和相关的部署描述器(此处不列出)之后,接下来要把EJB封装成MyEnterpriseBean.jar文件。在JNDI名称空间配置中,EJB绑定到MyEnterpriseEJB。编写好Servlet代码和相关的部署描述器(此处也不列出)之后,Servlet应该封装成MyWebApp.war文件。
2.2 装配应用
构造好各个组件之后,接下来应该编写企业应用部署描述器。我们必须把EJB和Web应用注册为企业应用的模块,还要让Web应用的组件在/web/上下文之下执行。这样,本例的application.xml文件应该为:
<?xml version="1.0" encoding="UTF-8"?>
JAVA手机网[www.cnjm.net]
<!DOCTYPE application PUBLIC &acute;-//Sun Microsystems, Inc.//DTD J2EE Application
1.3//EN&acute; &acute;http://java.sun.com/dtd/application_1_3.dtd&acute;>
<application>
<display-name>Enterprise Application</display-name>
<module>
<ejb>MyEnterpriseBean.jar
</module>
<module>
<web>
<web-uri>MyWebApp.war</web-uri>
<context-root>web</context-root>
</web>
</module>
</application>

编写好application.xml部署描述器之后,企业应用的目录将包括:
MyEnterpriseBean.jar MyWebApp.war META-INF\ application.xml

用jar工具创建名为MyEnterprise.ear的EAR文件,控制台命令如下:
jar cvf MyEnterprise.ear MyEnterpriseBean.jar MyWebApp.war META-INF

JAVA手机网[www.cnjm.net]
值得一提的是,如果使用J2EE参考实现(Reference Implementation)提供的deploytool,我们不必手工编写ejb-jar.xml、web.xml和application.xml部署描述器,这些文件由deploytool自动生成。在本例的企业应用中,application.xml就是自动生成的。
2.3 部署和运行应用
构造好EAR文件之后,接下来该部署它了。记住,具体的部署操作和平台有关,不同的供应商提供了不同的部署工具。例如,J2EE的deploytool能够把企业应用部署到J2EE参考实现上。
成功地部署好企业应用之后,接下来就可以调用Servlet了。由于该企业应用上下文的根是/web,Servlet作为它的一部分调用。为此,我们在浏览器中输入的地址应该是如下形式:
http://主机:端口/web/myenterpriseservlet/

JAVA手机网[www.cnjm.net]
三、可选的应用部署描述器标记
在某些情形下,有两个可选的部署描述器标记可供使用,它们是和标记。
是的子标记,它的值是一个为模块提供的从EAR文件的根开始的URI,指向另一个部署描述器文件。这个文件的命名不必和它在J2EE模块里面时一样。例如,所有EJB模块的部署描述器必须命名为ejb-jar.xml,但如果标记的值指向一个EJB模块的可选部署描述器,文件就可以取ejb-jar.xml以外的名字。
标记中指定的部署描述器文件将覆盖J2EE模块里面包含的描述器,。标记可以用来引用部署描述器的外部版本,当部署者想要使用的部署描述器与包含在EJB、Web应用、资源适配器或者应用客户端模块内的描述器不同时,就可以使用这个标记。如果不指定标记的值,部署工具将使用EAR文件里面JAR、WAR或RAR文件中提供的值。例如,要为Web应用指定一个外部的可选部署描述器,假设该描述器在EAR文件的根下面,我们指定:
JAVA手机网[www.cnjm.net]
<module>
<web>
<web-uri>web.war</web-uri>
<context-root>web</context-root>
</web>
<alt-dd>external-web.xml</alt-dd>
JAVA手机网[www.cnjm.net]
</module>

标记用来指定应用级的安全角色,这个安全角色将用于EAR文件包含的所有J2EE模块。如果EAR文件包含多个EJB模块或多个Web应用模块,这些模块都可以有自己的安全角色定义。部署者的责任之一是确保所有J2EE模块中包含的所有安全角色都有一个唯一的名字,而且对于应用整体来说具有实际意义。安全角色可以从J2EE模块级“拉出”到企业应用级,加入到标记。也就是说,如果某个J2EE模块中存在一个重复的安全角色值,该值可以删除,只需在企业应用级提供即可。
标记需要一个子标记指定安全角色的名称。下面是一个配置标记的例子:
<security-role>
<description>
Security role of administrator
</description>
<role-name>Administrator</role-name>
</security-role>

在下一篇文章中,我们将了解J2EE应用封装和部署过程中可能遇到的一些问题。

来自:http://www.cnjm.net/tech/article806.html

相关文章
   暂无相关文章
最新评论
网站简介  |  关于版权  |  广告服务  |  网站地图  |  联系我们
Copyright © www.CNJM.net, All rights reserved
中国JAVA手机网 版权所有
ICP备案:京ICP备041452