方法文档:交换 Oracle JDBC 驱动程序

首次发布时间:2004 年 11 月 22 日
最后更新日期:2006 年 1 月 10 日
作者:Steve Button

下载完整的方法文档

日期

作者

内容

2004 年 11 月 22 日

sbutton

OC4J 10g (10.1.3) 开发人员预览版 3 的首次创建和发布

2005 年 7 月 26 日

sbutton

更新以使用 Application Server Control 中的新功能创建并配置共享库。

2006 年 1 月 10 日

sbutton

产品更新

简介

该方法文档只是用于演示如何更改由运行在 OC4J 上的应用程序使用的 Oracle DBC 驱动程序版本。它并不作为任何特定 OC4J/JDBC 驱动程序合并的认证阐述。所有认证信息都可从 Oracle Support 或者 Oracle Metalink 网站获得 — http://metalink.oracle.com

该方法文档演示了如何使用 OC4J 10g (10.1.3) 中引入的共享库机制来定义针对特定应用程序加载的 Oracle JDBC 驱动程序。

注意: 参阅 OC4J 配置和管理指南获取关于 OC4J 中提供的共享库功能的详细讨论。

该方法文档包含一个创建数据库连接并打印出它使用的 Oracle JDBC 驱动程序版本的应用程序。要演示共享库功能,需要安装一个不同的 Oracle JDBC 驱动程序版本并发布为共享库,而且重新配置该应用程序来使用新的共享库。

和许多其他应用服务器一样,配置 OC4J 以加载一个预定义的库集。例如,在 OC4J 启动时加载某个特定版本支持和实施的所有 J2EE 库。此外,默认情况下,还会加载该分发版本附带的 Oracle JDBC 驱动程序,并将其用于应用程序。标准方法是,所包含的 Oracle JDBC 驱动程序版本来自在其上构建并测试了 OC4J 版本的相应的数据库版本。通常,这是针对 OC4J 用户的简易解决方案,这样无需跟踪用于应用程序的 JDBC 驱动程序集。

但是,在某些情况中,应用程序将需要一个特定版本的 JDBC 驱动程序,而非 OC4J 已经提供的版本。直到 10.1.3 版本为止,已经证明这对于 OC4J 用户来说不是小问题。

主要问题是 JDBC 库已经使用引用 JAR 文件 Class-Path 机制硬编码到该容器的类路径中。更改这一问题需要使用 JRE 扩展库机制,或者在启动它来加载可替换的 JDBC 驱动程序版本时更改 JVM 的根类路径。当该库运行时,已经是一个无支持的操作,因为该更改的影响不限于特定应用程序 — 整个容器都将受到影响,而且可能在运行时导致产生意外结果。类似的情况也随着需要利用不同 XML 分析器实施(例如,Xerces)而非 OC4J 附带的分析器实施而经常出现。

但是,随着 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 文件中正确配置了以下属性。

注意:其中一些属性将默认为相应环境变量的值,如下所示。如果您已经在环境中设置了这些变量,则不必在文件中更改这些值。如果有必要,将这些变量修改为环境的相应值:

此外,请确保与 OracleAS ant 分发关联的 ant 命令位于执行路径 ( %ORACLE_HOME%/ant/bin) 中。

本文中的说明假设使用了 OC4J zip 分发版本。如果正在使用 OracleAS,应该使用启动/停止服务器所需的适当命令。

启动 OC4J

启动您的 OC4J 10.1.3 实例,如下所示:

%ORACLE_HOME%/bin/oc4j start

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}"/>

配置应用程序特定的数据源

该应用程序使用数据源建立到数据库的连接,它可以从该数据库确定加载的 JDBC 驱动程序版本。

由于我们只想更改用于特定应用程序(而 不是所有应用程序)的 JDBC 驱动程序,因此我们需要 创建应用程序特定的数据源。

该方法文档中的应用程序硬编码为使用名为“jdbc/OracleDS”的数据源,它必须是一个指向运行的数据库实例的有效数据源。

使用应用服务器控制 (ASC) 为下面描述的 how-to-swapjdbclib 应用程序创建一个连接池和一个数据源。

1.

在浏览器窗口中,输入应用服务器控制 URL

http://localhost:8888/em

输入用户名 oc4jadmin 以及为 oc4jadmin 用户设置的密码。

   
2. 单击 Applications 选项卡,然后单击 how-to-swapjdbclib 链接进入应用程序配置。
 
