第一章 前言
1.1 为什么学习EJB3?
作为一个刚刚踏入软件开发领域的新人,我无法真正体会以前EJB带给我们哪些激动人心的东西,同时也不能理解我们为什么对它又爱又恨,心痛得弃它而去。还是学生时代,我仅仅从师长或者软件领域的大牛那里得到经验:EJB很复杂,还是学习spring吧。世俗的舆论告诉我,EJB已经是被人抛弃的名门之后,这种偏见也让我投入到春天的怀抱。
出身贵族,但却无贵族之气,处处遭人抛弃,EJB为什么会有如此的境遇?spring给了我们答案:简单实用才是硬道理。的确,spring的IoC,AOP,还有那些轻盈的事务处理,对许多开源框架的完美支持,一朵朵漂亮的花儿,让我们怎能抵挡春天的诱惑。
当春天的花儿开满了群山遍野,已经没有EJB的容身之所之时,这个巨人才如梦初醒。经过短暂的沉睡,EJB3.0重磅出击,EJB3的架构改变了开发体验,引入的非常简化的开发模型,降低了企业bean本身的复杂性,解决了以前EJB存在的许多诟病,所有的一切再向世人宣布:EJB王者归来!
但是依赖注入使用元数据是否真的比xml更加的优美?AOP方面能否赶超spring依然是个未知数,持久层真的像Hibernate那样深入人心?这些都值得我们期待,EJB依然有很长的路要走。既然EJB依然不能给我们带来颠覆一切的改变,我们为什么还要学习EJB呢?
每个使用spring的人都知道spring很棒,项目中使用spring是一个伟大的选择,但是spring在很多方面偏离了Java EE的标准,而我的建议是紧跟标准。只有紧跟着标准,你的发展才不会偏离方向,你的项目才能降低风险。所以学习EJB3的确是一个不错的选择,即使它现在还不成熟,即使还不深入民心,但是EJB3已经给我们带来很多激动人心的改变,随着时间的推移,EJB也将越来越完善,作为明天的主流,难道我们不满怀激动心情继续下去吗?
Let’s go!让我们出发吧。
1.2 编写该书的初衷
EJB3规范推出以后,受到很多开发人员的欢迎,学习EJB3的人越来越多,但是网上资料非常的分散,增加了学习的难度。当然也存在比较好的EJB3的教程,这些教程对我们的学习带来很大的帮助。在学习新技术的过程中,我们要不断的总结,而对于我则喜欢写一些学习笔记。突然就有了一个想法,为什么不把我们学习的过程记录下来,在这个过程中我们可能会遇到很多的问题,会有很多学习的心得,当然也由于自己知识的缺陷和理解的不足,有很多地方会出现很多的误解,而我们要解决这些问题,要消除这些误解,要真正体会EJB3给我们带来的巨大改变,闭门造车是不行的,所以我和同事商量决定共同写一本这样的教程,而这本教程不应该是我们的一家之言,而是所有学习EJB3学习者智慧的结晶。甚至这谈不上什么教程,作为初学者我们也没有编写教程的资本,正像书名一样我们希望所有的学习者能相互的学习,引起思想的碰撞。我们从初学者的角度去共同的讨论,学习,这样不更能引起我们的共鸣吗?
我们不想误人子弟,文章中的观点只是我们的个人观点,所以对于一些问题的认识不免会有失偏颇。希望朋友们能够诚恳的批评指正。我们学习中遇到的问题也希望朋友们讨论共同找到答案。以学习者的角度去阐述EJB3,我希望我们都是其中的受益者。
JBoss提供了对EJB3的完美支持,所以我们采用JBoss作为学习EJB3的平台。而所有的文章和源码我们将发布在我的技术blog上(http://blog.youkuaiyun.com/yongtree 和http://yongtree.javaeye.com),希望朋友们能多多讨论,一块充实它的内容。也希望朋友们能多多支持,你们的支持就是我们坚持不懈的动力。
谭明智 2008-3-2
第二章 安装配置
2.1 所需资源
1、JDK5.0 下载地址:http://java.sun.com/j2se/1.5.0/download.jsp
2、JbossIDE 下载地址:http://nchc.dl.sourceforge.net/sourceforge/jboss/JBossIDE-2.0.0.Beta2-Bundle-win32.zip
注:上面的下载地址所下的JbossIDE是内嵌了Eclipse3.2版本的完整的开发平台。另外一个方式,用户可以在原有Eclipse的基础上,只下载JbossIDE的插件版本(JBossIDE-2.0.0.Beta2-ALL.zip),然后copy文件到相应的目录或者配置links目录。
3、JBOSS-4.2.1.GA 服务器
下载地址:http://sourceforge.net/project/showfiles.php?group_id=22866&package_id=16942&release_id=523619
注:JBOSS-4.2.1.GA已经内嵌了EJB3.0容器,所以可以直接用于EJB3.0的开发。而对于JBOSS4.0系列的版本,因为默认的服务器不带有EJB3.0的容器,所以需要手工添加,这时就需要用到jboss-EJB-3.0_RC9_Patch_1.zip该文件包。下载地址:
下载了该包以后,需要把包中的lib、docs文件夹中类包和配置文件发布到JBOSS相应的目录,为了便于这些文件的发布,这时需要用到Ant这个批编译软件。
Ant-1.7.0 用户可以去http://ant.apache.org/下载。
2.2 安装配置
1、安装方法:
JBOSS-4.2.1.GA解压即可完成安装,为了避免出现意想不到的错误,目录不要带有空格。安装完后请在“系统变量”里添加JBOSS_HOME 变量,值为Jboss 的安装路径。如下图:
现在验证安装是否成功。双击[jboss 安装目录]/bin/run.bat 启动jboss,如果没有异常抛出,并看到下图,则说明你安装成功了。
现在我们可以打开浏览器,键入http://localhost:8080/进入jboss欢迎主页,。在JBoss Management 栏中点击”JMX Console”进入Jboss的管理界面。如下图所示:
2、Jboss EJB3.0开发配置
开发平台建议使用官方网站下载的JBoss IDE的完整版本,该版本内部已经集成了大部分的jboss系列插件和EJB3.0开发的插件。对于使用MyEclipse的用户来说,MyEclipse也提供了EJB3.0开发的相关环境,但是我们还是采用全套的JBOSS组合。对于需要使用MyEclipse功能的用户,由于MyEclipse和JBoss IDE功能的重叠和差异,为了避免意想不到功能误用,建议独立使用MyEclipse和JBoss IDE。下图为JBoss IDE2.0.0Beta2的启动画面。
配置Jboss服务器:Window->Preferences->Server->Installed Runtime(如下图所示)
点击Add按钮,出现以下界面:
在选择运行环境类型时,选择JBoss Inc选项中的Jboss 4.0 Server Adapter Runtime,而不是选择JBoss选项中的JBoss v4.0。(在第一次配置时,这里是一个误区,需要特别注意)
点击Next按钮后,出现下图界面。
选择jboss的根目录和JRE,注意JRE的目录应该是你安装JDK的根目录,在minimal、default、all三个配置项中进行选择,通常情况是选择default,但是为了在开发EJB程序的时候不会出现意想不到的问题,我们在这里选择all选项。
设置服务器的另外一种方式就是在新建一个EJB3.0工程时进行设置,在以后的内容中在做介绍。
2.3 开始令人作呕的HelloWorld
为了检查我们的配置是否正确,我们再一次用那个臭名昭著的HelloWorld来进行测试。
1、 新建EJB3.0工程
输入工程名称点击Next进入选择JBoss EJB3容器,在如图所示的界面上,我们选择最后一个(红线圈出)。注:在前面我们讲解配置JBoss服务器的时候,我们提过配置服务器的另外一种方法,便是在新建工程的时候创建一个新的服务器(蓝线圈出)。
点击Finish,则一个EJB3的工程建立完毕。
2、 新建一个无状态的Session Bean
点击Next,则出现如下界面。
Session Bean的类型我们选择stateless(红线圈出),在建立Session Bean的时候,系统会自动给我们建立两个类,一个是Session Bean的接口,一个是接口的实现类。我们使用的JBoss EJB3建立Session Bean的时候,与EJB2.1和MyEclipse不同就是没有让我们选择是否建立本地(Local)接口。
※问题2.1:为什么JBoss EJB3取消了Local接口的建立?
以下是该接口定义的一个方法,在接口的前面用元注释Remote标注,表示该接口为一个远程接口。
package
com.baiyyy;
import javax.ejb.Remote;
@Remote
public interface HelloWorld {
public String sayHello(String name);
}
以下是该远程接口实现的一个会话
Bean
,其中类前面使用
Stateless
标注,表示该
Session Bean
为无状态的会话
Bean
。
package
com.baiyyy;
import javax.ejb.Stateless;
import com.baiyyy.HelloWorld;
/**
*
实现远程接口的无状态会话
Bean
*
* @author yongtree
*
*/
public @Stateless class HelloWorldBean implements HelloWorld {
public String sayHello(String name) {
// TODO Auto-generated method stub
return name + "
说:
HelloWorld!"
;
}
}
这样我们就建立了一个最简单的无状态的Session Bean,接下来的工作我们就要把它打包并发布在JBoss EJB容器中。在工程上点击鼠标右键àExport,在以下界面上选择JavaàJAR file。
按照提示,把jar文件发布到JBoss服务器的serveràallàdeploy中,并启动JBoss服务器。如果JBoss服务器已经启动,就不需要重新启动,因为JBoss支持热部署。
最后我们写一个测试程序测试一下,新建一个带有main方法的测试类Test.java:
package
com.baiyyy;
import javax.naming.InitialContext;
import javax.naming.NamingException;
/**
*
用于测试
Session Bean
的测试类
* @author yongtree
*
*/
public class Test {
/**
* @param args
* @throws NamingException
*/
public static void main(String[] args) throws NamingException {
// TODO Auto-generated method stub
InitialContext ict=new InitialContext();//
HelloWorld hello=(HelloWorld)ict.lookup("HelloWorldBean/remote");
System.out.println(hello.sayHello("yongtree"));
}
}
输出结果:
程序运行成功,证明我们搭建的JBoss EJB3的开发环境是正确的。在以后的学习过程中,我们将在这个平台上进行开发。