安装ejb运行和开发环境
ejb必须要在ejb容器内执行。所以,我们必须安装一个符合j2ee标准的ejb容器。为了帮助我们部署自己的ejb,我们还需要一个部署工具。来自sun的、对j2ee的参考实现包含了一个ejb容器和一个ejb部署工具。这个j2ee参考实现能够在sun发布的j2ee开发工具包里找到。
j2ee开发包要依靠java 2 sdk、标准版(standard edition,j2se)的开发包,所以你也需要把它下载下来。你需要j2se sdk 来运行参照实现的j2ee服务器,并创建和运行ejb应用程序。
一旦你下载了开发包,你就要安装它们,并为每个开发包选择理想的位置。你要先定义一个叫作java_home的环境变量,并将它指向j2se开发包的安装目录。然后,定义一个叫做j2ee_home的环境变量,并把它指向j2ee开发包的安装目录。
现在你就准备好开始编写你的ejb了。
编写一个简单会话ejb
开发一个ejb所涉及的大多数步骤和概念和我们开发传统的java对象(plain-old java object,pojo)所使用的是相同的,只有少数的不同之处。下面就是开发和部署ejb的一个基本步骤:
1. 为你的ejb编写类和接口。
2. 为你的ejb编写部署描述符。
3. 将ejb和相关联的文件打包进一个jar文件。
4. 部署ejb。
会话bean有两种不同的类型。在我们开始编写代码之前,让我们来看看它们之间的相同之处和不同之处。
状态会话ejb概述
状态会话ejb会在单个会话期间维持一种和客户端的对话状态。这就表示状态会话ejb能够在单个会话期间,维持从一个客户端跨越多个调用的实例变量。
一旦客户端完成了同ejb的交互操作,而且ejb容易删除了ejb,那么ejb的会话就会结束,用于ejb的所有状态数据都会被删除。
无状态会话ejb概述
无状态会话ejb不会为每个单独的客户端都维持一个对话状态。对无状态会话ejb的每次调用,都应该被当作是对一个全新的对象实例的请求。因为任何实例-变量状态都会在调用之间丢失。
无状态会话ejb不会被ejb容器保存到第二存储地里,所以程序员必须要知道:每个客户端的每次调用之间的所有数据都是瞬时的。无状态会话ejb的瞬时特性允许ejb容器重复使用ejb实例,因此常常会优化ejb的性能。
会话bean之间的关系
图a说明了ejb客户端、ejb容器和几个会话ejb之间的关系。

会话ejb包括至少三个强制类/接口。第一个强制类/接口是component接口。component接口定义了一些对ejb来说是可视的商业方法,它必须扩展javax.ejb.ejbobject。
这里我们会举个例子,实现一个非常简单的无状态会话ejb,它会在一个叫作getbalance的方法里返回帐目结算。我们component接口的代码如下:
package com.jeffhanson.ejb;
public interface account extends javax.ejb.ejbobject, java.rmi.remote
{
public string getbalance() throws java.rmi.remoteexception;
}
第二个强制类/接口是home接口。home接口被ejb客户端用来获取对bean的组件接口的参照,它必须扩展javax.ejb.ejbhome。我们home接口的代码如下:
package com.jeffhanson.ejb;
public interface accounthome extends javax.ejb.ejbhome
{
public account create() throws javax.ejb.createexception,
java.rmi.remoteexception;
}
第三个强制类/接口是enterprise bean类。enterprise bean类为component接口和home接口提供实现。用于会话ejb的enterprise bean类必须要实现javax.ejb.sessionbean接口。我们enterprise bean类的代码如下:
package com.jeffhanson.ejb;
public class accountbean
implements javax.ejb.sessionbean
{
private javax.ejb.sessioncontextctx;
public void ejbactivate() {}
public void ejbcreate() {}
public void ejbremove() {}
public void ejbpassivate() {}
public void setsessioncontext(javax.ejb.sessioncontextctx)
{
this.ctx = ctx;
}
// business method
public string getbalance()
throws java.rmi.remoteexception
{
string balance = dataobj.getaccountbalance();
return(balance);
}
}
结语
在本文里,我们通过带你尝试了一个简单的无状态会话ejb实现的细节,尽力减轻了你可能有的对创建自己第一个ejb的恐惧感。在下一篇文章里,我们将探讨实体bean的细节,以及它们如何被用来封装数据实体,即商业对象访问的内容。
闽公网安备 35060202000074号