EJB3.0开发环境的搭建

EJB Container的介绍
SUN公司正式推出了EJB的规范之后,在众多的公司和开发者中引起了非常大的反响。标志着用Java开发企业级应用系统将变的非常easy。很多公司都已经推出了或正打算EJB的产品。

SUN公司对EJB的定义是:EJB是用于开发和部署多层结构的、分布式的、面向对象的Java 应用系统的跨平台的构件体系结构。採用EJB能够使开发商业应用系统变得easy,应用系统能够在一个支持EJB的环境中开发,开发完之后部署在其它的环境中,随着需求的改变,应用系统能够不加改动地迁移到其它功能更强、更复杂的server上。

在EJB的规范中,提到了6中角色,包含 Bean提供者,应用程序装配者,EJB容器,EJB配置工具,EJB服务提供者,系统管理员。这里面,EJB容器是EJB之所以可以执行的核心。EJB 容器管理着EJB的创建,撤消,激活,去活,与数据库的连接等等重要的核心工作。

EJB规范的出现对电子商务发展起了非常大的推动作用。如今大型的电子商务站点,都是採用EJB技术的应用server来构建的。如今应用比較广泛的,支持EJB的应用server中,已经产品化了的最基本的是: IBM的WebSphere,BEA的WebLogic另外,还有开源的如JBoss。

IBM WebSphere应用server是一个完好的,开放的Web应用server。它是IBM e-business应用架构的核心。WebSphere 应用server 提供三个等级的版本号,他们是:标准版(Standard Edition),高级版(Advanced Edition),企业版(Enterprise Edition)。当中,在高级版中開始支持EJB的编程模型。在企业版中提供一个高可靠的解决方式,使其可以移植到关键性的企业环境。EJB是WebSphere最核心的对象技术之中的一个,它提供了具有交易功能的server端的Java 组件,同一时候又是一种新型的对象分布技术编程模型。使用EJB组件完毕的应用,会支持更高级的基于数据库的交易处理功能,如多个数据库之间的更新,两阶段提交等。WebSphere是IBM整个一套开发,应用server的套件。他把EJB和IBM其他的优秀的产品(TXSerise 和Component Broker)结合在了一起。在详细的应用中,基于安全的考虑,性能考虑和系统管理考虑,还可以添加Firewall,WebShpere Performance Pack 和 Tivoli。所以,可能IBM的EJB Container不一定是最好的,可是,WebSphere中的EJB和IBM其他产品的结合却是做的最好的。然后,我们再来看看BEA的WebLogic: BEA公司宣布:该公司领先实现了对Enterprise JavaBeans(EJB)2.0标准的支持。凭借BEA WebLogic Server对EJB的支持,BEA可帮助开发者更快地推出电子商务应用系统,从而让开发者极大地受益于这一业内最新标准。作为server端商务逻辑的行业标准和Java2平台的基石,Enterprirse JavaBeans是BEA WebLogic应用server的主要技术。Enterprise JavaBeans使得开发者可以专心地开发其应用系统和电子商务设想的商务逻辑,而不必为基础结构的构筑而分心。

尽管EJB3.0刚刚公布,但已经有非常多EJBserver支持EJB3.0了,这当中跟得最紧的是JBoss,其次WebLogic、WebSphere等也随之跟进。因此,各大厂商还是对EJB3.0非常看好的。

EJ3.0的开发工具
1>下载安装JDK5.0 http://java.sun.com/j2se/1.5.0/download.jsp

2>下载安装开发工具JBossIDE(内含Eclipse 3.2),直接解压缩就可以完毕安装。

http://prdownloads.sourceforge.net/jboss/JBossIDE-2.0.0.Beta2-Bundle-win32.zip?download想使用中文的朋友能够下载中文语言包NLpack1-eclipse-SDK-3.2-win32.zip

下载路径:

http://www.eclipse.org/downloads/download.php?file=/eclipse/downloads/drops/L-3.2_Language_Packs-200607121700/NLpack1-eclipse-SDK-3.2-win32.zip

