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

📄 beancontextservicessupport.java

📁 JAVA基本类源代码,大家可以学习学习!
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
	    while (i.hasNext() && serviceRequestors != null) {		Map.Entry	    		  entry    = (Map.Entry)i.next();		BeanContextServiceRevokedListener listener = (BeanContextServiceRevokedListener)entry.getValue();		if (revokeNow) {		    Object  requestor = entry.getKey();		    Map     services  = (Map)serviceRequestors.get(requestor);		    if (services != null) {			Iterator i1 = services.entrySet().iterator();			while (i1.hasNext()) {			    Map.Entry       tmp        = (Map.Entry)i1.next();			    BCSSCServiceRef serviceRef = (BCSSCServiceRef)tmp.getValue();			    if (serviceRef.getServiceClassRef().equals(serviceClassRef) && isDelegated == serviceRef.isDelegated()) {					i1.remove();			    }			}			if (noMoreRefs = services.isEmpty()) {			    serviceRequestors.remove(requestor);			}		    }		    if (noMoreRefs) serviceClassRef.removeRequestor(requestor);		}		listener.serviceRevoked(bcsre);	    }	    if (revokeNow && serviceClasses != null) {		if (serviceClassRef.isEmpty())		    serviceClasses.remove(serviceClass);	        if (serviceClasses.isEmpty())		    serviceClasses = null;	    }	    if (serviceRequestors != null && serviceRequestors.isEmpty())		serviceRequestors = null;	}	// release all references for this child since it has been unnested.	void cleanupReferences() {	    if (serviceRequestors == null) return;	    Iterator requestors = serviceRequestors.entrySet().iterator();	    while(requestors.hasNext()) {		Map.Entry 	     tmp       = (Map.Entry)requestors.next();		Object 	             requestor = tmp.getKey();		Iterator 	     services  = ((Map)tmp.getValue()).entrySet().iterator();		requestors.remove();		while (services.hasNext()) {		    Map.Entry       entry   = (Map.Entry)services.next();		    Object 	    service = entry.getKey();		    BCSSCServiceRef sref    = (BCSSCServiceRef)entry.getValue();		    BCSSCServiceClassRef       scref = sref.getServiceClassRef();				    BeanContextServiceProvider bcsp  = sref.isDelegated() ? scref.getDelegateProvider() : scref.getServiceProvider();		    scref.removeRequestor(requestor);		    services.remove();		    while (sref.release() >= 0) {			bcsp.releaseService(BeanContextServicesSupport.this.getBeanContextServicesPeer(), requestor, service);		    }		}	    }	    serviceRequestors = null;	    serviceClasses    = null;	}        void revokeAllDelegatedServicesNow() {	    if (serviceClasses == null) return;	    Iterator serviceClassRefs  = 		new HashSet(serviceClasses.values()).iterator();	    while (serviceClassRefs.hasNext()) {	        BCSSCServiceClassRef serviceClassRef = (BCSSCServiceClassRef)serviceClassRefs.next();	    	if (!serviceClassRef.isDelegated()) continue;	        Iterator i = serviceClassRef.cloneOfEntries();	    	BeanContextServiceRevokedEvent bcsre       = new BeanContextServiceRevokedEvent(BeanContextServicesSupport.this.getBeanContextServicesPeer(), serviceClassRef.getServiceClass(), true);	    	boolean			       noMoreRefs  = false;	    	while (i.hasNext()) {		    Map.Entry	    		      entry     = (Map.Entry)i.next();		    BeanContextServiceRevokedListener listener  = (BeanContextServiceRevokedListener)entry.getValue();		    Object  			      requestor = entry.getKey();		    Map     			      services  = (Map)serviceRequestors.get(requestor);		    if (services != null) {			Iterator i1 = services.entrySet().iterator();			while (i1.hasNext()) {			    Map.Entry       tmp        = (Map.Entry)i1.next();			    BCSSCServiceRef serviceRef = (BCSSCServiceRef)tmp.getValue();			    if (serviceRef.getServiceClassRef().equals(serviceClassRef) && serviceRef.isDelegated()) {					i1.remove();			    }			}			if (noMoreRefs = services.isEmpty()) {			    serviceRequestors.remove(requestor);			}		    }		    if (noMoreRefs) serviceClassRef.removeRequestor(requestor);		    listener.serviceRevoked(bcsre);		    if (serviceClassRef.isEmpty())		        serviceClasses.remove(serviceClassRef.getServiceClass());	    	}	    }	    if (serviceClasses.isEmpty()) serviceClasses = null;	    if (serviceRequestors != null && serviceRequestors.isEmpty())		serviceRequestors = null;        }	/* 	 * fields 	 */	private transient HashMap	serviceClasses;	   	private transient HashMap	serviceRequestors;    }    /**     * <p>     * Subclasses can override this method to insert their own subclass     * of Child without having to override add() or the other Collection     * methods that add children to the set.     * </p>     *     * @param targetChild the child to create the Child on behalf of     * @param peer        the peer if the targetChild and peer are related by BeanContextProxy     */    protected BCSChild createBCSChild(Object targetChild, Object peer) {	return new BCSSChild(targetChild, peer);    }    /************************************************************************/	/**	 * subclasses may subclass this nested class to add behaviors for	 * each BeanContextServicesProvider.	 */	protected static class BCSSServiceProvider implements Serializable {	    BCSSServiceProvider(Class sc, BeanContextServiceProvider bcsp) {		super();			serviceProvider = bcsp;	    }	    protected BeanContextServiceProvider getServiceProvider() {		return serviceProvider;	    }	    /*   	     * fields	     */	    protected BeanContextServiceProvider serviceProvider;	}    	/**	 * subclasses can override this method to create new subclasses of	 * BCSSServiceProvider without having to overrride addService() in	 * order to instantiate.	 */	protected BCSSServiceProvider createBCSSServiceProvider(Class sc, BeanContextServiceProvider bcsp) {	    return new BCSSServiceProvider(sc, bcsp);	}    /************************************************************************/    /**     * add a BeanContextServicesListener     *     * @throw new NullPointerException     */    public void addBeanContextServicesListener(BeanContextServicesListener bcsl) {	if (bcsl == null) throw new NullPointerException("bcsl");	synchronized(bcsListeners) {	    if (bcsListeners.contains(bcsl))		return;	    else	        bcsListeners.add(bcsl);	}    }    /**     * remove a BeanContextServicesListener     */    public void removeBeanContextServicesListener(BeanContextServicesListener bcsl) {	if (bcsl == null) throw new NullPointerException("bcsl");	synchronized(bcsListeners) {	    if (!bcsListeners.contains(bcsl))		return;	    else	        bcsListeners.remove(bcsl);	}    }    /**     * add a service     */    public boolean addService(Class serviceClass, BeanContextServiceProvider bcsp) {	return addService(serviceClass, bcsp, true);    }    /**     * add a service     */    protected boolean addService(Class serviceClass, BeanContextServiceProvider bcsp, boolean fireEvent) {	if (serviceClass == null) throw new NullPointerException("serviceClass");	if (bcsp         == null) throw new NullPointerException("bcsp");	synchronized(BeanContext.globalHierarchyLock) {            if (services.containsKey(serviceClass))    	        return false;    	    else {    	        services.put(serviceClass,  createBCSSServiceProvider(serviceClass, bcsp));        	        if (bcsp instanceof Serializable) serializable++;        	        if (!fireEvent) return true;            	        BeanContextServiceAvailableEvent bcssae = new BeanContextServiceAvailableEvent(getBeanContextServicesPeer(), serviceClass);        	        fireServiceAdded(bcssae);        	        synchronized(children) {    	            Iterator i = children.keySet().iterator();        	            while (i.hasNext()) {    	                Object c = i.next();        	                if (c instanceof BeanContextServices) {    		            ((BeanContextServicesListener)c).serviceAvailable(bcssae);    	                }    	            }    	        }        	        return true;    	    }	}    }    /**     * remove a service     */    public void revokeService(Class serviceClass, BeanContextServiceProvider bcsp, boolean revokeCurrentServicesNow) {	if (serviceClass == null) throw new NullPointerException("serviceClass");	if (bcsp         == null) throw new NullPointerException("bcsp");	synchronized(BeanContext.globalHierarchyLock) {	    if (!services.containsKey(serviceClass)) return;	    BCSSServiceProvider bcsssp = (BCSSServiceProvider)services.get(serviceClass);		    if (!bcsssp.getServiceProvider().equals(bcsp)) 	        throw new IllegalArgumentException("service provider mismatch");	    services.remove(serviceClass);            if (bcsp instanceof Serializable) serializable--;	    Iterator i = bcsChildren(); // get the BCSChild values.	    while (i.hasNext()) {	        ((BCSSChild)i.next()).revokeService(serviceClass, false, revokeCurrentServicesNow);	    }	    fireServiceRevoked(serviceClass, revokeCurrentServicesNow);	}    }    /**     * has a service, which may be delegated     */    public synchronized boolean hasService(Class serviceClass) {	if (serviceClass == null) throw new NullPointerException("serviceClass");	synchronized(BeanContext.globalHierarchyLock) {	    if (services.containsKey(serviceClass)) return true;	    BeanContextServices bcs = null;	    try {	        bcs = (BeanContextServices)getBeanContext();	    } catch (ClassCastException cce) {	        return false;	    }	    return bcs == null ? false : bcs.hasService(serviceClass);	}    }    /************************************************************************/    /*     * a nested subclass used to represent a proxy for serviceClasses delegated     * to an enclosing BeanContext.     */    protected class BCSSProxyServiceProvider implements BeanContextServiceProvider, BeanContextServiceRevokedListener {	        BCSSProxyServiceProvider(BeanContextServices bcs) {	    super();			    nestingCtxt = bcs;	}	public Object getService(BeanContextServices bcs, Object requestor, Class serviceClass, Object serviceSelector) {	    Object service = null;	    try {	 	service = nestingCtxt.getService(bcs, requestor, serviceClass, serviceSelector, this);	    } catch (TooManyListenersException tmle) {		return null;	    }		    return service;	}	public void releaseService(BeanContextServices bcs, Object requestor, Object service) {	    nestingCtxt.releaseService(bcs, requestor, service);	}	public Iterator getCurrentServiceSelectors(BeanContextServices bcs, Class serviceClass) {	    return nestingCtxt.getCurrentServiceSelectors(serviceClass);	}	public void serviceRevoked(BeanContextServiceRevokedEvent bcsre) {	    Iterator i = bcsChildren(); // get the BCSChild values.	    while (i.hasNext()) {	        ((BCSSChild)i.next()).revokeService(bcsre.getServiceClass(), true, bcsre.isCurrentServiceInvalidNow());	    }	}	/*	 * fields	 */	private BeanContextServices nestingCtxt;    }    /************************************************************************/    /**     * obtain a service which may be delegated     */     public Object getService(BeanContextChild child, Object requestor, Class serviceClass, Object serviceSelector, BeanContextServiceRevokedListener bcsrl) throws TooManyListenersException {	if (child        == null) throw new NullPointerException("child");	if (serviceClass == null) throw new NullPointerException("serviceClass");	if (requestor    == null) throw new NullPointerException("requestor");	if (bcsrl        == null) throw new NullPointerException("bcsrl");	Object              service = null;	BCSSChild           bcsc;	BeanContextServices bcssp   = getBeanContextServicesPeer();	synchronized(BeanContext.globalHierarchyLock) {	    synchronized(children) { bcsc = (BCSSChild)children.get(child); }	    if (bcsc == null) throw new IllegalArgumentException("not a child of this context"); // not a child ...	    BCSSServiceProvider bcsssp = (BCSSServiceProvider)services.get(serviceClass);	    if (bcsssp != null) {

⌨️ 快捷键说明

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