免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 46146 | 回复: 3
打印 上一主题 下一主题

IBM Java Toolbox for i的一些使用技巧 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-09-01 21:20 |只看该作者 |倒序浏览
本帖最后由 double_life 于 2012-09-01 21:22 编辑

作为一种面向对象的Java编程模型,IBM Java Toolbox for i为Java应用程序访问IBM i数据与资源提供了API级的通信支持。该Java应用程序既可以运行在IBM i环境,也可以运行在非IBM i环境,比如Windows,AIX,Linux,Solaris等。从这个角度看,IBM Java Toolbox for i的工作方式有两种,一种是基于客户端的远程通信,另一种是基于服务器端的本地通信。我们重点放在服务器端应用程序的探讨,因为对于这种应用程序而言,他们可以选用的Java编程模型分为两种,一种为IBM Java Toolbox for i,另一种为Java API本身。在不同的应用场景中如何做出选择,这是本文关注的重点。

一般性考虑因素
当我们需要在IBM Java Toolbox for i与Java API两者间做出选择时,我们应该考虑的因素如下:

1. 工作方位 – 指的是应用程序的工作模式。具体而言,要做好抉择,需要回答以下问题:
•        是否仅仅运行在客户端
•        是否仅仅运行在IBM i服务器端
•        是否兼而有之

如果是第一种或者第三种,则推荐选择IBM Java Toolbox for i。对于第二种,建议尽量采用一些Native的方法。

2. 一致性/可移植性 – 这条原则主要针对对客户端与服务器端兼而有之的应用程序。IBM Java Toolbox for i采取的是统一的对外接口,不同的对内实现类的设计模式。只需要维护一套代码就可以实现应用程序的跨平台。

3. 复杂性 – 针对服务器端的应用,为提高效率,IBM Java Toolbox for i封装了基于JNI的调用。如果把JNI的调用细节暴露给Java客户端程序,则会增加程序设计的复杂性。

4. 功能 - IBM Java Toolbox for i提供了一些比Java 原生态方法更强大的类,提供针对IBM i的特定支持。其中一个典型的例子是IFS框架。该框架可被看作是Java IO框架的扩展,但是功能会更强大。比如,IBM Java Toolbox for I 提供的IFSFileOutputStream类在功能上比Java类中的FileOutputStream更强大。

5. 资源 – 从资源的角度,推荐使用Java 类。因为IBM Java Toolbox for i的Host Server通信机制就决定了这一点。对于客户端请求,IBM Java Toolbox for i首先需要与Host Server建立通信,启动一个作业。其次才是服务器端启动一个作业来服务于对应的客户端请求。而JNI的方式则绕过了Host Server,只需启用一个服务器端作业。

6. IBM i也作为客户端 – 指的是一台IBM i 系统利用IBM Java Toolbox for i 与另一台IBM i 系统通信,此时托管应用程序的IBM i 系统可以被看作是客户端。这种方式推荐使用IBM Java Toolbox for i。比如不同IBM i 系统进程通信的一个非常重要的数据载体是Data Queue。IBM Java Toolbox for i提供了对Data Queue的API级支持。

特殊性考虑因素
除上述一些因素之外,针对具体的服务器端应用,还应具体情况具体分析。下面我们针对具体服务所做的分析如下:

对于执行CL命令,我们可以选取的方式包括:
•        IBM Java Toolbox for i的CommandCall类
•        java.lang.Runtime.exec方法
相比于IBM Java Toolbox for i的CommandCall方式,java.lang.Runtime.exec的优点是跨平台。但是,缺点是无法返回执行CL命令之后对应的系统消息。而这些系统消息对于诊断CL命令的错误至关重要。

对于IFS文件系统的相关操作,我们可以选取的方式包括:
•        IBM Java Toolbox for i的IFSFile相关类
•        java.io包的相关文件类
同样地,相比于IBM Java Toolbox for i,Java具有跨平台的优点。在功能上,相比于java.io的文件相关类,IBM Java Toolbox for i的IFS相关类功能更加丰富。

对于JDBC的相关操作,我们可以选取的方式包括:
•        IBM Toolbox for Java JDBC driver
•        IBM Developer Kit for Java JDBC driver
IBM Toolbox for Java JDBC driver适用于基于Client/Server工作方式的Java应用程序。如果是服务器端应用,则推荐IBM Developer Kit for Java JDBC driver,这样可以获取最好的性能。

对于IBM i程序调用的相关操作,我们可以选取的方式包括:
•        IBM Java Toolbox for i的ProgramCall类
•        Java Native Interface (JNI) 调用
对于服务器端应用,推荐JNI方式的本地调用,以获取最好的性能。

IBM Java Toolbox for i提供的工具类
IBM Java Toolbox for i提供Trace 对象允许 Java 程序记录跟踪点和诊断信息。此信息帮助再现和诊断问题。

