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);
因篇幅问题不能全部显示,请点此查看更多更全内容