EJB的复杂性使之在J2EE架构中的表现一直不是很好。EJB大概是J2EE架构中唯一一个没有兑现其能够简单开发并提高生产力的组建。EJB3.0规范正尝试在这方面作出努力以减轻其开发的复杂性。EJB3.0减轻了开发人员进行底层开发的工作量,它取消或最小化了很多(以前这些是必须实现)回调方法的实现,并且降低了实体Bean及O/R映射模型的复杂性。
EJB3.0中两个重要的变更分别是:使用了Java5中的程序注释工具和基于Hibernate的O/R映射模型。我们先来试试吧,感受一下:
首先创建一个名为HelloEJB的Java 工程,在工程的Library选项中添加外部Jar,将jboss-ejb3x.jar添加到工程中来,单击完成给工程添加一个接口文件 FirstEJB.java,详细代码如下:
package com.ejb;
public interface FirstEjb {
public String hello();
}
保存。再添加一个类文件,FirstBean.java并实现刚创建的接口,具体代码如下:
package com.ejb;
import javax.ejb.*;
@Stateless
@Remote({FirstEjb.class})
public class FirstBean implements FirstEjb {
public String hello() {
return "hello";
}
}
在这个文件中,我们导入了javax.ejb.*,并且添加了两行特殊的注释, @Stateless 表示这是一个无状态的会话Bean @Remote({FirstEjb.class}) 表示Bean的远程接口是FirstEJB.class
一个简单的EJB我们就创建完成了,下面我们进行打包成Jar文件,点击File-Export,选择Java -jar file,点击Next ,只选择导出Class文件即可,选择保存Jar文件名本例取名为TestEjb.jar,保存路径,点击完成就好了。下面我们创建一个测试工程,创建一个Web工程,名为:MyTestEjb,工程创建完毕后,要将在EJB工程中的接口类复制到此Web工程的src目录中(包含Java包),这是为了测试方便,在实际使用中无太多意义。然后再创建一个Jsp文件,名为MyJsp.jsp,页面具体代码如下:
<%@ page contentType="text/html; charset=GBK"%>
<%@ page import="com.ejb.*, javax.naming.*, java.util.Properties"%>
<%
Hashtable
prop.put("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
prop.put("java.naming.provider.url", "localhost:1099");
prop.put("java.naming.factory.url.pkgs", "org.jboss.naming");
InitialContext ctx;
try {
//初始化环境
ctx = new InitialContext(prop);
//根据JNDI的名字,查找EJB ,此JNDI名字命名格式为:Remote接口名/remote
FirstEjb helloworld = (FirstEjb) ctx.lookup("FirstBean/remote");
out.println(helloworld.hello());
}
catch (NamingException e) {
out.println(e.getMessage());
}
%>
保存 后,即可将此Web应用打包布署点击File-Export 选择导出WAR文件,保存文件名为:MyTestEjb.war点击完成。下面就剩最后要布署到JBoss上了,将EJB的打包文件TestEjb.jar及测试Web工程的打包布署文件MyTestEjb.war,一起复制到Jboss安装目录下的/server/default/deploy 目录下。最后启动Jboss服务器。打开浏览器,在地址栏输入http://localhost:8080/MyTestEjb/MyJsp.jsp,如果能在页面看到hello即测试成功。