中间件
Application Server
首次发布时间:2004 年 11 月 22 日
最后更新日期:2006 年 1 月 10 日
作者:Steve Button
|
日期 |
作者 |
内容 |
|
2004 年 11 月 22 日 |
sbutton |
OC4J 10g (10.1.3) 开发人员预览版 3 的首次创建和发布 |
|
2005 年 7 月 20 日 |
sbutton |
更新以使用 Application Server Control 中的新功能创建并配置共享库。 |
|
2006 年 1 月 10 日 |
sbutton |
产品更新。 |
该方法文档演示了如何使用 OC4J 10g (10.1.3) 中引入的共享库机制来定义由已部署应用程序加载和使用的 XML 分析器实施。
注意: 参阅“OC4J 配置和管理指南”获取关于 OC4J 中可用的共享库功能的详细讨论。
默认情况下,Oracle XDK 附带的 XML v2 分析器在应程序部署到 OC4J 时可供其使用。
要演示共享库功能,需要安装 Xerces XML 分析器和 Xalan XSL 译码器类库,并将它们发布为 共享库 ,然后重新部署并配置该应用程序以使用该新共享库。当重新执行该应用程序时,它将显示已经加载了 Xerces 和 Xalan 库。
和许多其他应用服务器一样,配置 OC4J 以加载一个预定义的库集。例如,在 OC4J 启动时加载某个特定版本支持和实施的所有 J2EE 库。此外,默认情况下,将加载提供 XML 分析器和 OC4j 自身使用的其他产品的 Oracle XDK(XML 开发人员工具包),并用于应用程序。通常,这是针对 OC4J 用户的简易解决方案,从而无需跟踪一组 XML 库并包括它们以与应用程序结合使用。
然而,在某些情况中,运行在 OC4J 上的应用程序有一个依赖项,或者已经进行显式认证以用于另一个 XML 分析器实施并需要使该实施优先于 Oracle XML 分析器加载。直到 10.1.3 版本为止,已经证明这对于 OC4J 用户来说不是小问题。
主要问题是 Oracle XDK 库已经使用引用 JAR 文件 Class-Path 机制硬编码到该容器的类路径中。更改这一问题需要使用 JRE 扩展库机制,或者在启动它来加载可替换的 XML 分析器实施时更改 JVM 的根类路径。当该库运行时,已经是一个无支持的操作,因为该更改的影响不限于特定应用程序 — 整个容器都将受到影响,而且可能在运行时导致产生意外结果。
但是,随着 OC4J 10g (10.1.3) 中共享库机制的引入,有一个解决方案可供利用。使用共享库机制,类现在可以存在于并行类加载空间,从而使得 OC4J 自身使用的库和部署到 OC4J 的应用程序使用的库之间能够完全分离。
通过该共享库实施,可以专门重写并替换默认情况下加载并可用的任何默认类库。这以逐个应用程序进行或者累计到每个应用程序继承的一组默认值。
共享库包含一组代码源,可以由类加载器从该代码源加载 Java 类。共享库都具有名称和版本。
默认情况下,部署到 OC4J 的应用程序继承大量预定义的共享库。这些共享库的定义如下所示。
<imported-shared-libraries>
<import-shared-library name="oracle.dms"/>
<import-shared-library name="oracle.jdbc"/>
<import-shared-library name="oracle.xml"/>
<import-shared-library name="soap"/>
<import-shared-library name="global.libraries"/>
<import-shared-library name="global.tag.libraries" />
</imported-shared-libraries>
默认共享库集的定义在一个无法更改的内部 OC4J 文件中指定。然而,可以先安装和发布附加共享库,然后配置应用程序来加载它们,甚至按需替换任何继承的库。
该方法文档准确演示了如何执行该任务。
需要先构建并部署该方法文档之后,方可对其进行访问。
首先,查看方法文档分发的内容。
确保在位于该方法文档分发的根目录下的 oracle-ant.properties 文件中正确配置了以下属性。
注意:其中一些属性将默认为相应环境变量的值,如下所示。如果您已经在环境中设置了这些变量,则不必在文件中更改这些值。如果有必要,将这些变量修改为环境的相应值:
此外,请确保与 OC4J ant 版本关联的 ant 命令位于执行路径 ( %ORACLE_HOME%/ant/bin) 中。
本文的说明假设使用了 OC4J zip 分发版本。如果正在使用 OracleAS,应该使用启动/停止服务器所需的适当命令。
注意 oc4j.cmd 脚本预期 JAVA_HOME 环境变量指向整个 JDK 安装。
>ant
要执行所提供的 build.xml 文件中默认的“所有”目标,请执行以下步骤:
<oracle:deploy
deployerUri="${oracleas.deployer.uri}"
userId="${oracleas.admin.user}"
password="${oracleas.admin.password}"
file="${lib.dir}/${app.name}.ear"
deploymentName="${app.name}"
logFile="${log.dir}/deploy-ear.log"
bindAllWebApps="${oracleas.binding.module}"/>
在该方法文档中,您将执行大量任务来观察如何在 OC4J 中使用共享库。
您现在将执行的任务是:
该方法文档使用一个简单的 JSP 应用程序查看应用程序加载的各种 XML 工厂和类实例。
该应用程序使用 JAXP(用于 XML 分析的 Java API)API 创建 SAX 分析器产物( SAXParserFactory 和 SAXParser)、 DOM 分析器产物( DocumentBuilderFactory 和 DocumentBuilder)和 XSL 产物( TransformerFactory 和 Transformer)的实例。然后它将显示这些对象的完全限定类名,以便显示已经加载了哪些类。
public static String getDOMDetails ()
{
DocumentBuilder builder=null;
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();try
{
builder = factory.newDocumentBuilder();
return "<BR><B>DocumentBuilderFactory Instance:</B> " + factory.getClass().getName() +
"<BR><B>DocumentBuilder Instance:</B> " + builder.getClass().getName() +"<BR>"; }
catch (Exception e)
{
return "Error processing DOM -- " + e.getMessage();
}
}
一个类似的方法可用于获取 SAX 和 XSL 加载类的细节。
然后,该 JSP 页将显示调用这些方法结果,进而识别使用的 XML 库。
当部署了应用程序以后,可以通过执行该应用程序来确定加载了什么 XML 库。
打开一个浏览器窗口并输入以下 URL:
http://localhost:8888/how-to-swapxmlparser
这将显示该应用程序加载的 XML 相关类的完全限定类名。
在默认的 OC4J 配置中,显示的内容应如下所示:
DOM Parser
DocumentBuilderFactory Instance:oracle.xml.jaxp.JXDocumentBuilderFactory
DocumentBuilder Instance:oracle.xml.jaxp.JXDocumentBuilderSAX Parser
SAXParserFactory Instance:oracle.xml.jaxp.JXSAXParserFactory
SAXParser Instance:oracle.xml.jaxp.JXSAXParserXSL Transformer
TransformerFactory Instance:oracle.xml.jaxp.JXSAXTransformerFactory
Transformer Instance:oracle.xml.jaxp.JXTransformer
浏览器中的该 HTML 页应该如下所示:
| |
您现在将使用另一个 XML 分析器实施替换该 Oracle XML 分析器。
首先,您需要有一个不同的 XML 分析器和 XSL 译码器实施可供使用。有关 Apache、Xerces 和 Xalan 的流行开放源实施,可以从 http://xml.apache.org/ 下载并用作可替换的 XML 实施。
本文的其余部分将假设您经下载并可以使用以下分发:
这将意味着您可以处理以下 JAR 文件:
即使您正在使用不同版本的 Xerces,实际上与该方法文档也并没有任何不同。不同版本中可能有几个轻微的文件名更改需要注意。
共享库可以使用 OC4J 提供的 Application Server Control Console (ASC) 创建和配置。 Shared Library 任务(位于 ASC 的 Administration 页)能够创建、编辑和删除共享库。当创建新的共享库时,ASC 允许将一个客户端的 JAR 文件直接加载到 OC4J 实例,该实例作为该库的代码源进行管理和配置。
注意:OracleAS 10.1.3 产品也支持使用命令行和 Oracle Ant 任务安装和发布共享库这一附加功能。查看该文档获取更多信息。
共享库的格式是 name/version ,其中名称是您要提供给共享库的唯一名称,而且该版本是您要使用的任何(或有意义的)版本字符串。也可以安装多个共享库版本,以便该版本标识符可以起作用。
当创建新的共享库并使用档案填充时,默认情况下,它们将驻留在以下目录结构中:
%ORACLE_HOME%
\j2ee
\home
\shared-lib
\name
\version
archive1.jar
archive2.jar
对于该方法文档而言,您将创建一个共享库作为 apache.xml:2.7。这里使用的 2.7 是任意的,但有助于识别所使用的 Apache 库的版本。
使用 ASC 创建共享库的结果位于
%ORACLE_HOME%\j2ee\home\config\server.xml 文件中。每个共享库使用
<shared-library> 标记定义,而且每个要用作代码源的 JAR 文件使用
<code-source> 标记进行声明。
| 1. |
从浏览器访问 Application Server Control 控制台。 URL:http://host:8888/em
其中 <密码> 是在首次启动 OC4J 实例时设置的。 |
| |
|
| 2. |
选择 Administration 页。 |
| |
|
| 3. | 单击 Create 按钮。 |
| |
|
| 4. | 指定新库的名称和版本并单击 Next 按钮。
Name: apache.xml Version: 2.7 |
| |
|
| 5. |
单击 Add 按钮将一个档案添加到共享库。 共享库将提供的档案用作代码源。 |
| |
|
| 6. |
使用显示的 File Upload 对话框,在客户端上找到来自 Xerces 2.7 分发的
xercesImpl.jar。
|
| |
|
| 7. |
xercesImpl.jar 文件将作为服务器上的档案进行添加。 再次单击 Add 按钮添加另一个档案。 |
| |
|
| 8. | 使用出现的 File Upload 对话框,在客户端上找到 Xerces 2.7 分发的
xml-apis.jar。
按 Open 将 JAR 文件上载到服务器。 |
| |
|
| 9 | 单击 Finish 按钮完成创建过程 |
| |
%ORACLE_HOME%\j2ee\home\config\server.xml 文件现在将包含一个新的共享库元素,其中上载的每个档案都具有定义的代码源标记。
<shared-library name="apache.xml" version="2.7" >
<code-source path="xercesImpl.jar"/>
<code-source path="xml-apis.jar"/>
</shared-library>
当安装和发布了 apache.xml:2.7 共享库之后,它可以由部署到 OC4J 的任何应用程序 使用 。
可用于应用程序的共享库集由两个因素确定。
第一个关键因素是父应用程序。由于 OC4J 对于部署的应用程序支持父应用程序概念,因此新部署的应用程序将从它的指定父级继承共享库集。
在多数情况中,新的应用程序使用指定为父应用程序的 “默认”应用程序部署。这导致为默认应用程序指定的共享库集由子应用程序继承。
第二个关键因素是应用程序自己的特定配置,该配置在应用程序自己的 orion-application.xml 文件中定义。该文件允许将设置特定应用于一个应用程序,包括补充和重写从其父级继承的属性。
因此,为应用程序配置特定共享库集可以通过将共享库相关标记添加到应用程序的 orion-application.xml 中来执行。
<imported-shared-libraries>
<import-shared-library
name="library.name"
version="library.version"/>
</imported-shared-libraries>
类加载行为也可以在应用程序的部署阶段使用 ASC 进行指定。类加载设置的配置可以作为执行部署前的最后一步通过 ASC 在 Deployment Tasks 页上配置。这最终可将导入的共享库标记添加到部署的应用程序的 orion-application.xml 文件中。
由于现有应用程序是通过 Ant 任务部署的,因此我们现在将使用 ASC 重新部署 how-to-swapxmlparser 应用程序并指定所要使用的 XML 分析器库。这将需要移除默认的 oracle.xml 库导入设置,并为新的 apache.xml 共享库设置导入标志。
| 1. |
打开浏览器进入 Application Server Control Console 页。 选择 Applications 页。 选择 how-to-swapxmlparser 应用程序并单击 Redeploy 按钮。 |
| |
|
| 2. | 单击 Browse 按钮并从该方法文档目录中选择 how-to-swapxmlparser.ear 文件。 |
| |
|
| 3. | 查看为 how-to-swapxmlparser 应用程序显示的细节并单击 Next 按钮继续。 |
| |
|
| 4. | 在 Deployment Tasks 页上选择 Configure Class Loading 任务。 |
| |
|
| 5. | 在 Select 框中选择“ Show all n”选项,以便查看安装在服务器上的所有共享库。 |
| |
|
| 6. |
选中 apache.xml 共享库的 Import 设置。 取消选中 oracle.xml 共享库的 Import 设置。 单击 OK 按钮继续。 |
| |
|
| 7. | 单击 Redeploy 按钮继续重新部署。 |
| |
|
| 8 | 单击 Return 按钮退出重新部署操作。 |
| |
附加的类加载配置任务将修改 %ORACLE_HOME%\j2ee\home\application-deployments\howtoswapxmlparser\orion-application.xml 并添加以下标记以更改 XML 分析器实施。
<imported-shared-libraries>
<import-shared-library name="apache.xml"/>
<remove-inherited name="oracle.xml"/>
</imported-shared-libraries>
这些标记项将 移除 应用程序加载的默认 oracle.xml 库,并将 导入 包含不同 XML 分析器实施的 apache.xml 共享库。
该方法文档应用程序现在配置为使用 Apache XML 库,如在 apache.xml:2.7 共库中定义的一样。
要查看共享库更改的结果,重新执行应用程序来查看加载的不同 XML 分析器类。
http://localhost:8888/how-to-swapxmlparser
正确配置的服务器将显示:
DOM Parser
DocumentBuilderFactory Instance:org.apache.xerces.jaxp.DocumentBuilderFactoryImpl
DocumentBuilder Instance:org.apache.xerces.jaxp.DocumentBuilderImplSAX Parser
SAXParserFactory Instance:org.apache.xerces.jaxp.SAXParserFactoryImpl
SAXParser Instance:org.apache.xerces.jaxp.SAXParserImplXSL Transformer
TransformerFactory Instance:org.apache.xalan.processor.TransformerFactoryImpl
Transformer Instance:org.apache.xalan.transformer.TransformerIdentityImpl
浏览器中的该 HTML 页应该如下所示
| |
该方法文档向您演示了如何替换 XML 分析器并配置应用程序来利用该分析器。
现在您完全可以根据需要为应用程序选择要使用的库。
热门下载 | ||