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

📄 localconnection.java

📁 java开源的企业总线.xmlBlaster
💻 JAVA
字号:
/*------------------------------------------------------------------------------Name:      LocalConnection.javaProject:   xmlBlaster.orgCopyright: xmlBlaster.org, see xmlBlaster-LICENSE file------------------------------------------------------------------------------*/package org.xmlBlaster.client.protocol.local;import java.util.logging.Logger;import java.util.logging.Level;import org.xmlBlaster.util.Global;import org.xmlBlaster.client.qos.ConnectReturnQos;import org.xmlBlaster.util.XmlBlasterException;import org.xmlBlaster.util.def.Constants;import org.xmlBlaster.util.def.ErrorCode;import org.xmlBlaster.util.MsgUnitRaw;import org.xmlBlaster.client.protocol.I_XmlBlasterConnection;import org.xmlBlaster.util.qos.address.Address;import org.xmlBlaster.util.xbformat.I_ProgressListener;import org.xmlBlaster.engine.qos.AddressServer;import org.xmlBlaster.protocol.I_Authenticate;import org.xmlBlaster.protocol.I_XmlBlaster;/** * A local connections. * <p>This driver may be used to get in vm direct calls into XmlBlaster. Some sutiations this may be used is to write a plgin for the client that gets started in the standalone XmlBlaster, or to be used when XMlBlaster is access in the same embedded anvironment, such as JBoss.</p> * <p>There is one very important requirement for this to work: The client that gets the XmlBlasterAccess from wich this driver is instantiated MUST have access to the serverside engine.Global singleton, it MUST use a cloned Global for each connection that contains the engine.Global in the cloned globals objectEntry at key: ServerNodeScope.</p> * @author <a href="mailto:michele@laghi.eu">Michele Laghi</a> * @author <a href="mailto:xmlBlaster@marcelruff.info">Marcel Ruff</a>. * @author <a href="mailto:pra@tim.se">Peter Antman</a>. * @see LocalCallbackImpl * @see org.xmlBlaster.protocol.local.CallbackLocalDriver */public class LocalConnection implements I_XmlBlasterConnection{   private String ME = "LocalConnection";   private Global glob;   private static Logger log = Logger.getLogger(LocalConnection.class.getName());   private String sessionId;   protected ConnectReturnQos connectReturnQos;   protected Address clientAddress;   private I_Authenticate authenticate;   private I_XmlBlaster xmlBlasterImpl;   private AddressServer addressServer;   /**    * Called by plugin loader which calls init(Global, PluginInfo) thereafter.     */   public LocalConnection() {   }   /** Enforced by I_Plugin */   public String getType() {      return getProtocol();   }   /** Enforced by I_Plugin */   public String getVersion() {      return "1.0";   }   /**    * This method is called by the PluginManager (enforced by I_Plugin).    * <p>The given global must contain the serverside org.xmlBlaster.engine.Global in its ObjectEntry "ServerNodeScope"</p>    * @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_, org.xmlBlaster.util.plugin.PluginInfo pluginInfo) throws XmlBlasterException {      this.glob = (glob_ == null) ? Global.instance() : glob_;      org.xmlBlaster.engine.ServerScope engineGlob = (org.xmlBlaster.engine.ServerScope)this.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");         }         this.xmlBlasterImpl = this.authenticate.getXmlBlaster();         if (xmlBlasterImpl == null) {            throw new XmlBlasterException(this.glob, ErrorCode.INTERNAL_UNKNOWN, ME + ".init", "xmlBlasterImpl object is null");         }      }      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);      }      this.addressServer = new AddressServer(this.glob, getProtocol(), this.glob.getId(), pluginInfo.getParameters());            log.info("Created '" + getProtocol() + "' protocol plugin to connect to xmlBlaster server");   }   /**    * @return The connection protocol name "LOCAL"    */   public final String getProtocol()   {      return "LOCAL"; // shall it be configurable??                      // (this.pluginInfo == null) ? "LOCAL" : this.pluginInfo.getType();   }   /**    * @see I_XmlBlasterConnection#connectLowlevel(Address)    */   public void connectLowlevel(Address address) throws XmlBlasterException {      if (log.isLoggable(Level.FINE)) log.fine("Entering connectLowlevel("+address.getRawAddress()+")");   }   public void resetConnection() {      if (log.isLoggable(Level.FINE)) log.fine("LocalCLient is initialized, no connection available");      this.sessionId = null;   }   /**    * Login to the server.     * <p />    * @param connectQos The encrypted connect QoS     * @exception XmlBlasterException if login fails    */   public String connect(String connectQos) throws XmlBlasterException {      if (connectQos == null)         throw new XmlBlasterException(glob, ErrorCode.USER_CONFIGURATION, ME, "Please specify a valid ConnectQoS");      if (log.isLoggable(Level.FINER)) log.finer("Entering login");      if (isLoggedIn()) {         log.warning("You are already logged in, no relogin possible.");         return "";      }      String retQos_literal = this.authenticate.connect(this.addressServer, connectQos);      this.connectReturnQos = new ConnectReturnQos(this.glob, retQos_literal);      this.sessionId = this.connectReturnQos.getSecretSessionId();      if (log.isLoggable(Level.FINE)) log.fine("connect("+this.connectReturnQos.getData().getAddress().getType()+")" + this.connectReturnQos.getSessionName().toString());      return retQos_literal;   }   /**    * @see I_XmlBlasterConnection#setConnectReturnQos(ConnectReturnQos)    */   public void setConnectReturnQos(ConnectReturnQos connectReturnQos) {      this.sessionId = connectReturnQos.getSecretSessionId();      this.ME = "LocalConnection-"+connectReturnQos.getSessionName().toString();   }   /**    * Does a logout.     * <p />    * @param sessionId The client sessionId    */   public boolean disconnect(String disconnectQos) {      if (log.isLoggable(Level.FINER)) log.finer("Entering logout");      if (!isLoggedIn()) {         log.warning("You are not logged in, no logout possible.");      }      try {         this.authenticate.disconnect(this.addressServer, this.sessionId, disconnectQos);      }      catch(XmlBlasterException e) {         log.severe(e.getMessage());      }      if (log.isLoggable(Level.FINE)) log.fine("disconnect() done");      return true;   }   /**    * Shut down.     * Is called by logout()    */   public void shutdown() throws XmlBlasterException {   }   /**    * @return true if you are logged in    */   public boolean isLoggedIn() {      return this.xmlBlasterImpl != null && this.sessionId != null;   }   /**    * Enforced by I_XmlBlasterConnection interface (failsafe mode).    * Subscribe to messages.    * <p />    */   public final String subscribe (String xmlKey_literal, String qos_literal) throws XmlBlasterException {      if (log.isLoggable(Level.FINER)) log.finer("Entering subscribe(id=" + this.sessionId + ")");      return this.xmlBlasterImpl.subscribe(this.addressServer, this.sessionId, xmlKey_literal, qos_literal);   }   /**    * Unsubscribe from messages.    * <p />    * @see org.xmlBlaster.engine.RequestBroker    */   public final String[] unSubscribe (String xmlKey_literal,                                 String qos_literal) throws XmlBlasterException {      if (log.isLoggable(Level.FINER)) log.finer("Entering unsubscribe(): id=" + this.sessionId);      return this.xmlBlasterImpl.unSubscribe(this.addressServer, this.sessionId, xmlKey_literal, qos_literal);   }   /**    * Publish a message.    */   public final String publish(MsgUnitRaw msgUnit) throws XmlBlasterException {      if (log.isLoggable(Level.FINER)) log.finer("Entering publish(): id=" + this.sessionId);      return this.xmlBlasterImpl.publish(this.addressServer, this.sessionId, msgUnit);   }   /**    * Publish multiple messages in one sweep.    * <p />    * @see org.xmlBlaster.engine.RequestBroker    */   public final String[] publishArr(MsgUnitRaw[] msgUnitArr) throws XmlBlasterException {      if (log.isLoggable(Level.FINER)) log.finer("Entering publishArr: id=" + this.sessionId);      if (msgUnitArr == null) {         log.severe("The argument of method publishArr() are invalid");         throw new XmlBlasterException(glob, ErrorCode.USER_ILLEGALARGUMENT, ME,                                       "The argument of method publishArr() are invalid");      }      return this.xmlBlasterImpl.publishArr(this.addressServer, this.sessionId, msgUnitArr);   }   /**    * Publish multiple messages in one sweep.    * <p />    * @see org.xmlBlaster.engine.RequestBroker    */   public final void publishOneway(MsgUnitRaw[] msgUnitArr) throws XmlBlasterException {      if (log.isLoggable(Level.FINER)) log.finer("Entering publishOneway: id=" + this.sessionId);      if (msgUnitArr == null) {         log.severe("The argument of method publishOneway() are invalid");         throw new XmlBlasterException(glob, ErrorCode.USER_ILLEGALARGUMENT, ME,                                       "The argument of method publishOneway() are invalid");      }      this.xmlBlasterImpl.publishOneway(this.addressServer, this.sessionId, msgUnitArr);   }   /**    * Delete messages.    * <p />    * @see org.xmlBlaster.engine.RequestBroker    */   public final String[] erase(String xmlKey_literal, String qos_literal) throws XmlBlasterException {      if (log.isLoggable(Level.FINER)) log.finer("Entering erase() id=" + this.sessionId);      return this.xmlBlasterImpl.erase(this.addressServer, this.sessionId, xmlKey_literal, qos_literal);   }   /**    * Synchronous access a message.    * <p />    * @see org.xmlBlaster.engine.RequestBroker    */   public final MsgUnitRaw[] get(String xmlKey_literal,                                  String qos_literal) throws XmlBlasterException {      if (log.isLoggable(Level.FINER)) log.finer("Entering get() xmlKey=" + xmlKey_literal.trim() + ") ...");      return this.xmlBlasterImpl.get(this.addressServer, this.sessionId, xmlKey_literal, qos_literal);   }   /**    * Check server.    * @see <a href="http://www.xmlBlaster.org/xmlBlaster/src/java/org/xmlBlaster/protocol/corba/xmlBlaster.idl" target="others">CORBA xmlBlaster.idl</a>    */   public String ping(String str) throws XmlBlasterException {      return "";   }   public String toXml() throws XmlBlasterException {      return toXml("");   }   /**    * Dump of the server, remove in future.    */   public String toXml(String extraOffset) throws XmlBlasterException   {      if (!isLoggedIn()) return "<noConnection />";      return "<LocalConnection/>";   }   /**    * Register a listener for to receive information about the progress of incoming data.     * Only one listener is supported, the last call overwrites older calls. This implementation    * does nothing here, it just returns null.    *     * @param listener Your listener, pass 0 to unregister.    * @return The previously registered listener or 0    */   public I_ProgressListener registerProgressListener(I_ProgressListener listener) {      log.fine("This method is currently not implemeented.");      return null;   }   /**    * Command line usage.    * <p />    * These variables may be set in xmlBlaster.properties as well.    * Don't use the "-" prefix there.    */   public static String usage()   {      String text = "\n";      text += "LocalConnection 'LOCAL' options:\n";      text += "   -plugin/local/debug\n";      text += "                       true switches on detailed LOCAL debugging [false].\n";      text += "\n";      return text;   }}

⌨️ 快捷键说明

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