Save This Page
Home » bsf-src-2.4.0 » org.apache.bsf.debug.util » [javadoc | source]
    1   /*
    2    * The Apache Software License, Version 1.1
    3    *
    4    * Copyright (c) 2002 The Apache Software Foundation.  All rights
    5    * reserved.
    6    *
    7    * Redistribution and use in source and binary forms, with or without
    8    * modification, are permitted provided that the following conditions
    9    * are met:
   10    *
   11    * 1. Redistributions of source code must retain the above copyright
   12    *    notice, this list of conditions and the following disclaimer.
   13    *
   14    * 2. Redistributions in binary form must reproduce the above copyright
   15    *    notice, this list of conditions and the following disclaimer in
   16    *    the documentation and/or other materials provided with the
   17    *    distribution.
   18    *
   19    * 3. The end-user documentation included with the redistribution, if
   20    *    any, must include the following acknowlegement:
   21    *       "This product includes software developed by the
   22    *        Apache Software Foundation (http://www.apache.org/)."
   23    *    Alternately, this acknowlegement may appear in the software itself,
   24    *    if and wherever such third-party acknowlegements normally appear.
   25    *
   26    * 4. The names "Apache BSF", "Apache", and "Apache Software Foundation"
   27    *    must not be used to endorse or promote products derived from
   28    *    this software without prior written permission. For written
   29    *    permission, please contact apache@apache.org.
   30    *
   31    * 5. Products derived from this software may not be called "Apache"
   32    *    nor may "Apache" appear in their names without prior written
   33    *    permission of the Apache Group.
   34    *
   35    * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   36    * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   37    * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   38    * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   39    * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   40    * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   41    * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   42    * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   43    * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   44    * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   45    * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   46    * SUCH DAMAGE.
   47    * ====================================================================
   48    *
   49    * This software consists of voluntary contributions made by many individuals
   50    * on behalf of the Apache Software Foundation and was originally created by
   51    * Sanjiva Weerawarana and others at International Business Machines
   52    * Corporation. For more information on the Apache Software Foundation,
   53    * please see <http://www.apache.org/>.
   54    */
   55   
   56   package org.apache.bsf.debug.util;
   57   
   58   import java.util;
   59   import org.apache.bsf.debug.jsdi;
   60   import org.apache.bsf.debug.util;
   61   
   62   /**
   63    * This class provides the resident object table for the
   64    * mirrors. A Stub represents a remote JavaScript object
   65    * or any remote concept that needs to be identified such 
   66    * engines or contexts which are not JavaScript objects.
   67    * 
   68    * A Stub has a unique identifier allocated on the 
   69    * server. This is called its oid, for object identifier.
   70    * The oid is not only carrying the identity but also the 
   71    * type of the remote object. Knowing the type is essential
   72    * when a Stub has to be created. For instance, it is important
   73    * to know if a remote object is just an object or a reified
   74    * code as a script or a function.
   75    * 
   76    * The oid is a long, the high word is the type (tid), the low word
   77    * is the unique identifier (uid). The unique identifier is globally 
   78    * unique across all types.
   79    * 
   80    * This class also acts as the factory for Stub objects.
   81    * When a Stub is created, it is remembered in the resident
   82    * object table for later rebinding from its uid.
   83    * 
   84    */
   85   public abstract class StubTable {
   86   
   87   	protected IntHashtable m_stubs;
   88   	protected SocketConnection m_con;
   89   		
   90   	public StubTable(SocketConnection con) {
   91   		m_con = con;
   92   		m_stubs = new IntHashtable();	
   93   	}
   94   
   95   	//------------------------------------------------------------
   96   	public void disconnectNotify() {
   97   		Enumeration e;
   98   		Stub s;
   99   		DebugLog.stdoutPrintln("Revoking stubs...", 
  100                                          DebugLog.BSF_LOG_L3);
  101   
  102   		e = m_stubs.elements();
  103   		while (e.hasMoreElements()) {
  104   			s = (Stub)e.nextElement();
  105   			s.revoked();
  106   		}
  107   		m_stubs = new IntHashtable();	
  108   	}
  109   		
  110   	//------------------------------------------------------------
  111   	protected abstract Stub factory(int tid, int uid);
  112   
  113   	//------------------------------------------------------------
  114   	public synchronized Stub swizzle(int tid, int uid) {
  115   		Stub Stub=null;
  116   			 
  117   		if (uid== DebugConstants.NOT_FOUND_UID) 
  118   			return Stub.NOT_FOUND;
  119   		if (uid== DebugConstants.UNDEFINED_UID)
  120   			return Stub.UNDEFINED;
  121   		
  122   		Stub = (Stub)m_stubs.get(uid);	
  123   		if (Stub==null) {
  124   			Stub = factory(tid,uid);
  125   			m_stubs.put(uid,Stub);
  126   		}
  127   		return Stub;	
  128   	}
  129   }
  130   

Save This Page
Home » bsf-src-2.4.0 » org.apache.bsf.debug.util » [javadoc | source]