Trace 类记录下列类别的信息:
转换        记录 Unicode 和本机代码页之间的字符集转换。应该只有IBM Java Toolbox for i类才使用此类别。
信息        跟踪程序的整个流程。
警告        记录关于程序能够从中恢复的错误的信息。
错误        记录导致异常的附加错误。
诊断        记录状态信息。
数据流        记录在 IBM i 和 Java 程序之间流动的数据。应该只有IBM Java Toolbox for i 类才使用此类别。
PCML        记录在 IBM i 和 Java 程序之间流动的基于PCML的数据
代理        IBM Java Toolbox for i类使用此类别来记录客户机和代理服务器之间的数据流。
全部        此类别用来同时启用或禁用所有以上类别的跟踪。不能将跟踪信息直接记录到此类别。

IBM Java Toolbox for i 类也使用跟踪类别。当 Java 程序启用记录后,IBM Java Toolbox for i 信息就与应用程序记录的信息包括在一起。

您既可以对单个类别启动跟踪,也可以对一组类别启用跟踪。在选择类别之后,使用 setTraceOn 方法来打开或关闭跟踪。 使用 log 方法来将数据写至记录。

过多的记录会影响性能。使用 isTraceOn 方法来查询跟踪的当前状态。Java 程序可以使用此方法来确定它是否应该在调用 log 方法之前构建跟踪记录。在记录关闭时调用 log 方法虽然不是错误,但要花更多时间。

缺省操作是将记录信息写至标准输出。要将记录重定向至文件, 请从 Java 应用程序中调用 setFileName() 方法。通常,因为大多数浏览器不允许 applet 写入本地文件系统,所以这只适用于 Java 应用程序。

缺省情况下,记录是关闭的。Java 程序应该为用户提供打开记录的方法,以便容易启用记录。例如,应用程序可以对命令行参数作语法分析,在参数中指示了应该记录哪一类数据。当需要记录信息时,用户可设置此参数。

以下示例显示如何使用 Trace 类。

清单 1:以下是如何使用 setTraceOn 方法,以及如何使用 log 方法将数据写至记录的示例。
// Enable diagnostic, information, and warning logging.
Trace.setTraceDiagnosticOn(true);
Trace.setTraceInformationOn(true);
Trace.setTraceWarningOn(true);
// Turn tracing on.
Trace.setTraceOn(true);
// ... At this point in the Java program, write to the log.
Trace.log(Trace.INFORMATION, "Just entered class xxx, method xxx");
// Turning tracing off.
Trace.setTraceOn(false);

清单 2:下列示例显示如何使用跟踪。对于编写使用跟踪的代码,方法 2 是更为可取的方法。
// Method 1 - build a trace record then call the log method and let the trace class determine if the data should be logged. This will work but will be slower than the //following code.
String traceData = new String("Just entered class xxx, data = ");
traceData = traceData + data + "state = " + state;
Trace.log(Trace.INFORMATION, traceData);
// Method 2 - check the log status before building the information to log. This is faster when tracing is not active.
if (Trace.isTraceOn() && Trace.isTraceInformationOn())
{
String traceData = new String("just entered class xxx, data = ");
traceData = traceData + data + "state = " + state;
Trace.log(Trace.INFORMATION, traceData);
}

清单 3:下列示例显示如何使用跟踪并重定向到文件。
// Create a component string. It is more efficient to create an object than many String literals.
String myComponent1 = "com.myCompany.xyzComponent";
String myComponent2 = "com.myCompany.abcComponent";
// Send IBM Toolbox for Java and the component trace data each to separate files.
// The trace will contain all trace information, while each component log file will only contain trace information specific to that component. If a Trace file is not specified, all trace data will go to standard out with the component specified in front of each trace message.
Trace.setTraceOn(true); // Turn trace on.
Trace.setTraceInformationOn(true); // Enable information messages.
// Log component specific trace data or general IBM Toolbox for Java trace data.
Trace.setFileName("c:\\bit.bucket");
Trace.setFileName(myComponent1, "c:\\Component1.log");

论坛徽章:
0
2 [报告]
发表于 2012-10-13 16:37 |只看该作者
顶,系统全面的简单介绍了。谢谢!

论坛徽章:
0
3 [报告]
发表于 2012-12-29 15:17 |只看该作者
谢谢!如果有需要JT400的相关用法,我可以提供进一步帮助。

论坛徽章:
0
4 [报告]
发表于 2016-04-27 17:10 |只看该作者
你好,有什么方法可以读执行命令后的结果么,

对于执行CL命令,我们可以选取的方式包括:
•        IBM Java Toolbox for i的CommandCall类
•        java.lang.Runtime.exec方法
相比于IBM Java Toolbox for i的CommandCall方式,java.lang.Runtime.exec的优点是跨平台。但是,缺点是无法返回执行CL命令之后对应的系统消息。而这些系统消息对于诊断CL命令的错误至关重要。


回复 3# double_life


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP