Java监控AS400 Job,并使用CORBA通过Domino发送邮件

   写了一个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)。

 

  
  
  
  
  1. import java.util.Calendar; 
  2. import java.util.Enumeration; 
  3. import java.util.Map; 
  4. import java.util.Timer; 
  5. import java.util.TimerTask; 
  6.  
  7. import javax.swing.JButton; 
  8. import javax.swing.JTextArea; 
  9.  
  10. import lotus.domino.Database; 
  11. import lotus.domino.Document; 
  12. import lotus.domino.NotesException; 
  13. import lotus.domino.NotesFactory; 
  14. import lotus.domino.RichTextItem; 
  15. import lotus.domino.Session; 
  16.  
  17. import com.ibm.as400.access.AS400; 
  18. import com.ibm.as400.access.Job; 
  19. import com.ibm.as400.access.JobList; 
  20. import com.mmm.media.AudioPlayWave; 
  21.  
  22. public class MonitorTask extends TimerTask { 
  23.     private Map<String, Object> map; 
  24.     private JTextArea txtArea; 
  25.     private JButton btnStart; 
  26.     private JButton btnStop; 
  27.     private String jobNameStr; 
  28.     private String mailAddressStr; 
  29.     private String jobNumStr; 
  30.     private String jobUsrStr; 
  31.     private String msgwWavStr; 
  32.     private String jobWavStr; 
  33.      
  34.     private AS400 as400; 
  35.     private JobList jobList; 
  36.     private Session session; 
  37.     private Database ndb; 
  38.     private Timer timer; 
  39.     private int count; 
  40.      
  41.     public MonitorTask(Map<String, Object> jMap, Timer pTimer){ 
  42.             count = 0
  43.             map = jMap; 
  44.             timer = pTimer; 
  45.             jobNameStr = (String)map.get("jobNameStr"); 
  46.             mailAddressStr = (String)map.get("mailAddressStr"); 
  47.             jobNumStr = (String)map.get("jobNumStr"); 
  48.             jobUsrStr = (String)map.get("jobUsrStr"); 
  49.             msgwWavStr  = (String)map.get("msgwWavStr"); 
  50.             jobWavStr = (String)map.get("jobWavStr"); 
  51.             txtArea = (JTextArea) map.get("txtArea"); 
  52.             btnStart = (JButton) map.get("btnStart"); 
  53.             btnStop = (JButton) map.get("btnStop"); 
  54.             txtArea.append("Initialized MonitorTask\n"); 
  55.     } 
  56.      
  57.     public void disconnect() { 
  58.         try { 
  59.             if (as400 != null){ 
  60.                 as400.disconnectAllServices(); 
  61.                 //txtArea.append("AS400 is connected?: " + as400.isConnectionAlive() + "\n"); 
  62.             } 
  63.         } catch (Exception e) { 
  64.             // TODO Auto-generated catch block 
  65.             txtArea.append(e.toString() + "\n"); 
  66.         } 
  67.         try { 
  68.             if (ndb != null){ 
  69.                 ndb.recycle(); 
  70.             } 
  71.             if (session != null) { 
  72.                 session.recycle(); 
  73.             } 
  74.         } catch (NotesException e1) { 
  75.             // TODO Auto-generated catch block 
  76.             txtArea.append(e1.toString() + "\n"); 
  77.             //e.printStackTrace(); 
  78.         } 
  79.         txtArea.append("Server Disconnected\n"); 
  80.     } 
  81.      
  82.     @Override 
  83.     public void run() { 
  84.         count++; 
  85.         btnStart.setEnabled(false); 
  86.         btnStop.setEnabled(false); 
  87.         boolean hasMSGW = false
  88.         boolean allOutq = true
  89.         // TODO Auto-generated method stub 
  90.         try { 
  91.             String temp; 
  92.             String msg = "Circulate(" + String.valueOf(count) + ") at " + Calendar.getInstance().getTime().toString() + "\n"
  93.             txtArea.setText(msg); 
  94.              
  95.             if (as400 == null) { 
  96.                 as400 = new AS400((String)map.get("asServerStr"), (String)map.get("asAcctStr"), (String)map.get("asPSWDStr")); 
  97.                 jobList = new JobList(as400); 
  98.                 msg += temp = "Open AS400 server at " + Calendar.getInstance().getTime().toString() + "\n"
  99.                 txtArea.append(temp); 
  100.             } 
  101.             txtArea.append("AS400 is connected?: " + as400.isConnectionAlive() + "\n"); 
  102.              
  103.             Enumeration<Job> list; 
  104.             jobList.clearJobSelectionCriteria(); 
  105.             jobList.addJobSelectionCriteria(JobList.SELECTION_PRIMARY_JOB_STATUS_ACTIVE, Boolean.TRUE); 
  106.             jobList.addJobSelectionCriteria(JobList.SELECTION_PRIMARY_JOB_STATUS_JOBQ, Boolean.TRUE); 
  107.             jobList.addJobSelectionCriteria(JobList.SELECTION_PRIMARY_JOB_STATUS_OUTQ, Boolean.FALSE); 
  108.             if (!"".equals(jobNameStr)){                 
  109.                 jobList.addJobSelectionCriteria(JobList.SELECTION_JOB_NAME, jobNameStr); 
  110.             } 
  111.             if (!"".equals(jobNumStr)){              
  112.                 jobList.addJobSelectionCriteria(JobList.SELECTION_JOB_NUMBER, jobNumStr); 
  113.             } 
  114.             if (!"".equals(jobUsrStr)){              
  115.                 jobList.addJobSelectionCriteria(JobList.SELECTION_USER_NAME, jobUsrStr); 
  116.             } 
  117.             msg += temp = "\n--- Status of job: \"" + jobNumStr + "/" + jobUsrStr + "/" + jobNameStr + "\" ---\n"
  118.             txtArea.append(temp); 
  119.              
  120.             list = jobList.getJobs(); 
  121.             while (list.hasMoreElements()) { 
  122.                 Job j = list.nextElement(); 
  123.                 allOutq = false
  124.                 msg += temp = j.getNumber() + "/" + j.getUser() + "/" + j.getName() + "\t-\t" + j.getType() + "-"  
  125.                         + "-" + j.getStatus() + "-" + j.getJobMessageQueueFullAction() + "-" +j.getInquiryMessageReply() + "\n"
  126.                 txtArea.append(temp); 
  127.             } 
  128.             if (allOutq){ 
  129.                 msg += temp = "No jobs in active status\n"
  130.                 txtArea.append(temp); 
  131.             } 
  132.              
  133.             jobList.clearJobSelectionCriteria(); 
  134.             jobList.addJobSelectionCriteria(JobList.SELECTION_PRIMARY_JOB_STATUS_ACTIVE, Boolean.TRUE); 
  135.             jobList.addJobSelectionCriteria(JobList.SELECTION_PRIMARY_JOB_STATUS_JOBQ, Boolean.TRUE); 
  136.             jobList.addJobSelectionCriteria(JobList.SELECTION_PRIMARY_JOB_STATUS_OUTQ, Boolean.FALSE); 
  137.             jobList.addJobSelectionCriteria(JobList.SELECTION_ACTIVE_JOB_STATUS, Job.ACTIVE_JOB_STATUS_WAIT_MESSAGE); 
  138.             if (!((Boolean)map.get("mntMSGWBl")).booleanValue()){ 
  139.                 if (!"".equals(jobNameStr)){                 
  140.                     jobList.addJobSelectionCriteria(JobList.SELECTION_JOB_NAME, jobNameStr); 
  141.                 } 
  142.                 if (!"".equals(jobNumStr)){              
  143.                     jobList.addJobSelectionCriteria(JobList.SELECTION_JOB_NUMBER, jobNumStr); 
  144.                 } 
  145.                 if (!"".equals(jobUsrStr)){              
  146.                     jobList.addJobSelectionCriteria(JobList.SELECTION_USER_NAME, jobUsrStr); 
  147.                 } 
  148.             } 
  149.             msg += temp = "\n--- Jobs in waiting message ---\n"
  150.             txtArea.append(temp); 
  151.              
  152.             list = jobList.getJobs(); 
  153.             while (list.hasMoreElements()) { 
  154.                 hasMSGW = true
  155.                 Job j = list.nextElement(); 
  156.                 msg += temp = j.getNumber() + "/" + j.getUser() + "/" + j.getName() + "\t-\t" + j.getType() + "-"  
  157.                         + "-" + j.getStatus() + "-" + j.getJobMessageQueueFullAction() + "-" +j.getInquiryMessageReply() + "\n"
  158.                 txtArea.append(temp); 
  159.             } 
  160.             if (!hasMSGW){ 
  161.                 msg += temp = "No jobs in MSGW status\n"
  162.                 txtArea.append(temp); 
  163.             } 
  164.             txtArea.append("\n"); 
  165.              
  166.             /*if(count ==1){ 
  167.                 allOutq = false; 
  168.                 hasMSGW = false; 
  169.             } 
  170.             else if (count==2){ 
  171.                 allOutq = false; 
  172.                 hasMSGW = true; 
  173.             } 
  174.             else { 
  175.                 allOutq = true; 
  176.                 hasMSGW = true; 
  177.             }*/ 
  178.                      
  179.             if (allOutq && !"".equals(jobWavStr)){ 
  180.                 AudioPlayWave audioPlayWave = new AudioPlayWave(jobWavStr, txtArea); 
  181.                 audioPlayWave.start(); 
  182.             } 
  183.             else if (hasMSGW && !"".equals(msgwWavStr)){ 
  184.                 AudioPlayWave audioPlayWave = new AudioPlayWave(msgwWavStr, txtArea); 
  185.                 audioPlayWave.start(); 
  186.             } 
  187.              
  188.             if (!"".equals(mailAddressStr)){ 
  189.                 try { 
  190.                     if (session == null || !session.isValid()){ 
  191.                         session = NotesFactory.createSession((String)map.get("notesServerStr"), (String)map.get("notesAcctStr"), (String)map.get("notesPSWDStr")); 
  192.                         ndb = session.getDatabase(session.getServerName(), (String)map.get("notesDBStr"), false); 
  193.                         txtArea.append("Open Domino server at " + Calendar.getInstance().getTime().toString() + "\n"); 
  194.                     } 
  195.                     txtArea.append("Domino Session is valid?: " + session.isValid() + "\n"); 
  196.                      
  197.                     //Vector<String> sendTo = new Vector<String>(); 
  198.                     //sendTo.add(mailAddressStr); 
  199.  
  200.                     Document mail = ndb.createDocument(); 
  201.                     if (allOutq){ 
  202.                         mail.replaceItemValue("Subject""AS400 Job monitor: The job(s) you monitored is outq"); 
  203.                     } 
  204.                     else if (hasMSGW){ 
  205.                         mail.replaceItemValue("Subject""AS400 Job monitor: The job(s) you monitored has message waiting for reply"); 
  206.                     } 
  207.                     else { 
  208.                         mail.replaceItemValue("Subject""AS400 Job monitor status"); 
  209.                     } 
  210.                     mail.replaceItemValue("SendTo", mailAddressStr.split(";")); 
  211.                     //mail.replaceItemValue("Principal", "EForm 3MChina/CN-China/3M/US"); 
  212.                     RichTextItem body = mail.createRichTextItem("Body"); 
  213.                     body.appendText(msg); 
  214.                     mail.send(false); 
  215.                     txtArea.append("Send mail successfully" + "\n"); 
  216.                     mail.remove(true); 
  217.                     body.recycle(); 
  218.                     mail.recycle(); 
  219.                 } catch (NotesException e) { 
  220.                     // TODO Auto-generated catch block 
  221.                     txtArea.append("Send Mail Error: " + e.toString() + "\n"); 
  222.                     e.printStackTrace(); 
  223.                 } 
  224.             } 
  225.             else { 
  226.                 txtArea.append("Skip send mail" + "\n"); 
  227.             }            
  228.         } catch (Exception e) { 
  229.             txtArea.append("Error in run()" + e.toString() + "\n"); 
  230.             hasMSGW = true
  231.             allOutq = false
  232.             if (!"".equals(msgwWavStr)){ 
  233.                 AudioPlayWave audioPlayWave = new AudioPlayWave(msgwWavStr, txtArea); 
  234.                 audioPlayWave.start(); 
  235.             } 
  236.             e.printStackTrace(); 
  237.         } finally { 
  238.             if (allOutq){ 
  239.                 this.disconnect(); 
  240.                 this.cancel(); 
  241.                 timer.cancel(); 
  242.                 btnStart.setEnabled(true); 
  243.                 btnStop.setEnabled(false); 
  244.                 txtArea.append("Monitor stops at " + Calendar.getInstance().getTime().toString() + "\n"); 
  245.             } 
  246.             else { 
  247.                 btnStop.setEnabled(true); 
  248.                 txtArea.append("Monitor will continue after " + (String)map.get("frequencyStr") + " minutes.\n"); 
  249.             }    
  250.         } 
  251.     } 

 

你可能感兴趣的:(Lotus,corba,AS400,notes,DIIOP)