解压语言包,把features及plugins目录拷贝复盖JBossIDE安装目录下的features及plugins目录。假设汉化失败,可能是你安装语言包之前执行过eclipse,解决的方法是:把eclipse安装目录下的configuration目录删除,从JBossIDE安装包中解压出configuration目录,把configuration目录复制到JBossIDE安装目录下。

3>下载和安装JBOSS-4.0.5.GAserver

http://prdownloads.sourceforge.net/jboss/jems-installer-1.2.0.CR1.jar?download文件下载,这里要注意:最好不要用下载工具下载,直接通过”目标另存为”下载。

安装方法:

双击jems-installer-1.2.0.CR1.jar文件,或者在DOS命令下运行:

java -jar G:/soft/jems-installer-1.2.0.CR1.jar,G:/soft为Jboss安装文件所在文件夹

安装界面例如以下:


图4-1安装初始界面

这一步是让你选择安装语言,以后点“Next”并允许许可协议,直到选择安装文件夹(例如以下图)。

图4-2选择安装文件夹界面

建议不要安装在Program Files文件夹,否则一些应用会导致莫名的错误。

图4-3安装提示界面

跟着选择一个安装类型,本文选择带集群功能的安装选项“ejb3-clustered”,例如以下图

图4-4选择ejb3-clustered界面

点下一步,选择advance

图4-5选择Advance界面

在Name输入栏中输入 all

图4-6输入all界面

点下一步,直到出现下图:

图4-7输入password界面

四个选框都选上。点下一步就開始安装了。

安装完后请在“系统变量”里加入JBOSS_HOME 变量,值为Jboss的安装路径。例如以下图

图4-8设置系统变量界面

如今验证安装是否成功。在Dos命令窗体下运行:

C:/javaserver/jboss-4.0.5.GA/bin run -c all

这个命令用作启动jboss

观察控制台有没有Java的例外抛出。假设没有例外并看到下图,恭喜你,成功安装了。

图4-9正常启动界面

你能够输入http://localhost:8080来到Jboss的欢迎主页。在JBoss Management 栏中点击”JMX Console”进入Jboss的管理界面,这里须要你输入username及password,假设你在安装的时候依照教程设置了Jboss管理台username及password,那么username及password都是admin。

假设启动jboss出现例外,先看看jboss所用port有没有被占(如1099,1098 ,8080, 8083等port)。能够下载port查看器(Active Ports)进行检查,假设port被占用就关闭此进程。确定不是port被占用,那非常大可能是你的安装JDK不对。

图4-10JBOSS控制台界面

输入username和password

这样server就成功安装了。

图4-11 JBOSS控制台界面

4.3JOBSSserver
4.3.1JOBSS安装文件夹
表4-1JBOSS安装文件夹

JBoss中的部署
JBoss中的部署过程很的简单、直接。在每个配置中,JBoss不断的扫描一个特殊文件夹的变化:

[jboss安装文件夹]/server/config-name/deploy

此文件夹一般被称为“部署文件夹”。

你能够把下列文件复制到此文件夹下:

* 不论什么jar库(当中的类将被自己主动加入到JBoss的classpath中)

* EJB JAR

* WAR (Web Appliction aRrchive)

* EAR (Enterprise Application aRchive)

* 包括JBoss MBean定义的XML文件

* 一个包括EJB JAR、WAR或者EAR的解压缩内容,并以.jar、.war或者.ear结尾的文件夹。要又一次部署不论什么上述文件(JAR、WAR、EAR、XML等),用新版本号的文件覆盖曾经的就能够了。JBoss会依据比較文件的时间发现改变,然后部署新的文件。要又一次部署一个文件夹,更新他的改动时间就可以。

怎样进行EJB打包
要公布EJB时必须把她打成jar或ear包,打包的方式有非常多,如:jar命令行、集成开发环境的打包向导和Ant

