如何在 OC4J 10g (10.1.3) 中配置和使用 JNDI

最初撰稿时间:2004 年 11 月 1 日
最后更新时间:2006 年 1 月 16 日
作者:Frances Zhao

简介

该演示将向您介绍两种在 J2EE 应用程序客户端中创建初始上下文的方法,以及在 OC4J 中的基本 JNDI 查找:

  • 使用散列表作为构造函数的参数
  • 使用 jndi.properties 文件

当应用程序客户端必须查找在 J2EE 服务器应用程序中可用的资源时,客户端将使用 com.evermind.server 程序包中的 ApplicationClientInitialContextFactory 来构造初始上下文。

ApplicationClientInitialContextFactory 将需要一些环境属性。这些属性可在客户代码中或 jndi.properties 文件中进行指定,后者是应用程序的 JAR 文件(包含在 EAR 文件中)的一部分。

 

前提条件

知识准备

  • 应熟悉以下技术:EJB;
  • 指向 OTN 上其他 OC4J 方法文档的链接

软件要求

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

  • Oracle Containers for J2EE 10g (10.1.3) 单机版,并配置有一个 Web 站点(如 http-web-site)
  • Sun JDK 1.4.1 或更高版本(可以从 此处获得)
  • Apache Ant 1.6.2 或更高版本,用于构建应用程序,可以从 此处获得
  • 任何 HTML 浏览器,如 Mozilla、Microsoft Internet Explorer、Netscape 等

符号

  • %ORACLE_HOME% — 安装 OC4J 的目录。
  • %JAVA_HOME% — 安装 JDK 的目录
  • %HOWTO_HOME% — 将此演示解压缩到的目录

构建应用程序

创建简单的会话 Bean

就本方法文档而言,创建了一个要从应用程序客户端查找的简单会话 Bean。该会话 Bean 将实施一个非常简单的堆栈,以提供 3 个外部操作:将堆栈内容作为字符串进行推入、弹出以及显示。实施只是围绕一个 java.util.Stack 对象展开。代码位于: %HOWTO_HOME%/src/ejb/bean 之下。

使用散列表创建初始上下文

创建初始上下文的第一种方法是使用参数化构造函数 InitialContext(Hashtable)。在本方法文档的客户端代码中,我们使用了:

Hashtable env = new Hashtable();
env.put("java.naming.factory.initial",
  "com.evermind.server.ApplicationClientInitialContextFactory");
env.put("java.naming.provider.url","ormi://localhost/jndidemo");
env.put("java.naming.security.principal","SCOTT");
env.put("java.naming.security.credentials","TIGER");
Context initial = new InitialContext(env);

使用 jndi.properties 创建初始上下文

或者,可以根据名为“jndi.properties”的文件创建初始上下文,该文件与 J2EE 应用程序的 EAR 文件捆绑在一起。对于本方法文档,该文件如下所示:

java.naming.factory.initial=com.evermind.server.ApplicationClientInitialContextFactory
java.naming.provider.url=ormi://localhost/jndidemo
java.naming.security.principal=SCOTT
java.naming.security.credentials=TIGER

注意:对于这两种创建初始上下文的方法,如果您打算在 OracleAS 环境内运行该方法文档(而不是使用独立的 OC4J),则需要将“java.naming.provider.url”修改为使用“opmn:ormi:”协议前缀,而不仅仅是“ormi:”。应对 jndi.properties 和 DemoClient.java 均进行修改。这样,客户端无需硬编码 ORMI 端口信息(默认为 23791)即可尝试进行查找。OC4J JNDI 将联系 OPMN 进程以确定用于 OracleAS 环境的正确的 ORMI 端口。例如,使用“java.naming.provider.url=opmn:ormi://hostname/jndidemo”而非“java.naming.provider.url=ormi://hostname/jndidemo”。

JNDI 查找

创建了初始上下文后,您就可以查找类似如下所示的所需对象了。这是一个 EJB 主目录对象。查找名称在 application-client.xml 中进行指定,引用将从应用程序-本地上下文(即 java:comp/env)中检索。

Object homeObject =
  context.lookup("java:comp/env/SimpleStackBean");

以下是定义了查找名称的 application-client.xml 部分:

<ejb-ref>
  <ejb-ref-name>SimpleStackBean</ejb-ref-name>
  <ejb-ref-type>Session</ejb-ref-type>
  <home>jndidemo.SimpleStackHome</home>
  <remote>jndidemo.SimpleStack</remote>
</ejb-ref>

