忘记密码   免费注册 查看新帖 |

ChinaUnix.net

  平台 论坛 博客 文库 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
查看: 22356 | 回复: 3

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

论坛徽章:
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
发表于 2012-10-13 16:37 |显示全部楼层
顶,系统全面的简单介绍了。谢谢!

论坛徽章:
0
发表于 2012-12-29 15:17 |显示全部楼层
谢谢!如果有需要JT400的相关用法,我可以提供进一步帮助。

论坛徽章:
0
发表于 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


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

本版积分规则

【内含福利】这个大会由AI推荐~
福利投放:从ChinaUnix社区申领报名可获得600元门票;到场可获得小米手环3一个

40+场AI前沿主题演讲, 五大AI专题论坛, 1000平米AI实景应用展区, 更有30+大咖亲临, 美国工程院院士丛京生、中国工程院院士高文、美国杜克大学终身副教授陈怡然、百度深度学习技术平台部负责人马艳军等顶级研究专家为你带来最前沿的AI分享。 金秋九月,AICC2018人工智能计算大会 与你,邀约北京!

报名了解>>
  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:wangnan@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP