方法文档:使用 ORMI 在 OC4J 实例之间传播事务环境

日期:1/18/06
作者:Debu Panda

简介

该示例应用程序演示了 Oracle 对使用 ORMI 在 OC4J 实例之间传播事务环境的支持。

什么是事务环境传播

如果多个 OC4J 实例要参与一个分布式事务,则事务环境传播很有必要。事务环境定义了事务的范围,并将所有参与的资源和事务操作关联在一起。所有参与的线程都共享同一个事务环境。

如果一个 OC4J 实例在现有事务的范围内对另一个 OC4J 实例进行远程调用,则多个 OC4J 实例需要参与同一个事务(假定方法的 EJB 语义支持在客户端事务中划分工作范围)。举例说明,OC4J 实例 1 中的 servlet 获得对驻留在 OC4J 实例 2 中的 EJB 的引用,然后启动一个事务,并对事务环境中的远程 EJB 进行方法调用。如果多个 OC4J 实例参与一个事务,则参与的 OC4J 实例作为全局事务的一部分而执行的所有工作都必须是原子的。



 

如何使用 ORMI 传播事务环境


在 OC4J 实例之间传播事务环境不要求在容器中进行特殊设置。但是,您必须配置事务处理管理器登录,以确保恢复失败/未决的事务。必须使用 RMIInitialContextFactory 在事务环境中调用远程 EJB,如以下代码所示:

                           
             env.put(Context.INITIAL_CONTEXT_FACTORY, "oracle.j2ee.rmi.RMIInitialContextFactory");
env.put(Context.PROVIDER_URL, "ormi://localhost:23792/TxProp");
env.put(Context.SECURITY_PRINCIPAL, "oc4jadmin");
env.put(Context.SECURITY_CREDENTIALS, "welcome");

                        

前提条件

需要了解的内容

有关 OC4J 的更多信息,请参阅 OTN 上的以下文档:

软件需求

本演示要求安装并正确配置了以下软件组件:

符号

构建应用程序

配置文件 位于 %HOWTO_HOME%/etc 目录中,其中包括部署描述符文件,如 application.xml。

运行应用程序

要在 Oracle 应用服务器 10g 10.1.3 的实例上运行此示例应用程序,请执行以下步骤:

1. 检查示例文件目录

2. 配置环境

确保定义以下环境变量:

配置数据库

使用 %HOWTO_HOME%/scripts 目录中的 table.sql 脚本创建表。

配置数据源

该示例要求将 DataSource 配置为与包含 DESTINATION 表的数据库相连。

对于 OC4J,必须在 %ORACLE_HOME%/j2ee/home/config/data-sources.xml 文件中配置一个数据源,并将它指向拥有 DESTINATION 表的模式。

示例配置:

<connection-pool name="ScottConnectionPool">
<connection-factory factory-class="oracle.jdbc.pool.OracleDataSource"
user="scott"
password="tiger"
url="jdbc:oracle:thin:@localhost:1521:ORCL">
</connection-factory>
</connection-pool>

<managed-data-source name="OracleManagedDS"
connection-pool-name="ScottConnectionPool"
jndi-name="jdbc/OracleDS"
/>

完成以上更改后,使用以下命令启动 OC4J 独立版。

>%ORACLE_HOME%/bin/oc4j -start

如果您使用的是由 OracleAS 控制的安装,则在完成以上更改后,使用以下命令启动服务器。

> %ORACLE_HOME%/opmn/bin/opmnctl startall

4 生成、编译和部署应用程序

Ant 1.6.2 是随 OC4J 一起提供的,您必须将 PATH 环境变量设置为 $ORACLE_HOME/ant/bin。在某些操作系统上,Ant 当前不支持使用环境变量。如果您使用的正好是这种系统,请修改 %HOWTO_HOME% 目录中的 ant-oracle.xml 文件。

编辑 ant-oracle.properties(在 demo 目录中),并 确保正确设置以下属性,如以下两个 OC4J 实例所示:

如果您使用的是由 OracleAS 控制的安装,则除了更改 oc4j.admin.useroc4j.admin.password 以外,还要在 OracleAS 安装过程中针对 OC4J 托管实例相应地更改以下属性。

您需要根据您的环境来取消 ant-oracle.properties 中相应 deployer.uri 的注释,即单一实例 OC4J 或由 OPMN 管理的集群 OC4J 实例/组。

OracleAS 实例所需的代码更改

您必须根据环境对 TXPropagationBean.java 的 createContext 方法 进行相应的 更改。在 OC4J 实例由 OPMN 管理且 ORMI 端口动态分配的 OracleAS 环境中查找 EJB 时,您必须使用 opmn:ormi 查找。

构建和部署

请注意,您也可以单独部署该应用程序。确保定义了 %ORACLE_HOME% 环境变量,然后从 %HOWTO_HOME% 目录中键入命令:

>ant deploy

5. 运行应用程序

通过从首选浏览器中调用以下 URL 来运行该示例:

http://localhost:port/TxProp

在该页面中,输入相应的数据,选择事务选项的相应按钮,然后单击 Execute Demo

如果事务存在,则方法将使用现有事务环境执行。当 JSP 在进程 1 中的 EJB 上调用方法时,会启动一个事务。随后,进程 1 中的 EJB 将调用进程 2 中的 EJB,这将导致事务被传播到进程 2。进程 2 中的 EJB 将使用传播的事务环境执行。数据库插入由进程 2 上的 bean 执行,然后在对进程 2 中 bean 的调用返回时由进程 1 上的 bean 执行。

这将执行三个不同的案例。

  1. 事务提交,并将这两个记录插入数据库。
  2. 进程 1 上运行的 EJB 标记事务回滚,这将导致事务最终回滚。
  3. 进程 2 上运行的 EJB 标记事务回滚,这将导致事务最终回滚。

总结

学习完本文档后,您应了解:

Left Curve
热门下载
Right Curve