任务。以下介绍Elispse打包向导和Ant打包任务。

1. Elispse打包向导

在Elispse开发环境下,能够通过向导进行打包。右击项目名称,在跳出的菜单中选择“导出”,在“导出”对话框选择“Jar文件”,在“选择要导出的资源”时,选择源文件夹和用到的资源。然后选择一个存放文件夹及文件名称。点“完毕”就结束了打包。

2. Ant打包任务

採用Ant进行打包是比較方便的,也是作者推荐的打包方式。以下我们看一个简单的打包任务。

<?xml version="1.0"?>

<project name="jartest" default="jar" basedir=".">

<property name="build.dir" value="/build" />

<property name="build.classes.dir" value="/classes" />

<target name="jar" description="打包成Jar">

<jar jarfile="/ejbfile.jar">

<fileset dir="">

<include name="**/*.

</jar>

</target>

</project>

上面建立了一个名为jartest的Ant项目,默认的任务为default="jar",项目的路径为build.xml文件所在文件夹

basedir="." 。应用编绎过后的class文件已经存在于应用的/build/classes/文件夹下。Ant定义了一个属性

“build.classes.dir”,他指向应用的/build/classes/文件夹。

<target name="jar" description="打包成Jar">定义了一个名叫jar的任务,description是描写叙述信息。任务中使用jar

命令把/build/classes/文件夹下的全部class文件打包进jar文件,同一时候也把应用下的META-INF文件夹下的全部文件打

包进jar文件的META-INF文件夹。打包后的jar文件存放在应用文件夹下。文件名称为:ejbfile.jar

4.3.4怎样进行WEB应用打包
一个Web应用公布到Jbossserver时须要打成war包。本节将介绍jar命令行及Ant任务两种war文件的打包方

式。

1.在命令行下用jar命令进行war文件打包

在打包前把文件存成下面结构:

WEB应用根文件夹

| -- **/*. jsp

| -- WEB-INF

| -- web.xml

| -- lib

| -- *.*

| -- classes

| -- **/*.class

在Dos窗体中进入到WEB应用根文件夹下,运行例如以下命令

jar cvf EJBTest.war *

此命令把WEB应用根文件夹下的全部文件及文件夹打包成EJBTest.war文件

比如WEB应用根文件夹在: D:/java/webapp/ ,命令输入例如以下:

D:/java/webapp> jar cvf EJBTest.war *

2.在Ant任务中进行war文件打包

假设文件存放的结构如以下所看到的:

WEB应用根文件夹

|-- build.xml

|--**/*.jsp

|-- WEB-INF

| -- web.xml

| -- lib

| -- *.*

| -- classes

| -- **/*.class

那么Ant的war文件打包任务例如以下:

<?xml version="1.0"?>

<project name="wartest" default="war" basedir=".">

<target name="war" description="创建WEB公布包">

<war warfile="/EJBTest.war" webxml="/WEB-INF/web.xml">

<fileset dir="">

<include name="**"/>

<exclude name="build.xml" />

<exclude name="/WEB-INF/web.xml" />

</fileset>

</war>

</target>

</project>

<target name="war" description="创建WEB公布包"> 定义一个名叫war的任务。任务中运行war打包操作,把应用下除了build.xml, /WEB-INF/web.xml之外的全部目录及文件打进war包,同一时候把webxml="/WEB-INF/web.xml"作为web应用的web.xml文件。

开发第一个HelloWorld EJB3.0程序
第一步:创建HelloWorldproject,在这里我们选择Java Project

图4-12 选择Java Project界面

在以下的窗体里输入project名

图4-13 输入project名界面

点击next直到结束,并为此project加入ejb3.0jar包,例如以下图所看到的: 这些类包都能够在jboss安装目录的client,/server/all/deploy/jboss-aop-jdk50.deployer,/server/all/deploy/ejb3.deployer,/lib/endorsed等目录下找到,或者在本书附带的光盘源码的Lib目录下得到。

图4-14 加入EJB3.0jar包界面

