staf工作笔记-对STAX进行扩展(配置并运行官方的Delay实例)
官方文檔如下:
http://staf.sourceforge.net/current/staxdg.html#Header_reg
關(guān)于官方文檔,這里有幾個(gè)坑要注意:
編譯STAX擴(kuò)展的教程在最后面,而交你寫(xiě)的Delay卻在前面。
創(chuàng)建一個(gè)Jar文件在編譯的后面。
到目前為止,學(xué)了2個(gè)多月,3個(gè)月不到的java把這個(gè)官方例子跑起來(lái)了,花了2天時(shí)間,不容易啊。
?
首先進(jìn)行編譯,按照要求把CLASSPATH配好。配置要求如下:
這里的
?
set STAXDevDir=C:\STAXDev set STAFDir=C:\STAF set STAXCLASSES=%STAXDevDir%\STAF-INF\classes set JSTAFJAR=%STAFDir%\lib\JSTAF.jar set STAXJARDIR=%STAXDevDir%\STAF-INF\jars REM set STAXJARDIR=%STAFDir%\data\STAF\lang\java\service\STAX\jars set STAXJARFILES=%STAXJARDIR%\xercesImpl.jar;%STAXJARDIR%\xmlParserAPIs.jar;%STAXJARDIR%\jython.jar set STAXMONJAR=%STAFDir%\services\STAXMon.jar set CLASSPATH=%JSTAFJAR%;%STAXCLASSES%;%STAXJARFILES%;%STAXMONJAR%;我也不知道該怎么配,但不要緊,為什么呢?因?yàn)楹竺嫔蒵ar文件的時(shí)候,只需要有Class文件就可以了。
?
所以把eclipse配置好。運(yùn)行下,然后打包成jar包。
eclipse配置如下:
這里有一些重復(fù)的jar包,因?yàn)槭俏以谘芯縠clipse添加jar包和CLASSPATH之間的關(guān)系時(shí)重復(fù)操作了,大家可以忽略。
點(diǎn)一下run后,導(dǎo)出jar包,但會(huì)有如下的情況:
有警告!!!!但沒(méi)關(guān)系,我們看下這個(gè)jar包,
有Class文件,這下就好了。直接解壓,然后按照
這個(gè)進(jìn)行配置,但可以發(fā)現(xiàn)ExtDelay$1.class這個(gè)類(lèi)中類(lèi)竟然木有,這是一個(gè)天坑。
現(xiàn)在看下ExtDelay.java這個(gè)文件:
/*****************************************************************************/ /* Software Testing Automation Framework (STAF) */ /* (C) Copyright IBM Corp. 2002 */ /* */ /* This software is licensed under the Eclipse Public License (EPL) V1.0. */ /*****************************************************************************/package com.ibm.staf.service.stax.extension.samples.extdelay;import javax.swing.*; import javax.swing.event.*; import com.ibm.staf.*; import java.util.*; import java.awt.*; import java.lang.reflect.*; import com.ibm.staf.service.stax.*;public class ExtDelay implements STAXMonitorExtension {STAFHandle fHandle;String fLocalMachine;String fStaxMachine;String fStaxServiceName;String fJobNumber;STAXMonitorFrame fMonitorFrame;String fTitle;HashMap fProgressBarMap;boolean fContinueElapsedTime = true;Hashtable fMonitorDelayStartTimes = new Hashtable();Hashtable fMonitorDelayTimeLabels = new Hashtable();MonitorElapsedTime fElapsedTime;private ImageIcon delayIcon;public JComponent init(STAXMonitorFrame monitorFrame, boolean newJob,String staxMachineName, String staxServiceName, String jobNumber)throws STAFException{fMonitorFrame = monitorFrame;fStaxMachine = staxMachineName;fStaxServiceName = staxServiceName;fJobNumber = jobNumber;fTitle = "Delay text";Class c = this.getClass();ClassLoader classLoader = c.getClassLoader();delayIcon = ((STAXMonitorExtensionClassLoader)classLoader).getImage("delay.gif");fProgressBarMap = new HashMap();fElapsedTime = new MonitorElapsedTime();fElapsedTime.start();return new JPanel();} public String getNotificationEventTypes(){return "ext-delay";}public void term() {}public String getTitle() { return fTitle; }public int getExtensionType(){return STAXMonitorFrame.EXTENSION_ACTIVE_JOB_ELEMENTS;}public JComponent getComponent(){return new JPanel();}public void handleEvent(Map map){String status = (String)map.get("status");String block = (String)map.get("block");String id = (String)map.get("name");if (status.equals("start")){String delay = (String)map.get("delay");Vector delayDataVector = new Vector();addRow(delayDataVector, "Delay Value", delay);JProgressBar progressBar = new JProgressBar();progressBar.setMaximum((new Integer(delay)).intValue());progressBar.setStringPainted(true);Dimension dim = progressBar.getPreferredSize();dim.height = 20;progressBar.setPreferredSize(dim);synchronized(fProgressBarMap){fProgressBarMap.put(id, progressBar);}JLabel elapsedTimeLabel = new JLabel();elapsedTimeLabel.setFont(new Font("Dialog", Font.PLAIN, 12));JPanel extPanel = new JPanel();extPanel.setLayout(new BorderLayout());extPanel.setBackground(Color.white);extPanel.add(BorderLayout.CENTER, progressBar);extPanel.add(BorderLayout.EAST, elapsedTimeLabel);fMonitorFrame.addActiveJobElementsNode("delay", id, block, id, delayIcon, extPanel, delayDataVector);synchronized(fMonitorDelayStartTimes){fMonitorDelayStartTimes.put(id, Calendar.getInstance());}synchronized(fMonitorDelayTimeLabels){fMonitorDelayTimeLabels.put(id, elapsedTimeLabel);}}else if (status.equals("stop")){synchronized(fProgressBarMap){fProgressBarMap.remove(id);}synchronized(fMonitorDelayStartTimes){fMonitorDelayStartTimes.remove(id);}synchronized(fMonitorDelayTimeLabels){fMonitorDelayTimeLabels.remove(id);}fMonitorFrame.removeActiveJobElementsNode(id, block);}else if (status.equals("iterate")){String delay = (String)map.get("delay");String currentIter = (String)map.get("currentiter");Integer delayInt = new Integer(delay);final Integer currentIterInt = new Integer(currentIter);float delayFloat = (float)(delayInt.intValue());float currentIterFloat = (float)(currentIterInt.intValue());int percent = (int)((currentIterFloat / delayFloat * 100));final JProgressBar progressBar = (JProgressBar)fProgressBarMap.get(id);progressBar.setValue(currentIterInt.intValue());fMonitorFrame.setActiveJobElementsNodeText(id, id + " " + (new Integer(percent).toString()) + "% complete");}}public void addRow(Vector vector, String name, String value){Vector newRow = new Vector(2);newRow.add(name);newRow.add(value);vector.add(newRow);}class MonitorElapsedTime extends Thread{public void run(){final int waitTime = fMonitorFrame.getElapsedTimeInterval();if (waitTime == 0)return;while (fContinueElapsedTime){final Enumeration delayElapsedTimeKeys = fMonitorDelayStartTimes.keys(); Runnable delayRunnable = new Runnable(){public void run(){while (fContinueElapsedTime && delayElapsedTimeKeys.hasMoreElements()){String delayKey = (String)delayElapsedTimeKeys.nextElement();Calendar delayStarted = (Calendar)fMonitorDelayStartTimes.get(delayKey);synchronized(fMonitorDelayTimeLabels){JLabel elapsedTimeLabel = (JLabel)fMonitorDelayTimeLabels.get(delayKey);elapsedTimeLabel.setText(" (" + STAXMonitorUtil.getElapsedTime(delayStarted) + ")");}}}};try{SwingUtilities.invokeAndWait(delayRunnable);}catch (InterruptedException ex){ex.printStackTrace();}catch (InvocationTargetException ex){ex.printStackTrace();}try{ Thread.sleep(waitTime);}catch (InterruptedException ex){}}}} }發(fā)現(xiàn)的確有個(gè)MonitorElapsedTime類(lèi)。
文檔上是ExtDelay$1.class,但生成的jar卻是ExtDelay$MonitorElapsedTime$1.class。
這是個(gè)天坑,直接修改文件
這里要注意:要把這個(gè)文件下載下來(lái),這里面有g(shù)if和mf,不用自己去操作了
然后打包放到他要求的目錄,再進(jìn)打包,然后瀏覽
然后打包放到他要求的目錄,再進(jìn)打包,然后瀏覽
如下圖所示:
現(xiàn)在把文件直接拷貝到服務(wù)目錄:
然后在這里隨便選一個(gè)對(duì)stf.cfg進(jìn)行修改:(這個(gè)文件是staxug.pdf,是從官方文檔上下載的)
本人的配置如下:
隨后啟動(dòng):staf。發(fā)現(xiàn)沒(méi)有java的異常輸出。如下圖所示:
?
?
更具這個(gè)(也是staxug.pdf里面的)
配置調(diào)用的xml文件,上面是文檔上面的,下面是完整的寫(xiě)好的:
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE stax SYSTEM "stax.dtd"><stax><defaultcall function="main"/><function name="main"><stafcmd name="'Delay'"><location>'local'</location><service>'delay'</service><request>'delay 5000'</request></stafcmd></function> </stax>接下來(lái)運(yùn)行,運(yùn)行截圖如下:
延遲5s然后沒(méi)了
?
總結(jié)
以上是生活随笔為你收集整理的staf工作笔记-对STAX进行扩展(配置并运行官方的Delay实例)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Qt工作笔记-使用QCustomplot
- 下一篇: Qt工作笔记-QByteArray与自定