中间件
Application Server
日期:1/18/06
作者:Debu Panda
该示例应用程序演示了 Oracle 对使用 ORMI 在 OC4J 实例之间传播事务环境的支持。
如果多个 OC4J 实例要参与一个分布式事务,则事务环境传播很有必要。事务环境定义了事务的范围,并将所有参与的资源和事务操作关联在一起。所有参与的线程都共享同一个事务环境。
如果一个 OC4J 实例在现有事务的范围内对另一个 OC4J 实例进行远程调用,则多个 OC4J 实例需要参与同一个事务(假定方法的 EJB 语义支持在客户端事务中划分工作范围)。举例说明,OC4J 实例 1 中的 servlet 获得对驻留在 OC4J 实例 2 中的 EJB 的引用,然后启动一个事务,并对事务环境中的远程 EJB 进行方法调用。如果多个 OC4J 实例参与一个事务,则参与的 OC4J 实例作为全局事务的一部分而执行的所有工作都必须是原子的。
在 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 的实例上运行此示例应用程序,请执行以下步骤:
确保定义以下环境变量:
使用 %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
Ant 1.6.2 是随 OC4J 一起提供的,您必须将 PATH 环境变量设置为 $ORACLE_HOME/ant/bin。在某些操作系统上,Ant 当前不支持使用环境变量。如果您使用的正好是这种系统,请修改 %HOWTO_HOME% 目录中的 ant-oracle.xml 文件。
编辑 ant-oracle.properties(在 demo
目录中),并
确保正确设置以下属性,如以下两个 OC4J 实例所示:
如果您使用的是由 OracleAS 控制的安装,则除了更改 oc4j.admin.user 和 oc4j.admin.password 以外,还要在 OracleAS 安装过程中针对 OC4J 托管实例相应地更改以下属性。
您需要根据您的环境来取消 ant-oracle.properties 中相应 deployer.uri 的注释,即单一实例 OC4J 或由 OPMN 管理的集群 OC4J 实例/组。
您必须根据环境对
TXPropagationBean.java 的 createContext 方法
进行相应的 更改。在
OC4J 实例由 OPMN 管理且 ORMI 端口动态分配的 OracleAS 环境中查找 EJB 时,您必须使用 opmn:ormi 查找。
请注意,您也可以单独部署该应用程序。确保定义了 %ORACLE_HOME% 环境变量,然后从 %HOWTO_HOME% 目录中键入命令:
>ant deploy
通过从首选浏览器中调用以下 URL 来运行该示例:
http://localhost:port/TxProp
在该页面中,输入相应的数据,选择事务选项的相应按钮,然后单击 Execute Demo。
如果事务存在,则方法将使用现有事务环境执行。当 JSP 在进程 1 中的 EJB 上调用方法时,会启动一个事务。随后,进程 1 中的 EJB 将调用进程 2 中的 EJB,这将导致事务被传播到进程 2。进程 2 中的 EJB 将使用传播的事务环境执行。数据库插入由进程 2 上的 bean 执行,然后在对进程 2 中 bean 的调用返回时由进程 1 上的 bean 执行。
这将执行三个不同的案例。
学习完本文档后,您应了解:
热门下载 | ||