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

📄 jdbcdriver.java

📁 java开源的企业总线.xmlBlaster
💻 JAVA
字号:
/*------------------------------------------------------------------------------Name:      JdbcDriver.javaProject:   xmlBlaster.orgCopyright: xmlBlaster.org, see xmlBlaster-LICENSE fileComment:   JdbcDriver class to invoke the xmlBlaster server in the same JVM.Version:   $Id: JdbcDriver.java 15205 2006-06-29 17:25:12Z ruff $------------------------------------------------------------------------------*/package org.xmlBlaster.protocol.jdbc;import java.util.logging.Logger;import java.util.logging.Level;import org.xmlBlaster.util.Global;import org.xmlBlaster.util.XmlBlasterException;import org.xmlBlaster.engine.qos.AddressServer;import org.xmlBlaster.util.def.Constants;import org.xmlBlaster.util.def.ErrorCode;import org.xmlBlaster.protocol.I_Authenticate;import org.xmlBlaster.protocol.I_XmlBlaster;import org.xmlBlaster.protocol.I_Driver;import org.xmlBlaster.util.MsgUnitRaw;import org.xmlBlaster.util.qos.address.CallbackAddress;import org.xmlBlaster.engine.qos.ConnectQosServer;import org.xmlBlaster.engine.qos.ConnectReturnQosServer;import org.xmlBlaster.engine.qos.DisconnectQosServer;import java.util.StringTokenizer;/** * JDBC driver class using the native interface. * <p /> * The jdbc driver needs to be registered in xmlBlaster.properties * and will be started on xmlBlaster startup, for example: * <pre> *   ProtocolPlugin[JDBC][1.0]=org.xmlBlaster.protocol.jdbc.JdbcDriver * *   CbProtocolPlugin[JDBC][1.0]=org.xmlBlaster.protocol.jdbc.CallbackJdbcDriver * </pre> * The interface I_Driver is needed by xmlBlaster to instantiate and shutdown * this driver implementation. * @author xmlBlaster@marcelruff.info * @see <a href="http://www.xmlblaster.org/xmlBlaster/doc/requirements/engine.service.rdbms.html" target="others">engine.service.rdbms requirement</a> */public class JdbcDriver implements I_Driver, I_Publish{   private String ME = "JdbcDriver";   private Global glob;   private static Logger log = Logger.getLogger(JdbcDriver.class.getName());   /** The singleton handle for this xmlBlaster server */   private I_Authenticate authenticate;   /** The singleton handle for this xmlBlaster server */   private I_XmlBlaster xmlBlasterImpl;   /** The authentication session identifier */   private String sessionId;   /** JDBC connection pooling, a pool for every user */   private NamedConnectionPool namedPool;   /** key under which my callback is registered */   private String cbRegistrationKey;   private AddressServer addressServer;   private String loginName;   private String passwd;   /** Get a human readable name of this driver.    * <p />    * Enforced by interface I_Driver.    */   public String getName() {      return ME;   }   /**    * Access the xmlBlaster internal name of the protocol driver.     * @return "JDBC"    */   public String getProtocolId() {      return "JDBC";   }   /** Enforced by I_Plugin */   public String getType() {      return getProtocolId();   }   /** Enforced by I_Plugin */   public String getVersion() {      return "1.0";   }   /** Enforced by I_Plugin */   public void init(org.xmlBlaster.util.Global glob, org.xmlBlaster.util.plugin.PluginInfo pluginInfo)       throws XmlBlasterException {      this.glob = glob;      this.ME = "JdbcDriver" + this.glob.getLogPrefixDashed();      org.xmlBlaster.engine.ServerScope engineGlob = (org.xmlBlaster.engine.ServerScope)glob.getObjectEntry(Constants.OBJECT_ENTRY_ServerScope);      if (engineGlob == null)         throw new XmlBlasterException(this.glob, ErrorCode.INTERNAL_UNKNOWN, ME + ".init", "could not retreive the ServerNodeScope. Am I really on the server side ?");      try {         this.authenticate = engineGlob.getAuthenticate();         if (this.authenticate == null) {            throw new XmlBlasterException(this.glob, ErrorCode.INTERNAL_UNKNOWN, ME + ".init", "authenticate object is null");         }         I_XmlBlaster xmlBlasterImpl = this.authenticate.getXmlBlaster();         if (xmlBlasterImpl == null) {            throw new XmlBlasterException(this.glob, ErrorCode.INTERNAL_UNKNOWN, ME + ".init", "xmlBlasterImpl object is null");         }         init(glob, new AddressServer(glob, getType(), glob.getId(), pluginInfo.getParameters()), this.authenticate, xmlBlasterImpl);                  activate();      }      catch (XmlBlasterException ex) {         throw ex;      }      catch (Throwable ex) {         throw new XmlBlasterException(this.glob, ErrorCode.INTERNAL_UNKNOWN, ME + ".init", "init. Could'nt initialize the driver.", ex);      }   }   /**    * Get the address how to access this driver.     * @return null    */   public String getRawAddress() {      if (log.isLoggable(Level.FINE)) log.fine("No external access address available");      return null;   }   /**    * Start xmlBlaster jdbc access.    * <p />    * Enforced by interface I_Driver.    * @param glob Global handle to access logging, property and commandline args    */   private synchronized void init(Global glob, AddressServer addressServer, I_Authenticate authenticate, I_XmlBlaster xmlBlasterImpl) throws XmlBlasterException   {      this.glob.addObjectEntry("JdbcDriver-"+glob.getId(), this);      this.authenticate = authenticate;      this.xmlBlasterImpl = xmlBlasterImpl;      this.addressServer = addressServer;      this.namedPool = (NamedConnectionPool)this.glob.getObjectEntry("NamedConnectionPool-"+glob.getId());      if (this.namedPool == null) {         this.namedPool = new NamedConnectionPool(this.glob);         this.glob.addObjectEntry("NamedConnectionPool-"+glob.getId(), this.namedPool);      }      initDrivers();      if (log.isLoggable(Level.FINE)) log.fine("Initialized successfully JDBC driver.");   }   /**    * Activate xmlBlaster access through this protocol.    */   public synchronized void activate() throws XmlBlasterException {      if (log.isLoggable(Level.FINER)) log.finer("Entering activate");      // login and get a session id ...      loginName = glob.getProperty().get("JdbcDriver.loginName", "__sys__jdbc");      passwd = glob.getProperty().get("JdbcDriver.password", "secret");      if (loginName==null || passwd==null) {         log.severe("login failed: please use no null arguments for connect()");         throw new XmlBlasterException("LoginFailed.InvalidArguments", "login failed: please use no null arguments for connect()");      }      // "JDBC" below is the 'callback protocol type', which results in instantiation of the given class:      CallbackAddress cbAddress = new CallbackAddress(glob, "JDBC");      cbAddress.setRawAddress("native-NameService:org.xmlBlaster.protocol.jdbc.CallbackJdbcDriver");      // Register the native callback driver      CallbackJdbcDriver cbDriver = new CallbackJdbcDriver();      cbDriver.init(glob, cbAddress);      cbRegistrationKey = cbAddress.getType() + cbAddress.getRawAddress();      glob.addNativeCallbackDriver(cbRegistrationKey, cbDriver); // tell that we are the callback driver as well      org.xmlBlaster.client.qos.ConnectQos connectQos = new org.xmlBlaster.client.qos.ConnectQos(glob);      connectQos.addCallbackAddress(cbAddress);      connectQos.loadClientPlugin("htpasswd", "1.0", loginName, passwd);      connectQos.getSessionQos().setSessionTimeout(0L);      ConnectReturnQosServer returnQos = this.authenticate.connect(this.addressServer, new ConnectQosServer(glob, connectQos.getData()));      sessionId = returnQos.getSecretSessionId();      log.info("Started successfully JDBC driver with loginName=" + loginName);   }   /**    * Deactivate xmlBlaster access (standby), no clients can connect.     */   public synchronized void deActivate() throws XmlBlasterException {      if (log.isLoggable(Level.FINER)) log.finer("Entering deActivate");      glob.removeNativeCallbackDriver(cbRegistrationKey);   }   /**    * Instructs jdbc driver to shut down.    * <p />    * Enforced by interface I_Driver.    */   public void shutdown() throws XmlBlasterException {      if (sessionId != null) {         try { this.authenticate.disconnect(this.addressServer, sessionId, (new DisconnectQosServer(glob)).toXml()); } catch(XmlBlasterException e) { }      }      namedPool.destroy();      log.info("JDBC service stopped, resources released.");   }   /**    * Command line usage.    * <p />    * Enforced by interface I_Driver.    */   public String usage()   {      String text = "\n";      text += "JdbcDriver options:\n";      text += "   -JdbcDriver.password\n";      text += "                       The internal xmlBlaster-password for the JDBC driver.\n";      text += "   -JdbcDriver.drivers List of all jdbc drivers to initalize, e.g.\n";      text += "                       oracle.jdbc.driver.OracleDriver:org.gjt.mm.mysql.Driver,postgresql.Driver.\n";      text += "\n";      return text;   }   /**    * Callback of xmlBlaster, a client wants to do a query ...    */   public void update(String sender, byte[] content)   {      if (log.isLoggable(Level.FINER)) log.finer("SQL message from '" + sender + "' received");      XmlDBAdapterWorker worker = new XmlDBAdapterWorker(glob, sender, content, this, namedPool);      worker.start();     // In future use callback thread !!!!!   }   /**    * Send the XML based result set to the client.    */   public String publish(MsgUnitRaw msgUnit) throws XmlBlasterException   {      return xmlBlasterImpl.publish(this.addressServer, sessionId, msgUnit);   }   /**    * Load the JDBC drivers from xmlBlaster.properties.    * <p />    * Default is JdbcDriver.drivers=sun.jdbc.odbc.JdbcOdbcDriver    */   private void initDrivers() {      String            drivers = glob.getProperty().get("JdbcDriver.drivers", "sun.jdbc.odbc.JdbcOdbcDriver");      StringTokenizer   st = new StringTokenizer(drivers, ":");      int               numDrivers = st.countTokens();      String            driver = "";      for (int i = 0; i < numDrivers; i++) {         try {            driver = st.nextToken().trim();            if (log.isLoggable(Level.FINE)) log.fine("Trying JDBC driver Class.forName('" + driver + "') ...");            Class cl = Class.forName(driver);            java.sql.Driver dr = (java.sql.Driver)cl.newInstance();            java.sql.DriverManager.registerDriver(dr);            log.info("Jdbc driver '" + driver + "' loaded.");         }         catch (Throwable e) {            log.warning("Couldn't initialize driver <" + driver + ">, please check your CLASSPATH");         }      }      if (numDrivers == 0) {         log.warning("No JDBC driver in xmlBlaster.properties given, set 'JdbcDriver.drivers' to point to your DB drivers if wanted, e.g. JdbcDriver.drivers=oracle.jdbc.driver.OracleDriveri:org.gjt.mm.mysql.Driver:postgresql.Driver");      }   }}

⌨️ 快捷键说明

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