如何开发使用 EJB 3.0 的无状态会话 EJB
如何开发使用 EJB 3.0 的无状态会话 EJB
日期:1/13/06 作者:Debu Panda
简介
本示例应用程序演示了 Oracle 对使用无状态会话 EJB 的 EJB 3.0 规范的支持,并演示了 EJB 客户端中简化的 EJB 调用模型。
EJB 3.0 显著简化了 EJB 的开发,并消除了许多复杂的开发任务。例如,创建一个使用 EJB 2.1 的简单无状态 EJB 需要一个 bean 类、两个接口以及一个部署描述符。远程接口(或本地)和主接口必须分别扩展 javax.ejb.EJBObject 和 javax.ejb.EJBHome 接口,而 bean 类必须实现 javax.ejb.SessionBean 接口。但在 EJB 3.0 中,以下规范导致开发得到了显著简化:
bean 类可以是传统的 java 类 (POJO)
EJB 接口可以是纯业务接口 (POJI)
不再需要 EJB 主接口
可以使用注释代替专用的部署描述符
本演示使用 HelloWorld bean 演示一个使用 EJB 3.0 的简单无状态 EJB。
注意 :当 EJB 3.0 规范最终定稿时,某个 EJB 3.0 API 可能会更改,并且您可能必须更改应用程序,使其符合最终的 EJB 3.0 规范。Oracle 不能保证 OC4J 的未来版本(符合该规范的最终版本)中的所有 EJB 3.0 特性均具有向后兼容性。
使用 EJB 3.0 的无状态会话 Bean 示例
以下是 HelloWorld EJB 的远程接口。注意,这是一个纯 Java 接口并且不扩展 EJBObject 。
package
oracle.ejb30;
import javax.ejb.Remote;
@Remote
public interface HelloWorld
{
public void sayHello(String name);
}
bean 类是一个实现业务接口的传统 java 类:
package
oracle.ejb30;
import javax.ejb.Stateless;
@Stateless
public class HelloWorldBean implements HelloWorld
{
public void sayHello(String name)
{
System.out.println("Hello "+name +" from
first EJB3.0");
}
注意,此 bean 使用 @Stateless 注释将 bean 标记为无状态 EJB。可以使用 @Remote 注释 EJB 的远程接口和部署描述符,但并不是必需的。
示例 EJB 客户端
注意,不再需要 EJB 主接口,且不通过调用 create() 方法创建 bean 实例。相反,我们可以直接在 EJB 上调用一个方法,如以下客户端存取器所示:
Context context =
new InitialContext();
System.out.println("Looking up HelloWorld");
HelloWorld helloWorld =
(HelloWorld)context.lookup("java:comp/env/ejb/HelloWorld");
helloWorld.sayHello(args[0] );
前提条件
您需要了解的内容
要完成此示例应用程序,应熟悉以下内容:
有关 EJB 3.0 的详细信息,请参阅 OTN 上的下列文档:
所需软件
本演示要求安装并正确配置了以下软件组件:
符号
%ORACLE_HOME% - Oracle 应用服务器 10g 10.1.3 的安装目录
%JAVA_HOME% - JDK 的安装目录
%HOWTO_HOME% - 将此演示解压缩到的目录
构建应用程序
此应用程序的 Javadoc 位于 %HOWTO_HOME%/doc/javadoc/ 目录中。
配置文件位于 %HOWTO_HOME%/etc 目录中,其中包括部署描述符文件,如 application.xml。
运行应用程序
要在 Oracle 应用服务器 10g 10.1.3 的独立实例上运行此示例应用程序,请执行以下步骤:
1. 检查示例文件目录
build - 编译过程中创建的临时目录
log - 保存编译/部署日志的临时目录
etc - 用于封装此应用程序的所有必需文件
lib - 保存可以部署的应用程序存档
doc - 方法文档和 Javadoc
javadoc - 不同源文件的 javadoc
how-to-ejb30-slsb.html - 此方法文档页面
src - 演示源
ejb - 包含示例 SLSB 代码
client - 包含应用程序客户端代码
2. 配置环境
确保定义了以下环境变量:
%ORACLE_HOME% - OC4J 的安装目录。
%JAVA_HOME% - JDK 的安装目录。
%PATH% - 包含 %ORACLE_HOME% /ant/bin
3. 启动 OC4J 实例
在进行了以上更改后使用以下命令启动 OC4J 独立版。
>%ORACLE_HOME%/bin/oc4j -start
如果使用 OracleAS 管理的安装,请在进行了以上更改后开始使用以下命令。
> %ORACLE_HOME%/opmn/bin/opmnctl startall
4. 生成、编译和部署应用程序
OC4J 附带了 Ant 1.6.2,您必须将 PATH 环境变量设置为 $ORACLE_HOME/ant/bin 。在某些操作系统上,Ant 当前并不支持使用环境变量。如果您的操作系统不支持使用变量,请修改位于 %HOWTO_HOME% 目录中的 ant-oracle.xml 文件。
编辑 ant-oracle.properties(位于 demo 目录中)并 确保将以下属性设置为正确值(以下是针对 OC4J 独立版的属性):
oc4j.host :运行 OC4J 的主机 (默认值为 localhost)
oc4j.admin.port :RMI 端口号(默认值为 23791)
oc4j.admin.user :admin 用户名(默认值为 oc4jadmin)
oc4j.admin.password :admin 用户密码(默认值为 welcome)
oc4j.binding.module :将部署的 Web 模块绑定到的网站名(默认值为 http-web-site)
如果使用的是 OracleAS 管理的安装,则除了更改 OracleAS 安装中的受管理 OC4J 实例的 oc4j.admin.user 和 oc4j.admin.password 以外,还应相应地更改以下属性。
opmn.host :运行 OracleAS 的主机名/IP (默认值为 localhost)
opmn.port :OracleAS 安装的 OPMN 请求端口(默认值为 6003)
oc4j.instance :admin 用户名(默认值为 oc4jadmin)
必须根据环境(例如,单个实例 OC4J 或 OPMN 管理的集群化 OC4J 实例/组)取消注释 ant-oracle.properties 中的相应 deployer.uri。
必须在 jndi.properties 中进行更改,如适用于您的环境的 provider.url、主体和证书。如果使用的是 OracleAS 安装,则必须使用以下格式的 provider.url:opmn:ormi://localhost:6003:home/ejb30slsb 。
要构建此应用程序,请从 %HOWTO_HOME% 目录中键入以下命令:
>ant
ejb30slsb.ear 目录中现在应具有新建的 %HOWTO_HOME%/lib 。
如果编译成功,此命令还将尝试部署此应用程序。它将首先测试 OC4J 是否正在运行。
注意,您也可以单独部署应用程序。确保定义了 %ORACLE_HOME% 环境变量,然后从 %HOWTO_HOME% 目录中键入命令:
>ant deploy
5. 运行应用程序
通过提供以下命令(包括一个作为程序参数的名称)运行此示例:
>ant run
返回到启动 OC4J 的控制台,您将看到由 HelloWorld EJB 生成的输出。
总结
完成了本文档,您应该能够:
使用 EJB 3.0 开发和部署一个简单的无状态会话 session
在 Oracle 应用服务器 EJB 3.0 中部署并执行一个简单的无状态会话 bean