3.

单击 Administration 选项卡管理该特定应用程序。

 
4.

选择 JDBC 资源图标管理该应用程序的 JDBC 资源。

在该页的 Connection Pools 部分中单击 Create 按钮。

 
4.

在 Application 选择列表中选择 how-to-swapjdbclib 项。

单击 Continue 按钮

 
5.

指定该连接池的细节。

在名称域中输入 MyConnection

该 URL 必须是到数据库的有效 JDBC 连接字符串。

单击 Finish 按钮

 
6.

已经创建了一个称为 MyConnection 的新连接池。

单击 MyConnection 项目的 Test Connection 图标测试该连接池。

 
7. 单击 Test 按钮。
 
8.

如果无法成功创建连接,将显示一个错误消息。单击 MyConnection 链接编辑 Connection Pool 并纠正该错误。

如果正确配置了 Connection Pool,将显示一个消息,指示创建了一个 成功的连接。

创建一个新的数据源。

单击 Create 按钮(在 Data Sources 部分中)。

 
9.

在 Application 选择列表中选择 how-to-swapjdbclib 项。

选择 Managed Data Source 类型。

单击 Continue 按钮

 
10.

指定新数据源的细节。

选择/输入以下细节:

  • Name: MyDS
  • JNDI Location: jdbc/MyDS
  • Connection Pool: MyConnection

单击 Finish 按钮

 
11. 测试 MyDS 数据源,方式与您测试 MyConnection 连接池的方式相同。
 

运行方法文档

在该方法文档中,您将执行大量任务来观察如何在 OC4J 中使用共享库。

您现在将执行的任务是:

确定 JDBC 驱动程序版本

该方法文档使用了一个简单的应用程序查看应用程序加载的 JDBC 驱动程序版本。

该应用程序显示它加载的 JDBC 驱动程序版本,方法是建立一个到数据库的连接,然后利用 DatabaseMetaData 对象获取 JDBC 驱动程序名称和版本。

包含 JDBC 驱动程序版本的代码如下所示。

public static String getJdbcDriverVersion(String datasource)
                            
{
try
{
InitialContext context = new InitialContext();
DataSource ds = (DataSource)context.lookup(datasource);
Connection conn = ds.getConnection();
DatabaseMetaData metadata = conn.getMetaData();
conn.close();
return metadata.getDriverName() + " version " + metadata.getDriverVersion();
}
catch (Exception e)
{
return "Error, could not connect to \"" + datasource + "\"";
}
}

运行应用程序

当部署了该应用程序并创建了 jdbc/MyDS 数据源之后,您就可确定已经加载了 Oracle JDBC 驱动程序的哪个版本。

打开一个浏览器窗口并输入该 URL:

这将显示加载的 Oracle JDBC 驱动程序版本。

在默认的 OC4J 配置中,显示的内容应如下所示:

“The JDBC driver loaded is :Oracle JDBC driver version 10.1.0.4.0”

该浏览器中的 HTML 页应该如下所示:

 

创建共享库

现在您将替换该 how-to-swapjdbclib 加载的 Oracle JDBC 驱动程序版本。

首先,您需要将一个不同的 JDBC 驱动程序版本用作共享库。如果没有,您可以从 下载 Oracle JDBC 驱动程序的不同版本。

本文的其余部分将假设您从 OTN 下载了 Oracle JDBC 9.2.x 驱动程序 (ojdbc14.jar)。

如果您正在使用一个不同版本的 Oracle JDBC 驱动程序,则它不应该与该方法文档的通用运行和进度有任何不同。不同 Oracle JDBC 版本中可能有几个轻微的文件名更改需要注意。

使用应用服务器控制创建共享库

共享库可以使用 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

对于该方法文档而言,您将创建现有 oracle.jdbc 共享库的一个新版本,从而保留 Oracle JDBC 9.2 驱动程序。

使用 ASC 创建共享库的结果位于 %ORACLE_HOME%\j2ee\home\config\server.xml 文件中。每个共享库使用 <shared-library> 标记定义,而且每个要用作代码源的 JAR 文件使用 <code-source> 标记进行声明。

1.

导航回到 OC4J:Home

选择 Administration 选项卡。

 
2.

选择 Shared Libraries 任务管理共享库。

单击 Create 按钮创建新的共享库。

 
3.

输入新共享库的细节。

Shared Library Name: oracle.jdbc
Shared Library Version: 9.2

