- 论坛徽章:
- 0
|
使用IASP后在应用层面的修改
为了使应用程序能够访问 IASP,您需要在开发时以及运行时做一些更改。对于大多数应用程序本身,主要应考虑的事情是:创建库或集合;执行其他一些可在作业名称空间外的功能,以及访问数据。另外,为作业或线程设置名称空间以及管理库列表也是编写代码时应考虑的事情,但通常也可以通过在运行时评估工作管理设置来处理这些问题。
让我们来看看如何创建库。虽然大多数应用程序不会以编程方式创建库,但是如果您正在使用 IASP,而且应用程序确实要创建库,那么正好可以趁此机会在 IASP 中创建这些库。缺省情况下总是在系统 ASP(ASP 1)中创建库。鉴于此种情况,程序员需要指定其他一些关于库的信息,以便在 IASP 中创建这些库。从 V5R2 开始,已经修改了 CRTLIB CL 命令(和相应的 SQL 语句),便于您指定一个将要在其中创建库的 ASP 组。例如:
CRTLIB LIB(HR)
ASP(*ASPDEV)
ASPDEV(PRODIASP)
TEXT('Personnel Files')
ASP(*ASPDEV) 参数表明将可以通过 ASPDEV 参数的值确定要创建库的目标 ASP。在该例中,我们指定将在 IASP“PRODIASP”中创建库“HR”。如果您在应用程序中使用 SQL 创建集合或模式(这和库一样),您可以按照下列方式在 IASP 中创建它们:
CREATE SCHEMA hr IN ASP prodiasp
或
CREATE COLLECTION hr IN ASP prodiasp
所有这些技术都可以用来在 IASP 中创建库。在其中创建库的 IASP 不需要位于执行此次创建的作业或线程的名称空间中。然而,在 IASP 中创建库后,需要将 IASP 添加到线程或作业的名称空间中,以充分利用这个库的功能,以及访问库中的对象。除了创建库,可对当前作业或线程的名称空间外的对象,执行一些其他类型的操作。我们接下来将会探讨其中一些操作。
有几个 CL 命令和相关的 API 可以引用当前名称空间外的对象。再次申明一下,这里我不会讨论全部内容,只会涉及应用程序中最可能使用的操作。与保存/恢复、对象权限、移动或复制对象、显示对象描述、显示或清除库相关的功能都可以引用当前名称空间外的对象。执行这些功能的命令,如 CRTLIB CL 命令,都已经过修改以包含 ASP 设备(ASPDEV)参数。例如,SAVOBJ 命令有一个缺省的 ASPDEV 值“*”,这意味着这个保存操作将会把对象放在:系统 ASP(ASP 1 号),所有基本的用户 ASP(ASP 2-32 号),或如果当前的线程具有一个 ASP 组集,则所有对象将包含在 ASP 组中的独立 ASP 中。如果应用程序需要保存位于当前线程名称空间外的 ASP 中的对象,那么需要更改该参数以指定特定的 ASP 组名。类似地,当使用 CLRLIB 命令时,为 ASPDEV 参数指定 *SYSBAS 值将只搜索指定库的 ASP 1-32,并不会对 IASP 中的库采取任何操作。在应用程序内,需要评估那些对能在当前线程的名称空间之外运行的命令或 API 的调用,来确定是否需要进行更改,以便确保该操作包含或排除所期望的 ASP。
对使用 IASP 的应用程序来说,也许最常做的更改就是改变访问数据库文件的方式。这适用于要访问 IASP 中数据的远程应用程序,也适用于那些正利用 IASP 在本地系统上运行的应用程序。让我们看看当处理 IASP 时,数据库连通性如何发生了更改。
在创建了一个主 IASP 后,同时也创建了相关的 ASP 组。在创建阶段,系统管理员或数据库管理员可以选择一个数据库名称,该数据库将会表示此 ASP 组中存储在 IASP 上的所有数据。如果将辅 IASP 也添加到了 ASP 组,那么辅 IASP 中的所有库也将作为主 IASP 的数据库的一部分。这种设计促使同一 ASP 组中的 IASP 内的所有库名都保持唯一。在迁移到 IASP 之前,程序员不必关心连接到 iSeries 上的哪个数据库。其中一个缺省的数据库表示了系统 ASP(ASP 1)以及所有基本用户 ASP(ASP 2–32)中的所有库。既然 OS/400 或 i5/OS 库可位于独立数据库中的 IASP 中,那么您的应用程序需要连接到正确的数据库,以便访问所需的数据。
如果您有一些应用程序正使用 SQL 来访问现在已移到 IASP 上的数据,那么将需要更改这些 SQL 连接语句,以指定应用程序正在连接的数据库名称。例如,如果您在系统“myi5”上创建了一个数据库名称为“prodiasp”的 IASP,那么您要将 SQL 连接语句从:
CONNECT TO myi5 USER……
更改为
CONNECT TO prodiasp USER……
这个原则同样也适用于 JDBC 或 ODBC 连接。如果 IASP 数据库的名称不同于先前指定到 iSeries 上的 *LOCAL 数据库目录项的名称,那么要访问 IASP 中的数据库对象,就要更改这些连接语句以连接到新的 IASP 数据库。
除了存取数据以及针对 IASP 中的对象执行操作需要做一些更改之外,可能还需要更改应用程序中的作业管理。如果某个应用程序在它正在运行的线程的名称空间中有一个 ASP 组,那么,通常是通过更改启动作业所使用的作业描述就可以了。一般情况下,也可以采用同样的方式来处理作业的库列表。然而,当应用程序需要以编程方式建立 ASP 组,并可能会将 IASP 中的库添加到作业的库列表中时,则可以通过在应用程序内调用 SETASPGRP 命令来完成这些任务。该 CL 命令允许应用程序从当前线程的名称空间中添加和除去 ASP 组。应用程序最常执行的另一个作业管理任务就是作业提交。如果应用程序要提交作业,那么需要确保可使用执行 SBMJOB 所需的资源来提交作业。这包括要调用的程序和使用的作业描述等等。如果这些对象位于 IASP 中,那么您可能要更改应用程序,以便能从 IASP 访问这些对象。
Initial ASP group (INLASPGRP)Specifies the initial setting for the auxiliary storage pool (ASP) group name for the initial thread of jobs using this job description. A thread can use the Set ASP Group (SETASPGRP) command to change its library name space. When an ASP group is associated with a thread, all libraries in the independent ASPs in the ASP group are accessible and objects in those libraries can be referenced using regular library-qualified object name syntax. The libraries in the independent ASPs in the specified ASP group plus the libraries in the system ASP (ASP number 1) and basic user ASPs (ASP numbers 2 - 32) form the library name space for the thread.
Restrictions:
- The job descriptions QGPL/QDFTJOBD and QGPL/QDFTSVR cannot be changed to specify the name of an ASP group. For these job descriptions, the INLASPGRP must be *NONE.
*NONE Specifies the initial thread of jobs using this job description will be started with no ASP group. The library name space will not include libraries from any ASP group. Only the libraries in the system ASP and any basic user ASPs will be in the library name space. name Specifies the name of the ASP group to be set for the initial thread of jobs using this job description. The ASP group name is the name of the primary ASP device within the ASP group. All libraries from all ASPs in this ASP group will be included in the library name space.
[ 本帖最后由 bjtzh 于 2009-3-8 11:19 编辑 ] |
|