第二步:要定义一个会话Bean,首先须要定义一个包括他全部业务方法的接口。这个接口不须要不论什么凝视,就像普通的java接口那样定义。调用EJB的client通过使用这个接口引用从EJB容器得到的会话Bean对象stub。接口的定义例如以下:

IHelloWorld.java:

package lesson2;

public interface IHelloWorld {

String sayHello(String name);

}

第三步:实现上面的接口并增加两个凝视@Stateless , @Remote,第一个凝视定义这是一个无状态会话Bean,第二个凝视指明这个无状态Bean的remote接口。

经过上面的步骤一个仅仅存在Remote接口的无状态会话Bean就开发完毕。无状态会话Bean是一个简单的POJO(纯粹的面向对象思想的java对象),EJB3.0容器自己主动地实例化及管理这个Bean。以下是HelloWorld会话Bean的实现代码:

HelloWorldBean.java 。实现类的命名规则是:接口+Bean ,如: HelloWorldBean

package lesson2;

import javax.ejb.Remote;

import javax.ejb.Stateless;

@Stateless

@Remote ({IHelloWorld.class})

public class HelloWorldBean implements IHelloWorld {

public String sayHello(String name) {

return name+"hello ,this is my first EJB";

}

}

HelloWorld会话Bean开发完了,如今我们把她她打成Jar包或EAR包公布到Jboss中。

鼠标右键点击project,在弹出的菜单中选择Export,弹出的窗体例如以下:选择Jar file。

图4-15 打成jar包界面

点击next在以下的窗体中选择jar文件的存放路径。

图4-16 选择部署路径界面

打完包后,启动Jboss,把公布包复制到[jboss安装文件夹]/server/all/deploy/文件夹下。观察Jboss控制台输出,假设没有抛出例外并看到以下的输出界面,公布就算成功了。

图4-17 部署成功界面

一旦公布成功,你就能够在jboss 的管理平台查看她们的JNDI名,输入以下URL

http://localhost:8080/jmx-console/点击service=JNDIView,查看EJB的JNDI名称。(例如以下图)

图4-18 选择JNDIView界面

在出现的页面中,找到“List of MBean operations:”栏。点击”Invoke”button

图4-19 点击Invoke界面

出现例如以下界面:

图4-20 查找JNDI Name界面

在上图中能够看见HelloWorld会话Bean的JNDI名,JNDI名的组成规则是“上层名称/下层名称“,每层之间以”/”分隔。HelloWorld会话Bean的JNDI名是:HelloWorldBean/remote 。

HelloWorld会话Bean公布成功后,接下来介绍client怎样訪问她。

当一个无状态会话Bean公布到EJB容器时,容器就会为她创建一个对象stub,并把她注冊进容器的JNDI文件夹,client代码使用她的JNDI名从容器获得他的stub。通过这个stub,client能够调用她的业务方法。

新建一个web project,命名为:EJBTest


图4-21 选择 Web Project界面

project创建完成后,创建一个jsp样例代码例如以下:

Test.jsp:

<%@ page contentType="text/html; charset=GBK"%>

<%@ page import="lesson2.IHelloWorld, javax.naming.*, java.util.Properties"%>

<%

Properties props = new Properties();

props.setProperty("java.naming.factory.initial",

"org.jnp.interfaces.NamingContextFactory");

props.setProperty("java.naming.provider.url", "localhost:1099");

props.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming");

InitialContext ctx;

try {

ctx = new InitialContext(props);

IHelloWorld helloworld =

(IHelloWorld) ctx.lookup("HelloWorldBean/remote");

out.println(helloworld.sayHello("lxl"));

} catch (NamingException e) {

out.println(e.getMessage());

}

%>

把上面的client应用打成war文件。

图4-22 选择部署路径界面

然后把她复制到“[jboss安装文件夹]/server/all/deploy”文件夹下。假设war文件的文件名称为 EJBTest.war ,我们能够通过http://localhost:8080/EJBTest/Test.jsp訪问client。执行结果例如以下图:

