【51CTO.com独家特稿】利用EnterprisejJavaBean(EJB),你就能像搭积木一样开发EJB组件,然后你或者是其他人可以把这些EJB组件组装或重新组装到不同的应用中去。例如,你可能创建了一个Customer(顾客)bean(bean就是组件,只是叫法不同),它表示数据库中的一个顾客。这个Customerbbean就能用在多个应用中,比如可以用在审计程序、电子商务购物车系统或技术支持应用中,只要应用中需要表示一个顾客,几乎都可以使用这个组件。实际上,对于某些bean来说,bean的开发人员和使用bean的应用组装人员可能不在同一家公司工作,甚至有可能彼此互不认识。
一、EJB 3架构简介
1、EJB到底是什么?
如果你是一位bean开发人员,可以构建一个Order(订单)bean、Payroll(工资)bean,或者一个ShoppingCart(购物车)bean,这样其他公司的开发人员(可能与你毫无关系)就能向你购买这些组件,并用来建立他们自己的应用。基于组件的开发有一大妙处,这就是:基于组件,可以让代码重用上升到一个新的高度。这里不是重用Java类,而是重用一个更大的功能块。bean要怎么工作通常完全可以从外部进行修改,根本不用动bean内部的Java代码!在这一章中你将了解到,要在服务器上部署一个bean,可以用声明方式配置和定制这个bean(也就是说,通过一个基于XML的部署描述文件),这样只需修改部署描述文件就能改变bean在运行时的表现。
2、EJB容器
EJB容器 EJB容器为开发者提供了维护EJB对象的环境。在面向客户端方面,EJB容器为EJB对象提供了客户端视图和接口,通过特定的传输协议可以实现EJB容器和客户端之间调用EJB对象的过程。在面向设备和资源方面,EJB容器对数据库、邮件服务器、事务服务、消息服务器等各种资源进行管理,使开发者不必或很少需要与这些资源直接发生关系。EJB在提供这些服务时,保证了EJB对象的稳定性,而且通过EJB容器内的一些机制对EJB对象的服务处理进行了优化。 EJB容器结构如图1所示。
 
1 EJB 容器的结构
EJB容器中包含3种EJB组件:实体Bean、会话Bean和消息Bean。 实体Bean的主要作用是维护数据的持久性;会话Bean可以提供实现业务逻辑的方法;消息驱动Bean是基于Java消息技术的EJB对象,可以与JMS程序相配合,实现对消息队列的操作。
3 GlassFish开源服务器简介
2005 年6 月在JavaOne 2005 上,Sun 公司宣布启动GlassFish 项目,不到一年的时间,2006年5月即下一个JavaOne 大会上,GlassFish的第一个版本面世并且JavaEE 5的规范也正式推出。这个应用服务器产品可以在Sun网站通过下载Sun Java System AS9.0 PE获取,也可以在GlassFish社区通过下载GlassFish v1 获取,除了安装程序,两者是相同的。GlassFish v1侧重于Java EE 5规范的实现,一些企业级的特性并没有包含在这一版本中。此应用服务器在Sun发布中被标为PE,就反映了这一点。GlassFish v2加上了所有企业级的特性,并且去除了PE标签, 同一个可执行文件可根据所期望的用途安装成为developer,enterprise或者cluster的profile。GlassFish v2可以在Sun网站通过下载Sun Java System AS 9.1 PE获取,它发布于2007年的9月。
4 GlassFish 的双开源许可
GlassFish 发布在双开源许可下,即在CDDL(通用开发和发布许可)和GPL v2 许可(包含Classpath 例外)下提供。其中CDDL 是早先提供的,GPL v2 是于2007 年新近提供的。
下面对这两类许可分别加以介绍。
1. GPL v2 + CPE
GPL 许可证是自由软件的应用最广泛的软件许可证,GPL v2 是其第2 个版本。GPL 具有“传染”的特点,若某软件中使用了(“使用”指类库引用、修改代码或者衍生代码)GPL 协议的产品,则该软件必须也采用GPL 协议,必须也是开源和免费的。GPL的出发点是遵循GPL 流通的程序不能被非自由的软件使用或合并,体现的是强烈的“追求自由”的理念。
Sun 公司所宣布的Java 开源包括了Java 所有三个平台,即Java SE、Java EE 和Java ME。它们都将在一个公共许可下提供源代码,这个公开许可就是GPL v2。Glassfish 项目作为JavaEE 的官方参考实现,也因此被加上第二个许可GPL v2,以简化GlassFish 代码与其他GPL许可社区的合作过程。Classpath 例外(ClassPath Exception,简称CPE)是由OSI 的GNU/Classpath 项目开发的,具体可参考[url]http://www.gnu.org/software/classpath/license.html[/url]。通过CPE 可以将采用任何许可证提供的应用程序链接到一个库中,成为采用GPL v2 许可证的软件的一部分,而该应用程序本身无需遵循GPL 的要求即采用GPL 许可证的方式提供给公众。如果不使用CPE,采用GPL v2 许可的Java 应用就无法实现以非GPL 许可的方式进行分发。
2. CDDL
CDDL(Common Development and Distribution License,通用开发与销售许可)是GlassFish宣布开源时所支持的开源许可,属于MPL 扩展许可。CDDL 较之GPL 更简单,使捐赠者受到的局限更少,并可重复使用。与GPL 许可证没有明确承认软件专利权不同,CDDL 许可明确承诺把所有相关的专利免费提供给用户。CDDL 许可不要求基于开源程序所开发的新应用开放其代码。CDDL 社区的程序员可以保留其全部的知识产权,而不必开放属于自己的技术或者将技术提供给开源社区。CDDL许可证允许自行变更许可类型,而不会影响使用原授权。CDDL 目前管理着OpenSolaris 和GlassFish 等软件项目。
二 、GlassFish安装
1 安装GlassFish应用程序服务器的先决条件
依次下载如下软件:
Ant 、GlassFish
2 设置JDK
Solairs10在安装完成后会预装JDK的。一般会有两个版本的JDK,一个是1.4.2, 另一个是1.5.0。在solaris10中JDK被安装的总目录是/usr/jdk,在这个目录下具体版本的JDK有其各 自的目录。例如:j2sdk1.4.2_08或者jdk1.5.0_04等。可以用命令ps -ef|grep java来查看java进程是否已经启动。
ps -ef|grep java
Root   878 1 0 18:05:55 ?    0:13 /usr/bin/java -jar /usr/lib/patch/swupna.jar -wait
root   950     1   0 18:09:45 ?           0:18 /usr/jdk/instances/jdk1.5.0/jre/bin/java-Xbootclasspath/a:/usr/jdk/instances/j
root   966   956   0 18:16:48 pts/5       0:00 grep java
3 配置ant
Ant简介:
Ant是纯Java的程序构建工具,它类似于C语言的Make工具。不同的是Ant可以运行在多种操作平台上,满足开发者跨平台构建项目代码的需要。目前Ant工具已经被用于众多的开发项目中,帮助完成不同的项目构建任务。Ant 是一个独立的开发工具,但也可以被其他开发工具集成,目前Ant已经被一些著名的可视化的开发工具所集成,如NetBeansEclipse等。Ant是一个项目开发工具,它为项目的开发设计了一套build模式。Ant 的工作模型是将项目的构建任务分解,它分为工程、目标和任务 3 个层次。工程用来描述处于项目层次的内容,目标由用户来编写,不同的目标对应于用户在使用上的一个操作任务单元,基本的和面向特定行为的操作会由Ant在任务的层次上完成,所有任务都可以被目标调用,在目标内被组合装配起来完成用户自定义的一个过程,实现自动化工作的需要。在 Ant 中的所有设定要素都是遵守 XML规范的,并存储在默认的build.xml文件中。
# gunzip < apache-ant-1.7.0-bin.tar.gz | tar xvf -
# mv apache-ant-1.7.0 /usr
# cd /usr
# ln -s apache-ant-1.7.0 ant
修改环境变量
ANT_HOME=/usr/ant
export ANT_HOME
PATH=$PATH:$ANT_HOME/bin
export PATH
现在我们测试一下,确信Ant已经正确安装好了。在命令行下,输入ant。你应该会看到一条信息,见图2,说Ant无法定位Build.xml文件。这正是我们所期望的,因为我们还要配置和创建项目文件。
 
