您的当前位置:首页正文

java调用AS400中对连接的管理

2023-03-03 来源:易榕旅网
面讨论建立、启动和结束与 AS/400 的连接,并提供了一些代码示例。要连接到 AS/400 系统,Java 程序必须建立一个 AS400 对象。对于每一种 AS/400 服务器类型,AS400 对象最多包含一个套接字连接。在 AS/400 上,一个服务回应一个作业,它也是 AS/400 上的数据的接口。 注意:如果是在建立“企业 Java Bean”,则需要遵从 EJB 规范,即连接期间不允许 AS/400 Toolbox for Java 线程。 在 AS/400 上,与每个服务器的每个连接都有其各自的作业。有不同的服务器支持下列各项:

     

JDBC

程序调用和命令调用 集成文件系统 网络打印 数据队列 记录级存取

注意:如果应用程序不尝试同时执行两个都需要网络打印服务器的任务,则打印类将对每个 AS/400 对象使用一个套接字连接。 如果需要,一个打印类可建立与网络打印服务器的多个附加套接字连接。在 5 分钟之内未使用的额外会话将断开。

Java 程序可控制与 AS/400 的连接数目。为了优化通信性能,Java 程序可为同一个 AS/400 系统建立多个 AS400 对象,如图 1 所示。这建立了与 AS/400 的多个套接字连接。

图 1. 为同一个 AS/400 系统建立多个 AS400 对象和套接字连接的 Java 程序

为了节省 AS/400 资源,仅建立一个 AS400 对象,如图 2 所示。此方法减少了连接的数目,从而减少了在 AS/400 系统上使用的资源量。

图 2. 为同一个 AS/400 系统建立单个 AS400 对象和套接字连接的 Java 程序

下列示例显示如何建立和使用 AS400 类:

示例 1:在下列示例中,将建立两个 CommandCall 对象,它们向同一个 AS/400 系统发送命令。由于 CommandCall 对象使用同一个 AS400 对象,所以只建立了一个与 AS/400 系统的连接。 // Create an AS400 object.

