写了一个Java swing小程序,用于监控AS400的Job状态,并定时通过CORBA链接Domino发送邮件。这是核心的一个类(中断了几年的Java学习,现在看来部分细节处理的不是很好,分享嘛,无所谓,呵呵)。两个要点是:1,如何使用JTOpen包操作AS400对象;2,利用CORBA操作Domino对象。
准备工作:1,引入最新的JT400.jar;2,引入Notes目录下NCSO.jar(可以到其他电脑拷贝,CORBA的好处就是不需要安装Notes客户端);3,Domino开始DIIOP服务(可以Google)。
- import java.util.Calendar;
- import java.util.Enumeration;
- import java.util.Map;
- import java.util.Timer;
- import java.util.TimerTask;
- import javax.swing.JButton;
- import javax.swing.JTextArea;
- import lotus.domino.Database;
- import lotus.domino.Document;
- import lotus.domino.NotesException;
- import lotus.domino.NotesFactory;
- import lotus.domino.RichTextItem;
- import lotus.domino.Session;
- import com.ibm.as400.access.AS400;
- import com.ibm.as400.access.Job;
- import com.ibm.as400.access.JobList;
- import com.mmm.media.AudioPlayWave;
- public class MonitorTask extends TimerTask {
- private Map<String, Object> map;
- private JTextArea txtArea;
- private JButton btnStart;
- private JButton btnStop;
- private String jobNameStr;
- private String mailAddressStr;
- private String jobNumStr;
- private String jobUsrStr;
- private String msgwWavStr;
- private String jobWavStr;
- private AS400 as400;
- private JobList jobList;
- private Session session;
- private Database ndb;
- private Timer timer;
- private int count;
- public MonitorTask(Map<String, Object> jMap, Timer pTimer){
- count = 0;
- map = jMap;
- timer = pTimer;
- jobNameStr = (String)map.get("jobNameStr");
- mailAddressStr = (String)map.get("mailAddressStr");
- jobNumStr = (String)map.get("jobNumStr");
- jobUsrStr = (String)map.get("jobUsrStr");
- msgwWavStr = (String)map.get("msgwWavStr");
- jobWavStr = (String)map.get("jobWavStr");
- txtArea = (JTextArea) map.get("txtArea");
- btnStart = (JButton) map.get("btnStart");
- btnStop = (JButton) map.get("btnStop");
- txtArea.append("Initialized MonitorTask\n");
- }
- public void disconnect() {
- try {
- if (as400 != null){
- as400.disconnectAllServices();
- //txtArea.append("AS400 is connected?: " + as400.isConnectionAlive() + "\n");
- }
- } catch (Exception e) {
- // TODO Auto-generated catch block
- txtArea.append(e.toString() + "\n");
- }
- try {
- if (ndb != null){
- ndb.recycle();
- }
- if (session != null) {
- session.recycle();
- }
- } catch (NotesException e1) {
- // TODO Auto-generated catch block
- txtArea.append(e1.toString() + "\n");
- //e.printStackTrace();
- }
- txtArea.append("Server Disconnected\n");
- }
- @Override
- public void run() {
- count++;
- btnStart.setEnabled(false);
- btnStop.setEnabled(false);
- boolean hasMSGW = false;
- boolean allOutq = true;
- // TODO Auto-generated method stub
- try {
- String temp;
- String msg = "Circulate(" + String.valueOf(count) + ") at " + Calendar.getInstance().getTime().toString() + "\n";
- txtArea.setText(msg);
- if (as400 == null) {
- as400 = new AS400((String)map.get("asServerStr"), (String)map.get("asAcctStr"), (String)map.get("asPSWDStr"));
- jobList = new JobList(as400);
- msg += temp = "Open AS400 server at " + Calendar.getInstance().getTime().toString() + "\n";
- txtArea.append(temp);
- }
- txtArea.append("AS400 is connected?: " + as400.isConnectionAlive() + "\n");
- Enumeration<Job> list;
- jobList.clearJobSelectionCriteria();
- jobList.addJobSelectionCriteria(JobList.SELECTION_PRIMARY_JOB_STATUS_ACTIVE, Boolean.TRUE);
- jobList.addJobSelectionCriteria(JobList.SELECTION_PRIMARY_JOB_STATUS_JOBQ, Boolean.TRUE);
- jobList.addJobSelectionCriteria(JobList.SELECTION_PRIMARY_JOB_STATUS_OUTQ, Boolean.FALSE);
- if (!"".equals(jobNameStr)){
- jobList.addJobSelectionCriteria(JobList.SELECTION_JOB_NAME, jobNameStr);
- }
- if (!"".equals(jobNumStr)){
- jobList.addJobSelectionCriteria(JobList.SELECTION_JOB_NUMBER, jobNumStr);
- }
- if (!"".equals(jobUsrStr)){
- jobList.addJobSelectionCriteria(JobList.SELECTION_USER_NAME, jobUsrStr);
- }
- msg += temp = "\n--- Status of job: \"" + jobNumStr + "/" + jobUsrStr + "/" + jobNameStr + "\" ---\n";
- txtArea.append(temp);
- list = jobList.getJobs();
- while (list.hasMoreElements()) {
- Job j = list.nextElement();
- allOutq = false;
- msg += temp = j.getNumber() + "/" + j.getUser() + "/" + j.getName() + "\t-\t" + j.getType() + "-"
- + "-" + j.getStatus() + "-" + j.getJobMessageQueueFullAction() + "-" +j.getInquiryMessageReply() + "\n";
- txtArea.append(temp);
- }
- if (allOutq){
- msg += temp = "No jobs in active status\n";
- txtArea.append(temp);
- }
- jobList.clearJobSelectionCriteria();
- jobList.addJobSelectionCriteria(JobList.SELECTION_PRIMARY_JOB_STATUS_ACTIVE, Boolean.TRUE);
- jobList.addJobSelectionCriteria(JobList.SELECTION_PRIMARY_JOB_STATUS_JOBQ, Boolean.TRUE);
- jobList.addJobSelectionCriteria(JobList.SELECTION_PRIMARY_JOB_STATUS_OUTQ, Boolean.FALSE);
- jobList.addJobSelectionCriteria(JobList.SELECTION_ACTIVE_JOB_STATUS, Job.ACTIVE_JOB_STATUS_WAIT_MESSAGE);
- if (!((Boolean)map.get("mntMSGWBl")).booleanValue()){
- if (!"".equals(jobNameStr)){
- jobList.addJobSelectionCriteria(JobList.SELECTION_JOB_NAME, jobNameStr);
- }
- if (!"".equals(jobNumStr)){
- jobList.addJobSelectionCriteria(JobList.SELECTION_JOB_NUMBER, jobNumStr);
- }
- if (!"".equals(jobUsrStr)){
- jobList.addJobSelectionCriteria(JobList.SELECTION_USER_NAME, jobUsrStr);
- }
- }
- msg += temp = "\n--- Jobs in waiting message ---\n";
- txtArea.append(temp);
- list = jobList.getJobs();
- while (list.hasMoreElements()) {
- hasMSGW = true;
- Job j = list.nextElement();
- msg += temp = j.getNumber() + "/" + j.getUser() + "/" + j.getName() + "\t-\t" + j.getType() + "-"
- + "-" + j.getStatus() + "-" + j.getJobMessageQueueFullAction() + "-" +j.getInquiryMessageReply() + "\n";
- txtArea.append(temp);
- }
- if (!hasMSGW){
- msg += temp = "No jobs in MSGW status\n";
- txtArea.append(temp);
- }
- txtArea.append("\n");
- /*if(count ==1){
- allOutq = false;
- hasMSGW = false;
- }
- else if (count==2){
- allOutq = false;
- hasMSGW = true;
- }
- else {
- allOutq = true;
- hasMSGW = true;
- }*/
- if (allOutq && !"".equals(jobWavStr)){
- AudioPlayWave audioPlayWave = new AudioPlayWave(jobWavStr, txtArea);
- audioPlayWave.start();
- }
- else if (hasMSGW && !"".equals(msgwWavStr)){
- AudioPlayWave audioPlayWave = new AudioPlayWave(msgwWavStr, txtArea);
- audioPlayWave.start();
- }
- if (!"".equals(mailAddressStr)){
- try {
- if (session == null || !session.isValid()){
- session = NotesFactory.createSession((String)map.get("notesServerStr"), (String)map.get("notesAcctStr"), (String)map.get("notesPSWDStr"));
- ndb = session.getDatabase(session.getServerName(), (String)map.get("notesDBStr"), false);
- txtArea.append("Open Domino server at " + Calendar.getInstance().getTime().toString() + "\n");
- }
- txtArea.append("Domino Session is valid?: " + session.isValid() + "\n");
- //Vector<String> sendTo = new Vector<String>();
- //sendTo.add(mailAddressStr);
- Document mail = ndb.createDocument();
- if (allOutq){
- mail.replaceItemValue("Subject", "AS400 Job monitor: The job(s) you monitored is outq");
- }
- else if (hasMSGW){
- mail.replaceItemValue("Subject", "AS400 Job monitor: The job(s) you monitored has message waiting for reply");
- }
- else {
- mail.replaceItemValue("Subject", "AS400 Job monitor status");
- }
- mail.replaceItemValue("SendTo", mailAddressStr.split(";"));
- //mail.replaceItemValue("Principal", "EForm 3MChina/CN-China/3M/US");
- RichTextItem body = mail.createRichTextItem("Body");
- body.appendText(msg);
- mail.send(false);
- txtArea.append("Send mail successfully" + "\n");
- mail.remove(true);
- body.recycle();
- mail.recycle();
- } catch (NotesException e) {
- // TODO Auto-generated catch block
- txtArea.append("Send Mail Error: " + e.toString() + "\n");
- e.printStackTrace();
- }
- }
- else {
- txtArea.append("Skip send mail" + "\n");
- }
- } catch (Exception e) {
- txtArea.append("Error in run()" + e.toString() + "\n");
- hasMSGW = true;
- allOutq = false;
- if (!"".equals(msgwWavStr)){
- AudioPlayWave audioPlayWave = new AudioPlayWave(msgwWavStr, txtArea);
- audioPlayWave.start();
- }
- e.printStackTrace();
- } finally {
- if (allOutq){
- this.disconnect();
- this.cancel();
- timer.cancel();
- btnStart.setEnabled(true);
- btnStop.setEnabled(false);
- txtArea.append("Monitor stops at " + Calendar.getInstance().getTime().toString() + "\n");
- }
- else {
- btnStop.setEnabled(true);
- txtArea.append("Monitor will continue after " + (String)map.get("frequencyStr") + " minutes.\n");
- }
- }
- }
- }