public class SynchronizedServiceRegistry extends java.lang.Object implements IServiceRegistry
Modifier and Type | Field and Description |
---|---|
protected IServiceRegistry |
delegate
The service registry calls are delegated to.
|
protected java.util.concurrent.locks.ReentrantLock |
lock
Flag that a writer is performing updates.
|
protected int |
readercnt
The reader count.
|
protected boolean |
syncglobal
Flag if global searches should be synchronized.
|
protected java.util.List<Tuple2<IResultCommand<IFuture<java.lang.Void>,java.lang.Void>,Future<java.lang.Void>>> |
writeactions
The scheduled write actions (deferred when readers are currrently reading).
|
Constructor and Description |
---|
SynchronizedServiceRegistry(boolean syncglobal,
IServiceRegistry delegate)
Create a new SynchronizedMultiServiceRegistry.
|
Modifier and Type | Method and Description |
---|---|
void |
addEventListener(IRegistryListener listener)
Add an event listener.
|
void |
addExcludedComponent(IComponentIdentifier cid)
Add an excluded component.
|
<T> ISubscriptionIntermediateFuture<T> |
addQuery(ServiceQuery<T> query)
Add a service query to the registry.
|
IFuture<java.lang.Void> |
addService(ClassInfo key,
IService service)
Add a service to the registry.
|
<T> java.util.Set<ServiceQueryInfo<T>> |
getQueries(ClassInfo type)
Get queries per type.
|
static SynchronizedServiceRegistry |
getRegistry(IComponentIdentifier platform)
Get the registry from a component.
|
static SynchronizedServiceRegistry |
getRegistry(IInternalAccess ia)
Get the registry from a component.
|
java.util.Map<ClassInfo,java.util.Set<IService>> |
getServiceMap()
todo: WARNING: dangerous method that exposes the internal data structure
Get the service map.
|
java.util.Iterator<IService> |
getServices(ClassInfo type)
Get the services per type.
|
IServiceRegistry |
getSubregistry(IComponentIdentifier cid)
Get a subregistry.
|
boolean |
isIncluded(IComponentIdentifier cid,
IService ser)
Test if a service is included.
|
protected void |
lock()
Method that tries to get the lock and blocks otherwise (will terminate blocking after 3 seconds forcefully).
|
protected void |
performWrites()
Perform the scheduled write actions.
|
protected java.lang.Object |
readActionSync(IResultCommand<java.lang.Object,java.lang.Void> command,
java.lang.String op) |
protected void |
readerDec()
Get the lock and decrement the readers variable.
|
protected void |
readerInc(java.lang.String op)
Get the lock and increment the readers variable.
|
void |
removeEventListener(IRegistryListener listener)
Remove an event listener.
|
IFuture<java.lang.Void> |
removeExcludedComponent(IComponentIdentifier cid)
Remove an excluded component.
|
void |
removeQueries(IComponentIdentifier owner)
Remove all service queries of a specific component from the registry.
|
<T> void |
removeQuery(ServiceQuery<T> query)
Remove a service query from the registry.
|
void |
removeService(ClassInfo key,
IService service)
Remove a service from the registry.
|
void |
removeSubregistry(IComponentIdentifier cid)
Remove an existing registry.
|
<T> IFuture<T> |
searchGlobalService(ClassInfo type,
IComponentIdentifier cid,
IAsyncFilter<T> filter)
Search for services.
|
<T> ISubscriptionIntermediateFuture<T> |
searchGlobalServices(ClassInfo type,
IComponentIdentifier cid,
IAsyncFilter<T> filter)
Search for services.
|
<T> T |
searchService(ClassInfo type,
IComponentIdentifier cid,
java.lang.String scope)
Search for services.
|
<T> T |
searchService(ClassInfo type,
IComponentIdentifier cid,
java.lang.String scope,
boolean excluded)
Search for services.
|
<T> IFuture<T> |
searchService(ClassInfo type,
IComponentIdentifier cid,
java.lang.String scope,
IAsyncFilter<T> filter)
Search for service.
|
<T> T |
searchService(ClassInfo type,
IComponentIdentifier cid,
java.lang.String scope,
IFilter<T> filter)
Search for service.
|
<T> java.util.Collection<T> |
searchServices(ClassInfo type,
IComponentIdentifier cid,
java.lang.String scope)
Search for services.
|
<T> ISubscriptionIntermediateFuture<T> |
searchServices(ClassInfo type,
IComponentIdentifier cid,
java.lang.String scope,
IAsyncFilter<T> filter)
Search for services.
|
<T> java.util.Collection<T> |
searchServices(ClassInfo type,
IComponentIdentifier cid,
java.lang.String scope,
IFilter<T> filter)
Search for service.
|
protected void |
unlock()
Method that unlocks the lock.
|
protected IFuture<java.lang.Void> |
writeAction(IResultCommand<IFuture<java.lang.Void>,java.lang.Void> command) |
protected int readercnt
protected java.util.concurrent.locks.ReentrantLock lock
protected java.util.List<Tuple2<IResultCommand<IFuture<java.lang.Void>,java.lang.Void>,Future<java.lang.Void>>> writeactions
protected IServiceRegistry delegate
protected boolean syncglobal
public SynchronizedServiceRegistry(boolean syncglobal, IServiceRegistry delegate)
protected void lock()
protected void unlock()
protected IFuture<java.lang.Void> writeAction(IResultCommand<IFuture<java.lang.Void>,java.lang.Void> command)
command
- protected java.lang.Object readActionSync(IResultCommand<java.lang.Object,java.lang.Void> command, java.lang.String op)
command
- public IFuture<java.lang.Void> addService(ClassInfo key, IService service)
addService
in interface IServiceRegistry
sid
- The service id.public void removeService(ClassInfo key, IService service)
removeService
in interface IServiceRegistry
sid
- The service id.public <T> ISubscriptionIntermediateFuture<T> addQuery(ServiceQuery<T> query)
addQuery
in interface IServiceRegistry
query
- ServiceQuery.public <T> void removeQuery(ServiceQuery<T> query)
removeQuery
in interface IServiceRegistry
query
- ServiceQuery.public void removeQueries(IComponentIdentifier owner)
removeQueries
in interface IServiceRegistry
owner
- The query owner.public <T> T searchService(ClassInfo type, IComponentIdentifier cid, java.lang.String scope)
searchService
in interface IServiceRegistry
public <T> T searchService(ClassInfo type, IComponentIdentifier cid, java.lang.String scope, boolean excluded)
searchService
in interface IServiceRegistry
public <T> java.util.Collection<T> searchServices(ClassInfo type, IComponentIdentifier cid, java.lang.String scope)
searchServices
in interface IServiceRegistry
public <T> T searchService(ClassInfo type, IComponentIdentifier cid, java.lang.String scope, IFilter<T> filter)
searchService
in interface IServiceRegistry
public <T> java.util.Collection<T> searchServices(ClassInfo type, IComponentIdentifier cid, java.lang.String scope, IFilter<T> filter)
searchServices
in interface IServiceRegistry
public <T> IFuture<T> searchService(ClassInfo type, IComponentIdentifier cid, java.lang.String scope, IAsyncFilter<T> filter)
searchService
in interface IServiceRegistry
public <T> ISubscriptionIntermediateFuture<T> searchServices(ClassInfo type, IComponentIdentifier cid, java.lang.String scope, IAsyncFilter<T> filter)
searchServices
in interface IServiceRegistry
public <T> IFuture<T> searchGlobalService(ClassInfo type, IComponentIdentifier cid, IAsyncFilter<T> filter)
searchGlobalService
in interface IServiceRegistry
public <T> ISubscriptionIntermediateFuture<T> searchGlobalServices(ClassInfo type, IComponentIdentifier cid, IAsyncFilter<T> filter)
searchGlobalServices
in interface IServiceRegistry
public static SynchronizedServiceRegistry getRegistry(IComponentIdentifier platform)
public static SynchronizedServiceRegistry getRegistry(IInternalAccess ia)
protected void readerInc(java.lang.String op)
protected void readerDec()
protected void performWrites()
public java.util.Iterator<IService> getServices(ClassInfo type)
getServices
in interface IServiceRegistry
type
- The type.public void addExcludedComponent(IComponentIdentifier cid)
addExcludedComponent
in interface IServiceRegistry
The
- component identifier.public IFuture<java.lang.Void> removeExcludedComponent(IComponentIdentifier cid)
removeExcludedComponent
in interface IServiceRegistry
The
- component identifier.public boolean isIncluded(IComponentIdentifier cid, IService ser)
isIncluded
in interface IServiceRegistry
ser
- The service.public java.util.Map<ClassInfo,java.util.Set<IService>> getServiceMap()
getServiceMap
in interface IServiceRegistry
public <T> java.util.Set<ServiceQueryInfo<T>> getQueries(ClassInfo type)
getQueries
in interface IServiceRegistry
type
- The interface type. If type is null all services are returned.public void addEventListener(IRegistryListener listener)
addEventListener
in interface IServiceRegistry
listener
- The listener.public void removeEventListener(IRegistryListener listener)
removeEventListener
in interface IServiceRegistry
listener
- The listener.public IServiceRegistry getSubregistry(IComponentIdentifier cid)
getSubregistry
in interface IServiceRegistry
cid
- The platform id.public void removeSubregistry(IComponentIdentifier cid)
removeSubregistry
in interface IServiceRegistry
cid
- The component id to remove.