2 测试一下ant
3 安装GlassFish
glassfish-installer-v2-b58g-ml.jar放到\usr文件夹,进入该文件夹,在命令行输入:
java -Xmx256m -jar glassfish-installer-v2-b58g-ml.jar
在许可协议后选择接受开始解压安装,如图3
 
3 GlassFish许可协议
 
4 GlassFish安装完成界面
生成glassfish文件夹后,进入该文件夹,使用命令:
ant -f setup.xml
 
5 glassfish配置成功界面
#p#
4 启动glassfish
创建domain1
进入glassfishbin目录
asadmin> create-domain --adminport 4848 --adminuser admin --adminpassword 12345678 --domaindir /opt/SUNWappserver/domains/domain1 domain1
Using default port 8,080 for HTTP Instance.
Using default port 7,676 for JMS.
Using default port 3,700 for IIOP.
Using default port 1,043 for HTTP_SSL.
Using default port 1,060 for IIOP_SSL.
Using default port 1,061 for IIOP_MUTUALAUTH.
Domain domain1 created.
启动glassfish命令:
asadmin> start-domain domain1
 
6 glassfish启动成功界面
验证glassfish服务器运行情况:
在浏览器中输入
或者在浏览器中输入
https:/ /localhost:8081/
看到“Your server is up and running!”表示成功!如图7
  
7验证服务器运行情况
5 理解配置文件
Glassfish的配置文件是setup-cluster.xml
主要包括如下选项:
domain.name=domain1
instance.name=server
admin.user=admin
admin.password=adminadmin
admin.port=4848
instance.port=8080
orb.port=3700
imq.port=7676
https.port=8181
master.password=changeit
可以使用XML编辑器修改。
可从 [[url]http://localhost:4848[/url]] 访问管理控制台。
请使用 "asadmin" 命令所使用的同一端口 [4848]。如图10
登录 Application Server Administration Console,地址为 [url]http://localhost:4848[/url]
默认用户名为 admin;默认口令为 adminadmin
  
8 Glassfish访问管理控制台登陆页面
 
9 Glassfish管理界面
#p#
忘记了管理员密码解决方法:
方法一:如果现有的 domain 上并没有你所需要的东西,删除现有的 domain,重新创建一个 domain
asadmin delete-domain domain1
asadmin create-domain --adminport 4848 domain1
从现在开始,记住新建 domain 的密码。
方法二:保留现有的 domain,创建一个临时 domain,再把临时 domain admin-keyfile 拷贝到老 domain 上。
asadmin create-domain --adminport 4848 temp
copy \domains\temp\config\admin-keyfile \domains\domain1\config\admin-keyfile
asadmin delete-domain temp
总结:GlassFish 社区的主页是java.net ([url]www.glassfish.java.net[/url] );文档、邮件列表、论坛和wiki都放置在这里。所有关于GlassFish的构建也在这里提供。
【更多资料请点击】