⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 startuptasks.java

📁 java开源的企业总线.xmlBlaster
💻 JAVA
字号:
/*------------------------------------------------------------------------------Name:      StartupTasks.javaProject:   xmlBlaster.orgCopyright: xmlBlaster.org, see xmlBlaster-LICENSE file------------------------------------------------------------------------------*/package org.xmlBlaster.engine;import java.io.File;import java.io.InputStream;import java.io.OutputStream;import java.io.InputStreamReader;import java.io.IOException;import java.io.FileOutputStream;import java.net.URL;import java.net.MalformedURLException;import java.util.logging.Logger;import java.util.logging.Level;import org.xmlBlaster.util.Global;import org.xmlBlaster.util.XmlBlasterException;import org.xmlBlaster.util.def.Constants;import org.xmlBlaster.util.FileLocator;import org.xmlBlaster.util.plugin.PluginInfo;import org.xmlBlaster.util.plugin.I_Plugin;import org.xmlBlaster.client.XmlBlasterAccess;import org.xmlBlaster.client.I_Callback;import org.xmlBlaster.client.I_XmlBlasterAccess;import org.xmlBlaster.client.key.UpdateKey;import org.xmlBlaster.client.qos.ConnectQos;import org.xmlBlaster.client.qos.UpdateQos;import org.xmlBlaster.client.script.XmlScriptClient;/** * This plugin is loaded on xmlBlaster startup and executes the script file <tt>xmlBlasterStartup.xml</tt>.  * <p> * The file <tt>xmlBlasterStartup.xml</tt> follows the syntax rules of {@link org.xmlBlaster.client.script.XmlScriptInterpreter}. * </p> * * <p> * This <tt>StartupTasks</tt> plugin is started with the run level manager as configured in <tt>xmlBlasterPlugins.xml</tt>, * for example:</p> * <pre> *  &lt;plugin id='StartupTasks' className='org.xmlBlaster.engine.StartupTasks'> *     &lt;action do='LOAD' onStartupRunlevel='7' sequence='1' *                          onFail='resource.configuration.pluginFailed'/> *     &lt;action do='STOP' onShutdownRunlevel='6' sequence='1'/> *     &lt;attribute id='loginName'>_StartupTasks&lt;/attribute> *     &lt;attribute id='password'>secret&lt;/attribute> *     &lt;attribute id='scriptFileName'>xmlBlasterStartup.xml&lt;/attribute> *     &lt;attribute id='directoryName'>${user.home}&lt;/attribute> *     &lt;attribute id='outFileName'>&lt;/attribute> *  &lt;/plugin> * </pre> * <p>The script file name defaults to <tt>$HOME/xmlBlasterStartup.xml</tt>.</p> * <p> * We use the <tt>LOCAL</tt> protocol driver to talk to xmlBlaster, therefor this * plugin works only if the client and server is in the same virtual machine (JVM). * </p> * * @author <a href="mailto:xmlblast@marcelruff.info">Marcel Ruff</a> * @see <a href="http://www.xmlBlaster.org/xmlBlaster/doc/requirements/admin.startupTasks.html">The admin.startupTasks requirement</a> * @see <a href="http://www.xmlBlaster.org/xmlBlaster/doc/requirements/engine.runlevel.howto.html">The engine.runlevel.howto requirement</a> * @see <a href="http://www.xmlBlaster.org/xmlBlaster/doc/requirements/client.script.html">The client.script requirement</a> * @since 1.0.1 */public class StartupTasks implements I_Plugin {   private final static String ME = StartupTasks.class.getName();      private PluginInfo pluginInfo;   private Global global;   private static Logger log = Logger.getLogger(StartupTasks.class.getName());   private I_XmlBlasterAccess connection;   private String directoryName = null; // (String)System.getProperty("user.home"); // + (String)System.getProperty("file.separator") + "tmp";   private String scriptFileName = "xmlBlasterStartup.xml";   private URL scriptFileUrl;   private String outFileName = "";   private boolean doConnect;   private boolean doDisconnect;   private ConnectQos connectQos;      // forceBase64==false: ASCII dump for content if possible (XML embedable)   //private boolean forceBase64 = false;   /**    * Initializes the plugin    * @see org.xmlBlaster.util.plugin.I_Plugin#init(org.xmlBlaster.util.Global, org.xmlBlaster.util.plugin.PluginInfo)    */   public void init(org.xmlBlaster.util.Global glob, PluginInfo pluginInfo) throws XmlBlasterException {      this.pluginInfo = pluginInfo;      this.global = glob.getClone(glob.getNativeConnectArgs());      try {         this.global.addObjectEntry(Constants.OBJECT_ENTRY_ServerScope, glob.getObjectEntry(Constants.OBJECT_ENTRY_ServerScope));         if (log.isLoggable(Level.FINER)) log.finer("init");         this.directoryName = this.global.get("directoryName", this.directoryName, null, this.pluginInfo);         this.scriptFileName = this.global.get("scriptFileName", this.scriptFileName, null, this.pluginInfo);         this.outFileName = this.global.get("outFileName", this.outFileName, null, this.pluginInfo);         this.doConnect = this.global.get("doConnect", true, null, this.pluginInfo);         this.doDisconnect = this.global.get("doDisconnect", true, null, this.pluginInfo);         if (this.directoryName == null || this.directoryName.length() < 1) {            // Use xmlBlaster search path (including CLASSPATH)            FileLocator fileLocator = new FileLocator(this.global);            this.scriptFileUrl = fileLocator.findFileInXmlBlasterSearchPath((String)null, this.scriptFileName);         }         else {            // Use given path            File f = new File(this.directoryName, this.scriptFileName);            if (f.exists() && f.isFile() && f.canRead()) {               try {                  this.scriptFileUrl = f.toURL();               } catch (MalformedURLException e) {                  log.warning(e.toString());               }            }         }                  if (this.scriptFileUrl != null) {            log.info("Using startup script file '" + this.scriptFileUrl.toString() + "'");         }         else {            log.warning("No startup script file '" + this.scriptFileName + "' found, we continue without.");            return;         }         String tmp  = this.global.get("connectQos", (String)null, null, pluginInfo);         if (tmp != null) {            this.connectQos = new ConnectQos(this.global,                   this.global.getConnectQosFactory().readObject(tmp));         }         else {            String loginName = this.global.get("loginName", "_StartupTasks", null, this.pluginInfo);            String password = this.global.get("password", "secret", null, this.pluginInfo);            this.connectQos = new ConnectQos(this.global, loginName, password);         }         excuteStartupTasks();      }      finally {         this.global = null;      }   }   /**    * @return the plugin type, defaults to "StartupTasks"    * @see org.xmlBlaster.util.plugin.I_Plugin#getType()    */   public String getType() {      if (this.pluginInfo != null) return this.pluginInfo.getType();      return ME;   }   /**    * @return the plugin version, defaults to "1.0"    * @see org.xmlBlaster.util.plugin.I_Plugin#getVersion()    */   public String getVersion() {      if (this.pluginInfo != null) return this.pluginInfo.getVersion();      return "1.0";   }   /**    * Shutdown the plugin    * @see org.xmlBlaster.util.plugin.I_Plugin#shutdown()    */   public void shutdown() throws XmlBlasterException {   }   /**    * On startup execute given script.     */   private void excuteStartupTasks() throws XmlBlasterException {      if (this.scriptFileUrl == null) {         return;      }      try {         this.connection = new XmlBlasterAccess(this.global);         if (this.doConnect) {            this.connection.connect(this.connectQos, new I_Callback() {               public String update(String cbSessionId, UpdateKey updateKey, byte[] content, UpdateQos updateQos) {                  log.warning("Ignoring received message '" + updateKey.getOid() + "'");                  return Constants.RET_OK;               }            });         }         OutputStream outStream = System.out;         boolean needsClosing = false;         if (this.outFileName != null && this.outFileName.length() > 0) {            outStream = new FileOutputStream(this.outFileName);            needsClosing = true;         }         XmlScriptClient interpreter =            new XmlScriptClient(this.global, this.connection, outStream, outStream, null);         InputStream in = this.scriptFileUrl.openStream();         try {            interpreter.parse(new InputStreamReader(in));         }         finally {            try { in.close(); } catch(IOException e) { log.warning("Ignoring problem: " + e.toString()); }            if (needsClosing) {               try { outStream.close(); } catch(IOException e) { log.warning("Ignoring problem: " + e.toString()); }            }         }         log.info("Successfully executed '" + this.scriptFileUrl.toString() + "'.");      }      catch (java.io.FileNotFoundException e) {         log.warning("Can't execute  '" + this.scriptFileUrl.toString() + "': " + e.toString());      }      catch (java.io.IOException e) {         log.warning("Can't open stream of '" + this.scriptFileUrl.toString() + "': " + e.toString());      }      catch (XmlBlasterException e) {         log.warning("Can't execute  '" + this.scriptFileUrl.toString() + "': " + e.getMessage());      }      finally {         try {            if (this.connection != null) {               if (this.doDisconnect && this.connection.isConnected()) {                  this.connection.disconnect(null);               }               this.connection = null;            }         }         catch (Throwable e) {            log.warning("Ignoring problem during disconnect: " + e.toString());         }      }   }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -