src/share/classes/java/beans/beancontext/BeanContextServicesSupport.java
Print this page
*** 127,139 ****
* call it directly.
*/
public void initialize() {
super.initialize();
!
! services = new HashMap(serializable + 1);
! bcsListeners = new ArrayList(1);
}
/**
* Gets the <tt>BeanContextServices</tt> associated with this
* <tt>BeanContextServicesSupport</tt>.
--- 127,138 ----
* call it directly.
*/
public void initialize() {
super.initialize();
! services = new HashMap<>(serializable + 1);
! bcsListeners = new ArrayList<>(1);
}
/**
* Gets the <tt>BeanContextServices</tt> associated with this
* <tt>BeanContextServicesSupport</tt>.
*** 167,177 ****
class BCSSCServiceClassRef {
// create an instance of a service ref
! BCSSCServiceClassRef(Class sc, BeanContextServiceProvider bcsp, boolean delegated) {
super();
serviceClass = sc;
if (delegated)
--- 166,176 ----
class BCSSCServiceClassRef {
// create an instance of a service ref
! BCSSCServiceClassRef(Class<?> sc, BeanContextServiceProvider bcsp, boolean delegated) {
super();
serviceClass = sc;
if (delegated)
*** 181,191 ****
}
// add a requestor and assoc listener
void addRequestor(Object requestor, BeanContextServiceRevokedListener bcsrl) throws TooManyListenersException {
! BeanContextServiceRevokedListener cbcsrl = (BeanContextServiceRevokedListener)requestors.get(requestor);
if (cbcsrl != null && !cbcsrl.equals(bcsrl))
throw new TooManyListenersException();
requestors.put(requestor, bcsrl);
--- 180,190 ----
}
// add a requestor and assoc listener
void addRequestor(Object requestor, BeanContextServiceRevokedListener bcsrl) throws TooManyListenersException {
! BeanContextServiceRevokedListener cbcsrl = requestors.get(requestor);
if (cbcsrl != null && !cbcsrl.equals(bcsrl))
throw new TooManyListenersException();
requestors.put(requestor, bcsrl);
*** 198,208 ****
}
// check a requestors listener
void verifyRequestor(Object requestor, BeanContextServiceRevokedListener bcsrl) throws TooManyListenersException {
! BeanContextServiceRevokedListener cbcsrl = (BeanContextServiceRevokedListener)requestors.get(requestor);
if (cbcsrl != null && !cbcsrl.equals(bcsrl))
throw new TooManyListenersException();
}
--- 197,207 ----
}
// check a requestors listener
void verifyRequestor(Object requestor, BeanContextServiceRevokedListener bcsrl) throws TooManyListenersException {
! BeanContextServiceRevokedListener cbcsrl = requestors.get(requestor);
if (cbcsrl != null && !cbcsrl.equals(bcsrl))
throw new TooManyListenersException();
}
*** 228,246 ****
if (!current.equals(bcsp))
throw new UnsupportedOperationException("existing service reference obtained from different BeanContextServiceProvider not supported");
}
! Iterator cloneOfEntries() {
! return ((HashMap)requestors.clone()).entrySet().iterator();
}
! Iterator entries() { return requestors.entrySet().iterator(); }
boolean isEmpty() { return requestors.isEmpty(); }
! Class getServiceClass() { return serviceClass; }
BeanContextServiceProvider getServiceProvider() {
return serviceProvider;
}
--- 227,248 ----
if (!current.equals(bcsp))
throw new UnsupportedOperationException("existing service reference obtained from different BeanContextServiceProvider not supported");
}
! @SuppressWarnings("unchecked") // Cast from clone
! Iterator<Map.Entry<Object, BeanContextServiceRevokedListener>> cloneOfEntries() {
! return ((HashMap<Object, BeanContextServiceRevokedListener>)requestors.clone()).entrySet().iterator();
}
! Iterator<Map.Entry<Object, BeanContextServiceRevokedListener>> entries() {
! return requestors.entrySet().iterator();
! }
boolean isEmpty() { return requestors.isEmpty(); }
! Class<?> getServiceClass() { return serviceClass; }
BeanContextServiceProvider getServiceProvider() {
return serviceProvider;
}
*** 279,297 ****
/*
* fields
*/
! Class serviceClass;
BeanContextServiceProvider serviceProvider;
int serviceRefs;
BeanContextServiceProvider delegateProvider; // proxy
int delegateRefs;
! HashMap requestors = new HashMap(1);
}
/*
* per service reference info ...
*/
--- 281,299 ----
/*
* fields
*/
! Class<?> serviceClass;
BeanContextServiceProvider serviceProvider;
int serviceRefs;
BeanContextServiceProvider delegateProvider; // proxy
int delegateRefs;
! HashMap<Object, BeanContextServiceRevokedListener> requestors = new HashMap<>(1);
}
/*
* per service reference info ...
*/
*** 320,339 ****
BCSSChild(Object bcc, Object peer) { super(bcc, peer); }
// note usage of service per requestor, per service
! synchronized void usingService(Object requestor, Object service, Class serviceClass, BeanContextServiceProvider bcsp, boolean isDelegated, BeanContextServiceRevokedListener bcsrl) throws TooManyListenersException, UnsupportedOperationException {
// first, process mapping from serviceClass to requestor(s)
BCSSCServiceClassRef serviceClassRef = null;
if (serviceClasses == null)
! serviceClasses = new HashMap(1);
else
! serviceClassRef = (BCSSCServiceClassRef)serviceClasses.get(serviceClass);
if (serviceClassRef == null) { // new service being used ...
serviceClassRef = new BCSSCServiceClassRef(serviceClass, bcsp, isDelegated);
serviceClasses.put(serviceClass, serviceClassRef);
--- 322,341 ----
BCSSChild(Object bcc, Object peer) { super(bcc, peer); }
// note usage of service per requestor, per service
! synchronized void usingService(Object requestor, Object service, Class<?> serviceClass, BeanContextServiceProvider bcsp, boolean isDelegated, BeanContextServiceRevokedListener bcsrl) throws TooManyListenersException, UnsupportedOperationException {
// first, process mapping from serviceClass to requestor(s)
BCSSCServiceClassRef serviceClassRef = null;
if (serviceClasses == null)
! serviceClasses = new HashMap<>(1);
else
! serviceClassRef = serviceClasses.get(serviceClass);
if (serviceClassRef == null) { // new service being used ...
serviceClassRef = new BCSSCServiceClassRef(serviceClass, bcsp, isDelegated);
serviceClasses.put(serviceClass, serviceClassRef);
*** 346,369 ****
serviceClassRef.addRef(isDelegated);
// now handle mapping from requestor to service(s)
BCSSCServiceRef serviceRef = null;
! Map services = null;
if (serviceRequestors == null) {
! serviceRequestors = new HashMap(1);
} else {
! services = (Map)serviceRequestors.get(requestor);
}
if (services == null) {
! services = new HashMap(1);
serviceRequestors.put(requestor, services);
} else
! serviceRef = (BCSSCServiceRef)services.get(service);
if (serviceRef == null) {
serviceRef = new BCSSCServiceRef(serviceClassRef, isDelegated);
services.put(service, serviceRef);
--- 348,371 ----
serviceClassRef.addRef(isDelegated);
// now handle mapping from requestor to service(s)
BCSSCServiceRef serviceRef = null;
! Map<Object , BCSSCServiceRef> services = null;
if (serviceRequestors == null) {
! serviceRequestors = new HashMap<>(1);
} else {
! services = serviceRequestors.get(requestor);
}
if (services == null) {
! services = new HashMap<>(1);
serviceRequestors.put(requestor, services);
} else
! serviceRef = services.get(service);
if (serviceRef == null) {
serviceRef = new BCSSCServiceRef(serviceClassRef, isDelegated);
services.put(service, serviceRef);
*** 375,389 ****
// release a service reference
synchronized void releaseService(Object requestor, Object service) {
if (serviceRequestors == null) return;
! Map services = (Map)serviceRequestors.get(requestor);
if (services == null) return; // oops its not there anymore!
! BCSSCServiceRef serviceRef = (BCSSCServiceRef)services.get(service);
if (serviceRef == null) return; // oops its not there anymore!
BCSSCServiceClassRef serviceClassRef = serviceRef.getServiceClassRef();
boolean isDelegated = serviceRef.isDelegated();
--- 377,391 ----
// release a service reference
synchronized void releaseService(Object requestor, Object service) {
if (serviceRequestors == null) return;
! Map<Object, BCSSCServiceRef> services = serviceRequestors.get(requestor);
if (services == null) return; // oops its not there anymore!
! BCSSCServiceRef serviceRef = services.get(service);
if (serviceRef == null) return; // oops its not there anymore!
BCSSCServiceClassRef serviceClassRef = serviceRef.getServiceClassRef();
boolean isDelegated = serviceRef.isDelegated();
*** 416,452 ****
}
}
// revoke a service
! synchronized void revokeService(Class serviceClass, boolean isDelegated, boolean revokeNow) {
if (serviceClasses == null) return;
! BCSSCServiceClassRef serviceClassRef = (BCSSCServiceClassRef)serviceClasses.get(serviceClass);
if (serviceClassRef == null) return;
! Iterator i = serviceClassRef.cloneOfEntries();
BeanContextServiceRevokedEvent bcsre = new BeanContextServiceRevokedEvent(BeanContextServicesSupport.this.getBeanContextServicesPeer(), serviceClass, revokeNow);
boolean noMoreRefs = false;
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();
}
}
--- 418,454 ----
}
}
// revoke a service
! synchronized void revokeService(Class<?> serviceClass, boolean isDelegated, boolean revokeNow) {
if (serviceClasses == null) return;
! BCSSCServiceClassRef serviceClassRef = serviceClasses.get(serviceClass);
if (serviceClassRef == null) return;
! Iterator<Map.Entry<Object, BeanContextServiceRevokedListener>> i = serviceClassRef.cloneOfEntries();
BeanContextServiceRevokedEvent bcsre = new BeanContextServiceRevokedEvent(BeanContextServicesSupport.this.getBeanContextServicesPeer(), serviceClass, revokeNow);
boolean noMoreRefs = false;
while (i.hasNext() && serviceRequestors != null) {
! Map.Entry<Object,BeanContextServiceRevokedListener> entry = i.next();
! BeanContextServiceRevokedListener listener = entry.getValue();
if (revokeNow) {
Object requestor = entry.getKey();
! Map<Object, BCSSCServiceRef> services = serviceRequestors.get(requestor);
if (services != null) {
! Iterator<Map.Entry<Object, BCSSCServiceRef>> i1 = services.entrySet().iterator();
while (i1.hasNext()) {
! Map.Entry<Object, BCSSCServiceRef> tmp = i1.next();
! BCSSCServiceRef serviceRef = tmp.getValue();
if (serviceRef.getServiceClassRef().equals(serviceClassRef) && isDelegated == serviceRef.isDelegated()) {
i1.remove();
}
}
*** 477,499 ****
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();
--- 479,501 ----
void cleanupReferences() {
if (serviceRequestors == null) return;
! Iterator<Map.Entry<Object, Map<Object, BCSSCServiceRef>>> requestors = serviceRequestors.entrySet().iterator();
while(requestors.hasNext()) {
! Map.Entry<Object, Map<Object, BCSSCServiceRef>> tmp = requestors.next();
Object requestor = tmp.getKey();
! Iterator<Map.Entry<Object, BCSSCServiceRef>> services = tmp.getValue().entrySet().iterator();
requestors.remove();
while (services.hasNext()) {
! Map.Entry<Object, BCSSCServiceRef> entry = services.next();
Object service = entry.getKey();
! BCSSCServiceRef sref = entry.getValue();
BCSSCServiceClassRef scref = sref.getServiceClassRef();
BeanContextServiceProvider bcsp = sref.isDelegated() ? scref.getDelegateProvider() : scref.getServiceProvider();
*** 511,546 ****
}
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();
}
}
--- 513,548 ----
}
void revokeAllDelegatedServicesNow() {
if (serviceClasses == null) return;
! Iterator<BCSSCServiceClassRef> serviceClassRefs =
! new HashSet<>(serviceClasses.values()).iterator();
while (serviceClassRefs.hasNext()) {
! BCSSCServiceClassRef serviceClassRef = serviceClassRefs.next();
if (!serviceClassRef.isDelegated()) continue;
! Iterator<Map.Entry<Object, BeanContextServiceRevokedListener>> i = serviceClassRef.cloneOfEntries();
BeanContextServiceRevokedEvent bcsre = new BeanContextServiceRevokedEvent(BeanContextServicesSupport.this.getBeanContextServicesPeer(), serviceClassRef.getServiceClass(), true);
boolean noMoreRefs = false;
while (i.hasNext()) {
! Map.Entry<Object, BeanContextServiceRevokedListener> entry = i.next();
! BeanContextServiceRevokedListener listener = entry.getValue();
Object requestor = entry.getKey();
! Map<Object, BCSSCServiceRef> services = serviceRequestors.get(requestor);
if (services != null) {
! Iterator<Map.Entry<Object, BCSSCServiceRef>> i1 = services.entrySet().iterator();
while (i1.hasNext()) {
! Map.Entry<Object, BCSSCServiceRef> tmp = i1.next();
! BCSSCServiceRef serviceRef = tmp.getValue();
if (serviceRef.getServiceClassRef().equals(serviceClassRef) && serviceRef.isDelegated()) {
i1.remove();
}
}
*** 566,577 ****
/*
* fields
*/
! private transient HashMap serviceClasses;
! private transient HashMap serviceRequestors;
}
/**
* <p>
* Subclasses can override this method to insert their own subclass
--- 568,579 ----
/*
* fields
*/
! private transient HashMap<Class<?>, BCSSCServiceClassRef> serviceClasses;
! private transient HashMap<Object, Map<Object, BeanContextServicesSupport.BCSSChild.BCSSCServiceRef>> serviceRequestors;
}
/**
* <p>
* Subclasses can override this method to insert their own subclass
*** 595,605 ****
*/
protected static class BCSSServiceProvider implements Serializable {
private static final long serialVersionUID = 861278251667444782L;
! BCSSServiceProvider(Class sc, BeanContextServiceProvider bcsp) {
super();
serviceProvider = bcsp;
}
--- 597,607 ----
*/
protected static class BCSSServiceProvider implements Serializable {
private static final long serialVersionUID = 861278251667444782L;
! BCSSServiceProvider(Class<?> sc, BeanContextServiceProvider bcsp) {
super();
serviceProvider = bcsp;
}
*** 625,635 ****
* @param sc the class
* @param bcsp the service provider
* @return a service provider without overriding addService()
*/
! protected BCSSServiceProvider createBCSSServiceProvider(Class sc, BeanContextServiceProvider bcsp) {
return new BCSSServiceProvider(sc, bcsp);
}
/************************************************************************/
--- 627,637 ----
* @param sc the class
* @param bcsp the service provider
* @return a service provider without overriding addService()
*/
! protected BCSSServiceProvider createBCSSServiceProvider(Class<?> sc, BeanContextServiceProvider bcsp) {
return new BCSSServiceProvider(sc, bcsp);
}
/************************************************************************/
*** 669,679 ****
* add a service
* @param serviceClass the service class
* @param bcsp the service provider
*/
! public boolean addService(Class serviceClass, BeanContextServiceProvider bcsp) {
return addService(serviceClass, bcsp, true);
}
/**
* add a service
--- 671,681 ----
* add a service
* @param serviceClass the service class
* @param bcsp the service provider
*/
! public boolean addService(Class<?> serviceClass, BeanContextServiceProvider bcsp) {
return addService(serviceClass, bcsp, true);
}
/**
* add a service
*** 681,691 ****
* @param bcsp the service provider
* @param fireEvent whether or not an event should be fired
* @return true if the service was successfully added
*/
! 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) {
--- 683,693 ----
* @param bcsp the service provider
* @param fireEvent whether or not an event should be fired
* @return true if the service was successfully added
*/
! 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) {
*** 702,712 ****
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) {
--- 704,714 ----
BeanContextServiceAvailableEvent bcssae = new BeanContextServiceAvailableEvent(getBeanContextServicesPeer(), serviceClass);
fireServiceAdded(bcssae);
synchronized(children) {
! Iterator<Object> i = children.keySet().iterator();
while (i.hasNext()) {
Object c = i.next();
if (c instanceof BeanContextServices) {
*** 725,752 ****
* @param serviceClass the service class
* @param bcsp the service provider
* @param revokeCurrentServicesNow whether or not to revoke the 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);
}
--- 727,754 ----
* @param serviceClass the service class
* @param bcsp the service provider
* @param revokeCurrentServicesNow whether or not to revoke the 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 = services.get(serviceClass);
if (!bcsssp.getServiceProvider().equals(bcsp))
throw new IllegalArgumentException("service provider mismatch");
services.remove(serviceClass);
if (bcsp instanceof Serializable) serializable--;
! Iterator<BeanContextSupport.BCSChild> i = bcsChildren(); // get the BCSChild values.
while (i.hasNext()) {
((BCSSChild)i.next()).revokeService(serviceClass, false, revokeCurrentServicesNow);
}
*** 756,766 ****
/**
* 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;
--- 758,768 ----
/**
* 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;
*** 789,799 ****
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) {
--- 791,801 ----
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) {
*** 805,820 ****
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());
}
}
--- 807,822 ----
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<BeanContextSupport.BCSChild> i = bcsChildren(); // get the BCSChild values.
while (i.hasNext()) {
((BCSSChild)i.next()).revokeService(bcsre.getServiceClass(), true, bcsre.isCurrentServiceInvalidNow());
}
}
*** 830,840 ****
/**
* 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");
--- 832,842 ----
/**
* 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");
*** 845,855 ****
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) {
BeanContextServiceProvider bcsp = bcsssp.getServiceProvider();
service = bcsp.getService(bcssp, requestor, serviceClass, serviceSelector);
if (service != null) { // do bookkeeping ...
--- 847,857 ----
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 = services.get(serviceClass);
if (bcsssp != null) {
BeanContextServiceProvider bcsp = bcsssp.getServiceProvider();
service = bcsp.getService(bcssp, requestor, serviceClass, serviceSelector);
if (service != null) { // do bookkeeping ...
*** 916,937 ****
/**
* @return an iterator for all the currently registered service classes.
*/
! public Iterator getCurrentServiceClasses() {
return new BCSIterator(services.keySet().iterator());
}
/**
* @return an iterator for all the currently available service selectors
* (if any) available for the specified service.
*/
! public Iterator getCurrentServiceSelectors(Class serviceClass) {
! BCSSServiceProvider bcsssp = (BCSSServiceProvider)services.get(serviceClass);
return bcsssp != null ? new BCSIterator(bcsssp.getServiceProvider().getCurrentServiceSelectors(getBeanContextServicesPeer(), serviceClass)) : null;
}
/**
--- 918,939 ----
/**
* @return an iterator for all the currently registered service classes.
*/
! public Iterator<Object> getCurrentServiceClasses() {
return new BCSIterator(services.keySet().iterator());
}
/**
* @return an iterator for all the currently available service selectors
* (if any) available for the specified service.
*/
! public Iterator<?> getCurrentServiceSelectors(Class<?> serviceClass) {
! BCSSServiceProvider bcsssp = services.get(serviceClass);
return bcsssp != null ? new BCSIterator(bcsssp.getServiceProvider().getCurrentServiceSelectors(getBeanContextServicesPeer(), serviceClass)) : null;
}
/**
*** 948,958 ****
synchronized(BeanContext.globalHierarchyLock) {
if (services.containsKey(bcssae.getServiceClass())) return;
fireServiceAdded(bcssae);
! Iterator i;
synchronized(children) {
i = children.keySet().iterator();
}
--- 950,960 ----
synchronized(BeanContext.globalHierarchyLock) {
if (services.containsKey(bcssae.getServiceClass())) return;
fireServiceAdded(bcssae);
! Iterator<Object> i;
synchronized(children) {
i = children.keySet().iterator();
}
*** 980,990 ****
synchronized(BeanContext.globalHierarchyLock) {
if (services.containsKey(bcssre.getServiceClass())) return;
fireServiceRevoked(bcssre);
! Iterator i;
synchronized(children) {
i = children.keySet().iterator();
}
--- 982,992 ----
synchronized(BeanContext.globalHierarchyLock) {
if (services.containsKey(bcssre.getServiceClass())) return;
fireServiceRevoked(bcssre);
! Iterator<Object> i;
synchronized(children) {
i = children.keySet().iterator();
}
*** 1083,1093 ****
/**
* Fires a <tt>BeanContextServiceEvent</tt> notifying of a new service.
* @param serviceClass the service class
*/
! protected final void fireServiceAdded(Class serviceClass) {
BeanContextServiceAvailableEvent bcssae = new BeanContextServiceAvailableEvent(getBeanContextServicesPeer(), serviceClass);
fireServiceAdded(bcssae);
}
--- 1085,1095 ----
/**
* Fires a <tt>BeanContextServiceEvent</tt> notifying of a new service.
* @param serviceClass the service class
*/
! protected final void fireServiceAdded(Class<?> serviceClass) {
BeanContextServiceAvailableEvent bcssae = new BeanContextServiceAvailableEvent(getBeanContextServicesPeer(), serviceClass);
fireServiceAdded(bcssae);
}
*** 1127,1137 ****
* indicating that a particular service is
* no longer available.
* @param serviceClass the service class
* @param revokeNow whether or not the event should be revoked now
*/
! protected final void fireServiceRevoked(Class serviceClass, boolean revokeNow) {
Object[] copy;
BeanContextServiceRevokedEvent bcsre = new BeanContextServiceRevokedEvent(getBeanContextServicesPeer(), serviceClass, revokeNow);
synchronized (bcsListeners) { copy = bcsListeners.toArray(); }
--- 1129,1139 ----
* indicating that a particular service is
* no longer available.
* @param serviceClass the service class
* @param revokeNow whether or not the event should be revoked now
*/
! protected final void fireServiceRevoked(Class<?> serviceClass, boolean revokeNow) {
Object[] copy;
BeanContextServiceRevokedEvent bcsre = new BeanContextServiceRevokedEvent(getBeanContextServicesPeer(), serviceClass, revokeNow);
synchronized (bcsListeners) { copy = bcsListeners.toArray(); }
*** 1157,1174 ****
if (serializable <= 0) return;
int count = 0;
! Iterator i = services.entrySet().iterator();
while (i.hasNext() && count < serializable) {
! Map.Entry entry = (Map.Entry)i.next();
BCSSServiceProvider bcsp = null;
try {
! bcsp = (BCSSServiceProvider)entry.getValue();
} catch (ClassCastException cce) {
continue;
}
if (bcsp.getServiceProvider() instanceof Serializable) {
--- 1159,1176 ----
if (serializable <= 0) return;
int count = 0;
! Iterator<Map.Entry<Object, BCSSServiceProvider>> i = services.entrySet().iterator();
while (i.hasNext() && count < serializable) {
! Map.Entry<Object, BCSSServiceProvider> entry = i.next();
BCSSServiceProvider bcsp = null;
try {
! bcsp = entry.getValue();
} catch (ClassCastException cce) {
continue;
}
if (bcsp.getServiceProvider() instanceof Serializable) {
*** 1199,1209 ****
serializable = ois.readInt();
int count = serializable;
while (count > 0) {
! services.put(ois.readObject(), ois.readObject());
count--;
}
}
/**
--- 1201,1211 ----
serializable = ois.readInt();
int count = serializable;
while (count > 0) {
! services.put(ois.readObject(), (BCSSServiceProvider)ois.readObject());
count--;
}
}
/**
*** 1234,1244 ****
/**
* all accesses to the <code> protected transient HashMap services </code>
* field should be synchronized on that object
*/
! protected transient HashMap services;
/**
* The number of instances of a serializable <tt>BeanContextServceProvider</tt>.
*/
protected transient int serializable = 0;
--- 1236,1246 ----
/**
* all accesses to the <code> protected transient HashMap services </code>
* field should be synchronized on that object
*/
! protected transient HashMap<Object, BCSSServiceProvider> services;
/**
* The number of instances of a serializable <tt>BeanContextServceProvider</tt>.
*/
protected transient int serializable = 0;
*** 1251,1257 ****
/**
* List of <tt>BeanContextServicesListener</tt> objects.
*/
! protected transient ArrayList bcsListeners;
}
--- 1253,1259 ----
/**
* List of <tt>BeanContextServicesListener</tt> objects.
*/
! protected transient ArrayList<BeanContextServicesListener> bcsListeners;
}