gpt4 book ai didi

java - 如何从 AS400 检索特定的 JobList?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:48:17 25 4
gpt4 key购买 nike

我正在尝试检索符合我的条件的 Activity 进程列表。我已经有了一个使用 JobList 的工作实现,它使用 as400 对象:

// New as400 object

as400Environment = new AS400();
as400Environment.setSystemName(systemName);
as400Environment.setUserId(userID);
as400Environment.setPassword(password);

// New Job list
JobList jobList = new JobList(as400Environment);
Enumeration e = jobList.getJobs();

while(e.hasMoreElements()) {

// Store current job
Job j = (Job) e.nextElement();

// Do things with the job ........
}

但这需要很长时间才能找到我需要的东西的根源,在某些计算机上最多需要 10 分钟。

我已经开始考虑使用子系统:

 Subsystem sbs = new Subsystem(as400Environment, subsystRequired, subsystRequired);

但我似乎无法以字符串形式获取工作列表,只能以整数形式告诉我有多少工作。

无论如何,是否有立即返回一个开销有限的工作列表?我现在仍在查看 API,但如果有人有任何指导,我将不胜感激。

最佳答案

可以在系统上请求工作的子集;让 IBM i 执行过滤工作,而不是返回所有作业并让您的代码执行该过滤工作。是否回答16359926帮助?

编辑:粗滤器代码

我想我理解了这个问题。您想要选择在特定子系统中运行的作业,但 addJobSelectionCriteria 不包括 SUBSYSTEM 作为可能的筛选选项之一。减少返回给您的工作数量的一种方法是仅过滤 Activity 工作:

JobList jobList = new JobList(system);
jobList.clearJobSelectionCriteria();
jobList.addJobSelectionCriteria(JobList.SELECTION_PRIMARY_JOB_STATUS_ACTIVE, Boolean.TRUE);
jobList.addJobSelectionCriteria(JobList.SELECTION_PRIMARY_JOB_STATUS_JOBQ, Boolean.FALSE);
jobList.addJobSelectionCriteria(JobList.SELECTION_PRIMARY_JOB_STATUS_OUTQ, Boolean.FALSE);

获得 Activity 作业列表后,您需要通过遍历枚举来测试代码中的子系统。提高效率的一种方法是让对 getJobs() 的调用在它返回的属性列表中包含子系统名称。这将允许使用 getValue() 而不是 getSubsystem()。 getSubsystem() 会导致再次调用系统 API 以获取该信息,因此效率较低。

jobList.clearJobAttributesToRetrieve();
jobList.addJobAttributeToRetrieve(Job.SUBSYSTEM);

那么,这里有一个简单的例子:

import java.util.*;
import com.ibm.as400.access.*;

public class TestGetJobList {
public static void main(String[] args) {
int raw=0;
int selected=0;

try {
AS400 system = new AS400();

// Create a list and subset it
// looking for all jobs in QINTER, but subsystem is not in the list of things we can filter on
// so filter the list as small as possible and then this code will pick through that list
JobList jobList = new JobList(system);
jobList.clearJobSelectionCriteria();
jobList.addJobSelectionCriteria(JobList.SELECTION_PRIMARY_JOB_STATUS_ACTIVE, Boolean.TRUE);
jobList.addJobSelectionCriteria(JobList.SELECTION_PRIMARY_JOB_STATUS_JOBQ, Boolean.FALSE);
jobList.addJobSelectionCriteria(JobList.SELECTION_PRIMARY_JOB_STATUS_OUTQ, Boolean.FALSE);

// we can eliminate another call to the system API by adding subsystem to the attributes retrieved in the getJobList()
jobList.clearJobAttributesToRetrieve();
jobList.addJobAttributeToRetrieve(Job.SUBSYSTEM);
jobList.addJobAttributeToRetrieve(Job.JOB_NAME);
jobList.addJobAttributeToRetrieve(Job.JOB_NUMBER);
jobList.addJobAttributeToRetrieve(Job.USER_NAME);

// get the list of jobs
Enumeration list = jobList.getJobs();

while (list.hasMoreElements()) {
Job j= (Job) list.nextElement();
raw++; // count them

// choose jobs in one subsystem
// this is pretty efficient because we told getJobs() to include the subsystem in the first retrieval
if (j.getValue(Job.SUBSYSTEM).toString().substring(0, 6).equals("QINTER")) {
selected++;
System.out.println(j.getValue(Job.JOB_NUMBER) + "/" +
j.getValue(Job.USER_NAME) + "/" +
j.getValue(Job.JOB_NAME) );
}
}

System.out.println(raw + " raw jobs found");
System.out.println(selected + " QINTER jobs found");
System.exit(0);

} catch (Exception e) {
e.printStackTrace();
}

}
}

这处理了 500 个 Activity 作业,在 1 秒内在 QINTER 中选择了大约 75 个。

关于java - 如何从 AS400 检索特定的 JobList?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23269918/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com