AS400 sys = new AS400(\"mySystem.myCompany.com\");

// Create two command call objects that use

// the same AS400 object.

CommandCall cmd1 = new CommandCall(sys,\"myCommand1\"); CommandCall cmd2 = new CommandCall(sys,\"myCommand2\");

// Run the commands. A connection is made when the

// first command is run. Since they use the same

// AS400 object the second command object will use

// the connection established by the first command.

cmd1.run(); cmd2.run();

示例 2:在下列示例中,将建立两个 CommandCall 对象,它们向同一个 AS/400 系统发送命令。由于 CommandCall 对象使用不同的 AS400 对象,所以建立两个与 AS/400 系统的连接。

// Create two AS400 objects to the same AS/400 system.

AS400 sys1 = new AS400(\"mySystem.myCompany.com\"); AS400 sys2 = new AS400(\"mySystem.myCompany.com\");

// Create two command call objects. They use

// different AS400 objects.

CommandCall cmd1 = new CommandCall(sys1,\"myCommand1\"); CommandCall cmd2 = new CommandCall(sys2,\"myCommand2\");

// Run the commands. A connection is made when the

// first command is run. Since the second command

// object uses a different AS400 object, a second

// connection is made when the second command is run.

cmd1.run(); cmd2.run(); 示例 3:在下列示例中,通过使用同一个 AS400 对象,建立一个 CommandCall 对象和一个 IFSFileInputStream 对象。由于 CommandCall 对象和 IFSFileInput Stream 对象使用 AS/400 系统上的不同服务,所以建立了两个连接。 // Create an AS400 object.

AS400 sys = new AS400(\"mySystem.myCompany.com\");

// Create a command call object.

CommandCall cmd = new CommandCall(sys,\"myCommand1\");

// Create the file object. Creating it causes the

// AS400 object to connect to the file service.

IFSFileInputStream file = new IFSFileInputStream(sys,\"/myfile\");

// Run the command. A connection is made to the

// command service when the command is run.

cmd.run();

启动和结束连接Java 程序可控制连接的启动时间和结束时间。缺省情况下,如果需要 AS/400 上的信息,就会启动一个连接。通过对 AS400 对象调用

connectService() 方法,从而预先与 AS/400 连接,就可以精确地控制何时建

立连接。

下列示例显示连接到 AS/400 及从 AS/400 断开连接的 Java 程序。 示例 1:此示例显示如何预先与 AS/400 连接: // Create an AS400 object.

AS400 system1 = new AS400(\"mySystem.myCompany.com\");

// Connect to the command service. Do it now

// instead of when data is first sent to the

// command service. This is optional since the

// AS400 object will connect when necessary.

system1.connectService(AS400.COMMAND);

示例 2:一个连接一旦启动,便由 Java 程序负责断开其连接,此操作由 AS400 对象隐式完成或由 Java 程序显式完成。通过对 AS400 对象调用

disconnectService() 方法断开与 Java 程序的连接。为了改进性能,Java 程序应仅在程序完成一个服务后才断开。若 Java 程序还未完成服务就断开,当需要来自服务的数据时,AS400 对象将重新连接(如果有可能重新连接的话)。 图 3 显示断开第一个集成文件系统对象连接的连接将如何仅结束 AS400 对象连接的单个实例,而不是结束所有集成文件系统对象连接。 图 3. 对 AS400 对象实例使用自已的服务的单个对象被断开

该示例显示 Java 程序如何断开一个连接: // Create an AS400 object.

AS400 system1 = new AS400(\"mySystem.myCompany.com\");

// ... use command call to send several commands

// to the AS/400. Since connectService() was not

// called, the AS400 object automatically

// connects when the first command is run.

// All done sending commands so disconnect the

// connection.

system1.disconnectService(AS400.COMMAND);

示例 3:使用同一服务并共享同一 AS400 对象的多个对象共享一个连接。断开将结束对 AS400 对象的每个实例使用同一服务的所有对象的链接,如图 4 所示。

图 4. 对 AS400 对象使用同一服务的所有对象都被断开

例 如,两个 CommandCall 对象使用同一个 AS400 对象。当调用

disconnectService() 时,两个 CommandCall 对象的连接都结束。当对第二个 CommandCall 对象调用 run() 方法时,AS400 对象必须重新与该服务连接: // Create an AS400 object.

AS400 sys = new AS400(\"mySystem.myCompany.com\");

// Create two command call objects.

CommandCall cmd1 = new CommandCall(sys,\"myCommand1\"); CommandCall cmd2 = new CommandCall(sys,\"myCommand2\");

// Run the first command

cmd1.run();

// Disconnect from the command service.

sys.disconnectService(AS400.COMMAND);

// Run the second command. The AS400 object

// must reconnect to the AS/400.

cmd2.run();

// Disconnect from the command service. This

// is the correct place to disconnect.

sys.disconnectService(AS400.COMMAND);

示例 4:并非所有 AS/400 Toolbox for Java 类都会自动重新连接。因为文件可能已更改,所以集成文件系统类 中的某些方法调用不会重新连接。文件断开时,其他某个进程可能已删除该文件或更改了其中的内容。在下列示例中,两个文件对象使用同一个 AS400 对象。当调用 disconnectService() 时,两个文件对象的连接都结束。因为第二个 IFSFileInputStream 对象不再与 AS/400 连接,所以对它的 read() 失败。 // Create an AS400 object.

AS400 sys = new AS400(\"mySystem.myCompany.com\");

// Create two file objects. A connection to the

// AS/400 is created when the first object is

// created. The second object uses the connection

// created by the first object.

IFSFileInputStream file1 = new IFSFileInputStream(sys,\"/file1\"); IFSFileInputStream file2 = new IFSFileInputStream(sys,\"/file2\");

// Read from the first file, then close it.

int i1 = file1.read(); file1.close();

// Disconnect from the file service.

sys.disconnectService(AS400.FILE);

// Attempt to read from the second file. This

// fails because the connection to the file service

// no longer exists. The program must either

// disconnect later or have the second file use a

// different AS400 object (which causes it to

// have its own connection).

int i2 = file2.read();

// Close the second file.

file2.close();

// Disconnect from the file service. This

// is the correct place to disconnect.

sys.disconnectService(AS400.FILE);

因篇幅问题不能全部显示,请点此查看更多更全内容