在本方法文档中,我们针对该堆栈 Bean 使用了 JNDI 位置“jndidemo/SimpleStackBean”,如 orion-ejb-jar.xml 中定义的。因此,我们还需要一个 orion-application-client.xml 文件来定义从上述名称“SimpleStackBean”到这个真正 JNDI 位置的映射。如下所示:

<orion-application-client>
  <ejb-ref-mapping name="SimpleStackBean" location="jndidemo/SimpleStackBean" />
</orion-application-client>

运行应用程序

以下说明适用于在 Oracle Containers for J2EE 10g (10.1.3) 的独立实例上运行本演示。

检查方法文档分发

  • build — 编译过程中创建的临时目录
  • log — 保存构建/部署日志的临时目录
  • etc — 封装此应用程序的所有必要文件
  • lib — 保存可以部署的应用程序存档(如 ear、war、rar 或 jar 文件)
  • doc — 方法文档和 Javadoc
    • javadoc — 不同源文件的 javadoc
    • how-to.html — 此方法文档页面
  • src — 演示程序的源代码
    • ejb — 包含 EJB 和客户端使用的 Java 代码

设置应用程序

环境配置

请检查以确保 ant-oracle.properties 文件(位于该示例分发的根目录下)中的以下属性配置正确(注意:其中某些属性将是下述环境变量的默认值。如果您在环境中设置这些变量,可能不必改变文件中的值)。如果必要,则针对您的环境将这些变量修改为适当的值:

  • oracle.home — Oracle 安装的根目录。默认值为 ORACLE_HOME 环境变量。
  • java.home — JDK 安装的根目录。默认值为 JAVA_HOME 环境变量。
  • oracleas.host — 运行 OC4J 实例的平台的主机名。默认值为 localhost。
  • oracleas.http.port — OC4J HTTP 监听程序进行监听时所使用的端口。默认值为 8888
  • oracleas.admin.port — OC4J 管理处理器进行监听时所使用的端口。默认值为 23791
  • oracleas.admin.user — OC4J 管理员的名称。默认值为“ oc4jadmin”。
  • oracleas.admin.password — OC4J 管理员的口令。默认值为“ welcome”。
  • oracleas.binding.module — 已部署应用程序绑定到的 HTTP Web 站点的名称。默认值为“ default-web-site”。
%ORACLE_HOME%/ant/bin

为被管理的 OracleAS 实例配置环境

g
  • oracleas.http.port — Oracle HTTP Server (OHS) 监听时所使用的端口。
  • oracleas.admin.port — OPMN 请求端口(在 opmn.xml 中指定),其默认值为 6003。您还可以使用以下命令检查 OPMN 请求端口: %ORACLE_HOME%/opmn/bin/opmnctl status -port
  • oracleas.admin.user — OC4J 管理员的名称。默认值为“ oc4jadmin”。
  • oracleas.deployer.uri — 用于执行不同管理操作的 URI(部署,取消部署)。该文件包含不同的 URI,这取决于应用程序的拓扑:独立的 OC4J、被管理的单个节点或被管理的集群。您只需取消与您的拓扑匹配的 URI 的注释即可。
  • oracleas.oc4j.instance — 这是被管理的 OC4J 实例,其中将部署或取消部署应用程序。

启动 OC4J 实例

g
  • 独立安装: %ORACLE_HOME%/bin/oc4j start
    注意,该 oc4j 命令期望 JAVA_HOME 环境变量指向一个完整的 JDK 安装。

  • 受 OracleAS 管理的安装: %ORACLE_HOME%/opmn/bin/opmnctl startall

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

构建应用程序

%ORACLE_HOME%/ant/bin

在顶层 %HOWTO_HOME% 目录中,键入命令:

  • ant

%HOWTO_HOME%/dist 目录中现在应具有新建的 servlet_demo.ear

如果构建成功,此命令还将尝试部署此应用程序。它将首先测试 OC4J 是否正在运行。

部署应用程序

还可以使用以下命令分别部署应用程序。确保定义了 %ORACLE_HOME% 环境变量。在顶层 %HOWTO_HOME% 目录中,键入命令:

  • ant 部署

运行应用程序

build.xml 中还存在另一个目标,称为“run”。确保成功构建和部署了应用程序,在顶级 %HOWTO_HOME% 目录中,只需键入命令:

  • ant run

您应当能够看见 两个成功创建和查找的初始上下文,其后是作为输出的连续堆栈内容转储。

总结

在本文档中,您学习了:

  • 如何从应用程序客户端使用 ApplicationClientInitialContextFactory 创建初始上下文
  • 如何执行基本的 JNDI 查找

 

Left Curve
热门下载
Right Curve