Class DefaultTopicDistributionService
java.lang.Object
org.glassfish.hk2.extras.events.internal.DefaultTopicDistributionService
- All Implemented Interfaces:
DynamicConfigurationListener
,InstanceLifecycleListener
,TopicDistributionService
@Singleton
@Named("HK2TopicDistributionService")
@ContractsProvided({TopicDistributionService.class,InstanceLifecycleListener.class,DynamicConfigurationListener.class})
public class DefaultTopicDistributionService
extends Object
implements TopicDistributionService, InstanceLifecycleListener, DynamicConfigurationListener
This is the default implementation of the TopicDistributionService.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate static class
This is here to handle the case where a PerLookup Factory (or the like) could possibly return different classes every time it is looked up.private static class
private static class
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final HashMap
<DefaultTopicDistributionService.ActivatorClassKey, List<DefaultTopicDistributionService.SubscriberInfo>> private final HashMap
<ActiveDescriptor<?>, Set<Class<?>>> private ServiceLocator
private final ReentrantReadWriteLock
private final ClassReflectionHelper
private final ReentrantReadWriteLock.ReadLock
private ActiveDescriptor
<TopicDistributionService> private static final Filter
private final ReentrantReadWriteLock.WriteLock
Fields inherited from interface org.glassfish.hk2.api.messaging.TopicDistributionService
HK2_DEFAULT_TOPIC_DISTRIBUTOR
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoid
This method is called when the set of descriptors in this service locator has been changed.void
distributeMessage
(Topic<?> topic, Object message) Must distribute the message to all of the matching topic subscribers.private Method
findMethodOnDifferentClass
(Class<?> findOnMe, Method method) private void
fire
(Object message, Method subscription, DefaultTopicDistributionService.SubscriberInfo subscriptionInfo, Object target, ServiceLocator locator) private static DefaultTopicDistributionService.SubscriberInfo
generateSubscriberInfo
(ActiveDescriptor<?> injecteeDescriptor, Method subscriber, Method useSubscriber, int subscribeToPosition, Annotation[][] paramAnnotations) This returns a filter that tells the system whether a particular descriptor should be handled by this lifecycle listener.handleDescriptorToClass
(ActiveDescriptor<?> descriptor, Class<?> clazz, Type eventType, Topic<?> topic) void
lifecycleEvent
(InstanceLifecycleEvent lifecycleEvent) This method will be called when any lifecycle event occurs.private void
postProduction
(InstanceLifecycleEvent lifecycleEvent) private void
preDestruction
(InstanceLifecycleEvent lifecycleEvent)
-
Field Details
-
SUBSCRIBER_FILTER
-
locator
-
errorHandlers
-
selfDescriptor
-
reflectionHelper
-
descriptor2Classes
-
class2Subscribers
private final HashMap<DefaultTopicDistributionService.ActivatorClassKey,List<DefaultTopicDistributionService.SubscriberInfo>> class2Subscribers -
readWriteLock
-
wLock
-
rLock
-
-
Constructor Details
-
DefaultTopicDistributionService
public DefaultTopicDistributionService()
-
-
Method Details
-
fire
private void fire(Object message, Method subscription, DefaultTopicDistributionService.SubscriberInfo subscriptionInfo, Object target, ServiceLocator locator) throws Throwable - Throws:
Throwable
-
handleDescriptorToClass
private List<DefaultTopicDistributionService.FireResults> handleDescriptorToClass(ActiveDescriptor<?> descriptor, Class<?> clazz, Type eventType, Topic<?> topic) -
distributeMessage
Description copied from interface:TopicDistributionService
Must distribute the message to all of the matching topic subscribers. Any exception thrown from this method will be ignored. Instead error handling should be performed by the implementation of this message- Specified by:
distributeMessage
in interfaceTopicDistributionService
- Parameters:
topic
- The topic to which to distribute the message. Must not be nullmessage
- The message to send to the topic. Must not be null
-
getFilter
Description copied from interface:InstanceLifecycleListener
This returns a filter that tells the system whether a particular descriptor should be handled by this lifecycle listener. The filter can be called at any time- Specified by:
getFilter
in interfaceInstanceLifecycleListener
- Returns:
- The filter that tells the system if this listener applies to this descriptor. If this returns null then this Listener will apply to ALL descriptors.
-
postProduction
-
findMethodOnDifferentClass
-
generateSubscriberInfo
private static DefaultTopicDistributionService.SubscriberInfo generateSubscriberInfo(ActiveDescriptor<?> injecteeDescriptor, Method subscriber, Method useSubscriber, int subscribeToPosition, Annotation[][] paramAnnotations) -
preDestruction
-
lifecycleEvent
Description copied from interface:InstanceLifecycleListener
This method will be called when any lifecycle event occurs. The currently supported lifecycle events are PRE_PRODUCTION, POST_PRODUCTION and PRE_DESTRUCTION. Code should be written to allow for future events to be generated. This method should not throw exceptions- Specified by:
lifecycleEvent
in interfaceInstanceLifecycleListener
- Parameters:
lifecycleEvent
- The event that has occurred, will not be null
-
configurationChanged
public void configurationChanged()Description copied from interface:DynamicConfigurationListener
This method is called when the set of descriptors in this service locator has been changed. Changes to parent service locators descriptors will not be reported. These services are called back on the thread doing theDynamicConfiguration.commit()
so care should be taken to do any work quickly. Any exception thrown from this method will be ignored. A commit that failed will not be reported to this method- Specified by:
configurationChanged
in interfaceDynamicConfigurationListener
-