图4-23执行结果界面

在这里作者要重点说明一下EJB JNDI名称默认的命名规则,命名规则例如以下:

1> 假设EJB打包进后缀为*.ear的J2EE公布文件,默认的JNDI 名称是

訪问本地接口:EAR-FILE-BASE-NAME/EJB-CLASS-NAME/local

訪问远程接口:EAR-FILE-BASE-NAME/EJB-CLASS-NAME/remote

例:EJB HelloWorld打包进名为HelloWorld.ear的J2EE应用,訪问她远程接口的JNDI 名是:

HelloWorld/HelloWorldBean/remote

2> 假设EJB应用打包成后缀为*.jar的公布文件, 默认的JNDI 名称是

訪问本地接口:EJB-CLASS-NAME/local

訪问远程接口:EJB-CLASS-NAME/remote

例: HelloWorld应用打包成HelloWorld.jar文件,訪问她远程接口的JNDI名称是:HelloWorldBean/remote

另外有一点要注意:EJB-CLASS-NAME 是不带包名的,如com.foshanshop.ejb3.impl.HelloWorldBean仅仅需取

HelloWorldBean。

EJB3.0远程调用
在正式的生产环境下,大部分调用EJB的client所在的server都为独立的Tomcat或Resin 。以下介绍怎样在

独立的Tomcatserver中调用Jboss中的EJB。在独立的Tomcatserver中调用EJB须要有下面步骤:

1> 依据应用的须要,把调用EJB所依赖的Jar包复制到tomcat下的/shared/lib文件夹或WEB应用的

WEB-INF/lib下,所依赖的Jar一般在jboss安装文件夹的client,/server/all/deploy/jboss-aop-jdk50.deployer,

/server/all/deploy/ejb3.deployer,/lib/endorsed等目录下。

以下的jar文件是必需的:

[jboss安装文件夹]/client/jbossall-client.jar

[jboss安装文件夹]/client/jboss-remoting.jar

[jboss安装文件夹]/client/jboss-aop-jdk50-client.jar

[jboss安装文件夹]/client/jboss-aspect-jdk50-client.jar

[jboss安装文件夹]/client/jboss-ejb3-client.jar

[jboss安装文件夹]/client/jboss-ejb3x.jar

[jboss安装文件夹]/client/jboss-annotations-ejb3.jar

2> 把调用的EJB接口复制到应用的/WEB-INF/classes/文件夹下,假设有包名,须要把包和类一起拷过来。

注意,在部署web应用的server上,假设安装的是Tomcatserver,它的安装路径不能出现空格,如:D:/Tomcat5.0不能象D:/Tomcat 5.0这样带空格的安装文件夹,否则会出现以下的异常:java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
java.net.MalformedURLException: no protocol: 5.0/webapps/ROOT/WEB-INF/classes/]。如今把上述的HelloWorld EJB程序实现远程调用:打包好的EJB组件部署在一台机器的Jobssserver上,把server启动起来,在部署web应用的机器上依照上述的两个步骤把相关jar文件和用到的接口类拷到对应的文件夹下,把Test.jsp:文件里的

props.setProperty("java.naming.provider.url", "localhost:1099");这行的localhost改为EJB组件部署机器的IP,把web应用的project部署到Tomcat下,启动Tomcat,就能够看到执行的结果了。

4.6小结
本章主要介绍了EJB3.0开发环境的搭建。首先给读者介绍了EJB的几种基本的容器及EJB3.0的开发工具。本章以JBOSS为例具体介绍了开发环境的搭建过程。并给读者介绍了第一个HelloWorld的EJB3.0开发部署和执行的具体过程,最后给读者介绍了EJB3.0的远程调用,相信通过本章的学习读者已经掌握了EJB3.0开发的基本知识。为后面其它内容的学习打下了良好的基础。

原文地址:https://www.cnblogs.com/zfyouxi/p/4345514.html