1. 开发模型
这里用最简洁的一个Ejb项目模型来简介Ejb的开发过程与调用原理。粗略的开发过程如下:
Ø 首先,新建Ejb项目,并部署到JBoss服务器(作为服务端)。
Ø 然后,新建普通Java项目作为客户端。(客户端的概念是相对的,它可以是任何类型的项目,包括可以是另一个Ejb项目)
Ø 最后,将Ejb项目中的接口打包为jar包,并添加到客户端,客户端即可以通过InitialContext来查找到Ejb,并调用Ejb的方法。
如下图所示:
2. 实例源码如下
服务端
新建Ejb项目,添加一个接口,与一个接口的实现:
接口:
public interface FirstEjb {
public String saySomething(String name);
}
实现:
@Stateless
@Remote
public class FirstEjbBean implements FirstEjb {
public String saySomething(String name) {
return "你好," + name;
}
}
接口的实现上有两个注解,表示这个SessionBean是一个无状态的,远程Bean。至于有状态、无状态SessionBean或是远程、本地SessionBean的概念将在后面进行介绍。
客户端
开发客户端的步骤如下:
1、首先创建普通java项目
2、将客户端的依赖包添加到项目的类路径中【* JBOSS_HOME/client/*.jar】
3、将上面服务端的接口打成jar包然后添加到客户端(为了操作方便不打jar包,可以直接将EJB项目添加到客户端项目中(目的是为了能够使用EJB的接口))
4、客户端在类路径(src)下添加jndi.properties文件(源码如下),这是为了客户端的应用程序能够使用JNDI来查找EJB对象
5、客户端即可以通过InitialContext接口来查找EJB,并调用EJB的方法!
*EJB的JNDI命名是:EJB实现类的名称/访问方式
源码:
jndi.properties:
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
java.naming.provider.url=localhost
测试类(FirstEjbClient):
public class FirstEjbClient {
public static void main(String args[]) throws Exception {
InitialContext context = new InitialContext();
FirstEjb firstEjb = (FirstEjb) context.lookup("FirstEjbBean/remote");
String s = firstEjb.saySomething("kobe");
System.out.println(s);
}
}
可以看到客户端通过InitialContext()加载配置文件的(jndi.properties),然后根据配置文件即可通过JNDI查找到Ejb,并调用Ejb的方法。
3. 总结
EJB是sun的JavaEE服务器端组件模型,设计目标与核心应用是部署分布式应用程序。SessionBean用于实现业务逻辑,它可以是有状态的,也可以是无状态的。每当客户端请求时,容器就会选择一个SessionBean来为客户端服务。SessionBean可以直接访问数据库,但更多时候,它会通过EntityBean实现数据访问。