单击 Next 按钮。

 
4. 选择 Add 按钮上载一个档案。
 
5.

单击 Browse 按钮打开一个 File Upload 对话框。

使用 File Upload 对话框,从 Oracle JDBC 9.2 驱动程序找到 odjcb14.jar 文件

在 File Upload 对话框中单击 Open 按钮。

 
6. 单击 Continue 按钮将该档案上载到服务器。
 
7. 单击 Finish 按钮完成新共享库的创建。
 
8.

您将看到新共享库 oracle.jdbc 9.2 已经创建

 

%ORACLE_HOME%\j2ee\home\config\server.xml 文件现在将包含一个新的共享库元素,其中上载的每个档案都具有定义的代码源标记。

<shared-library name="oracle.jdbc" version="9.2" >
   <code-source path="ojdbc14.jar"/>
</shared-library>

它的最终结果是,现在安装了两个不同版本的 Oracle JDBC 驱动程序。该产品附带的默认版本,以及目前的附加 Oracle JDBC 9.2 版本。应用程序现在可以在这两个驱动程序版本中进行选择。

使用发布的共享库

当安装和发布了 oracle.jdbc:9.2 共享库之后,它可以由部署到 OC4J 的任何应用程序使用。

可用于应用程序的共享库集由两个因素确定。

第一个关键因素是父应用程序。由于 OC4J 对于部署的应用程序支持父应用程序概念,因此新部署的应用程序将从它的指定父级继承共享库集。

在多数情况中,新的应用程序使用指定为父应用程序的“默认”应用程序进行部署。这导致为默认应用程序指定的共享库集由子应用程序继承。

第二个关键因素是,应用程序拥有在其自身 orion-application.xml 文件中定义的特定配置。该文件允许将设置特定应用于一个应用程序,包括补充和重写从其父级继承的属性。

因此,为应用程序配置特定共享库集可以通过将共享库相关标记添加到应用程序 orion-application.xml 中来执行。

<imported-shared-libraries>
  <import-shared-library name="library.name" min-version="library.version" max-version="library.version"/>
</imported-shared-libraries>

类加载行为也可以在应用程序部署阶段使用 ASC 进行指定。类加载设置的配置可以作为执行部署前的最后一步通过 ASC 在 Deployment Tasks 页上配置。这最终可将导入的共享库标记添加到部署的应用程序的 orion-application.xml 文件中。

由于我们的现有应用程序是通过 Ant 任务部署的,因此我们现在将使用 ASC 重新部署 how-to-swapjdbclib 应用程序并指定所要使用的 Oracle JDBC 驱动程序版本。

1.

选择 Applications 选项卡查看部署的应用程序。

选中 how-to-swapjdbclib 复选框。

单击 Redeploy 按钮

 
2.

单击 Browse 按钮打开 File Upload 对话框。

从方法文档目录中找到 how-to-swapjdbclib.ear 文件。

 
3.

查看从服务器获取的进行重新部署操作的细节。

单击 Next 按钮继续。

 
4. 从 Deployment Tasks 页选择 Configure Class Loading 任务。
 
5.

该页列出了服务器上安装的所有共享库。

该应用程序已经导入了 oracle.jdbc 库。我们需要指定要用的版本。

在 oracle.jdbc 行的 Maximum Version to Use 列中指定 9.2

单击 OK 按钮继续。

 
6. 单击 Redeploy 按钮继续重新部署操作。
 
7.

验证重新部署操作成功。

单击 Return 按钮退出部署操作。

重新执行应用程序

how-to-swapjdbclib 应用程序现在已经配置为使用 Oracle JDBC 9.2 驱动程序,如在 oracle.jdbc:9.2 共享库中定义的一样。

要查看共享库更改的结果,重新执行应用程序来查看它显示的 JDBC 驱动程序版本。

                             
http://localhost:8888/how-to-swapjdbclib
                          

正确配置的服务器将显示

“The JDBC driver loaded is :Oracle JDBC driver version 9.2.0.5.0”

其中,该版本将与您下载并配置为新 oracle.jdbc 共享库的 Oracle JDBC 驱动程序版本匹配。

浏览器中的 HTML 页应该如下所示:

 

总结

该方法文档向您演示了如何替换 JDBC 驱动程序版本并配置应用程序来利用该版本。

现在您可以根据需要为应用程序选择要使用的库。

Left Curve
热门下载
Right Curve