GigaSpaces XAP 7.0 API

org.openspaces.events.notify
Class AbstractNotifyEventListenerContainer

java.lang.Object
  extended by org.openspaces.events.AbstractSpaceListeningContainer
      extended by org.openspaces.events.AbstractEventListenerContainer
          extended by org.openspaces.events.AbstractTemplateEventListenerContainer
              extended by org.openspaces.events.AbstractTransactionalEventListenerContainer
                  extended by org.openspaces.events.notify.AbstractNotifyEventListenerContainer
All Implemented Interfaces:
EventListener, ServiceDetailsProvider, ServiceMonitorsProvider, BeanNameAware, DisposableBean, InitializingBean, ApplicationContextAware, ApplicationListener, Lifecycle
Direct Known Subclasses:
SimpleNotifyEventListenerContainer

public abstract class AbstractNotifyEventListenerContainer
extends AbstractTransactionalEventListenerContainer

Base class for notifications based containers allowing to register listener that will be triggered by the space if notifications occur. Provides all the necessary parameters that are used by EventSessionConfig and support methods for creating EventSessionFactory and DataEventSession objects.

The container allows to set the template object used for the notify registration. Note, this can be a Pojo based template, or one of GigaSpace's query classes such as SQLQuery.

Masking of which operations will cause notifications can be set using setNotifyWrite(Boolean), setNotifyUpdate(Boolean), setNotifyTake(Boolean) and setNotifyLeaseExpire(Boolean). Note, if no flag is set, notifications will be send for write operations.

Batching of notifications can be turned on by setting both setBatchSize(Integer) and setBatchTime(Integer). When turning on batch notifications, the listener can choose whether to receive the events as an array (by setting setPassArrayAsIs(boolean) to true, or to receive the notifications one by one (setting it to false). By default, the setPassArrayAsIs(boolean) is set to false.

Fifo ordering of raised notification can be controlled by setting setFifo(boolean) flag to true. Note, for a full fifo based ordering the relevant entries in the space should be configured to be fifo as well.

Listener registration across replicated spaces can be set using setReplicateNotifyTemplate(boolean) and setTriggerNotifyTemplate(boolean).

The communication protocol between the space "server" and the even listener client can be configured using either setComType(int) or setComTypeName(String). The available options are COM_TYPE_UNICAST, COM_TYPE_MULTIPLEX and COM_TYPE_MULTICAST. If using setComType(int) the integer constant value should be used. If using setComTypeName(String) the actual name of the com type can be used (unicast, multiplex or multicast). The default communication type is COM_TYPE_UNICAST.

The AbstractTemplateEventListenerContainer.setTemplate(Object) parameter is required in order to perform matching on which events to receive. If the AbstractEventListenerContainer.setEventListener(org.openspaces.events.SpaceDataEventListener) implements EventTemplateProvider and the template is directly set, the event listener will be used to get the template. This feature helps when event listeners directly can only work with a certain template and removes the requirement of configuring the template as well.

Provides invokeListenerWithTransaction(Object,Object,boolean,boolean) allowing to execute the listener within a transactional context. Also allows for the performTakeOnNotify to control if a take operation will be performed against the space with the given event data in order to remove it from the space.

Author:
kimchy
See Also:
EventSessionConfig, EventSessionFactory, DataEventSession

Field Summary
static int COM_TYPE_MULTICAST
          Controls how notification are propagated from the space to the listener.
static int COM_TYPE_MULTIPLEX
          Controls how notification are propagated from the space to the listener.
static String COM_TYPE_PREFIX
           
static int COM_TYPE_UNICAST
          Controls how notification are propagated from the space to the listener.
 
Fields inherited from class org.openspaces.events.AbstractEventListenerContainer
failedEvents, processedEvents
 
Fields inherited from class org.openspaces.events.AbstractSpaceListeningContainer
beanName, logger
 
Constructor Summary
AbstractNotifyEventListenerContainer()
           
 
Method Summary
protected  DataEventSession createDataEventSession(EventSessionFactory factory)
          Creates a new DataEventSession based on the provided factory.
protected  EventSessionConfig createEventSessionConfig()
          Creates a new EventSessionConfig based on the different parameters this container accepts.
protected  EventSessionFactory createEventSessionFactory()
          Creates a new event session factory based on the space provided.
protected  Integer getBatchSize()
           
protected  Integer getBatchTime()
           
protected  int getCommType()
           
protected  Boolean getNotifyLeaseExpire()
           
protected  Boolean getNotifyTake()
           
protected  Boolean getNotifyUnmatched()
           
protected  Boolean getNotifyUpdate()
           
protected  Boolean getNotifyWrite()
           
protected  long getRenewDuration()
          The period of time that passes between client failure, and the time your notifications stop being sent.
protected  long getRenewExpiration()
          The period of time your notifications stop being renewed.
protected  long getRenewRTT()
          RoundTripTime - the time that takes to reach the server and return.
 void initialize()
          Initialize this container.
protected  void invokeListenerWithTransaction(com.gigaspaces.events.batching.BatchRemoteEvent batchRemoteEvent, boolean performTakeOnNotify, boolean ignoreEventOnNullTake)
           
protected  void invokeListenerWithTransaction(Object eventData, Object source, boolean performTakeOnNotify, boolean ignoreEventOnNullTake)
          Executes the given listener.
protected  boolean isAutoRenew()
           
protected  boolean isBatchEnabled()
          Returns true when batching is enabled.
protected  boolean isFifo()
           
protected  Boolean isGuaranteed()
           
protected  Boolean isNotifyAll()
           
protected  Boolean isNotifyLeaseExpire()
           
protected  Boolean isNotifyTake()
           
protected  Boolean isNotifyUnmatched()
           
protected  Boolean isNotifyUpdate()
           
protected  Boolean isNotifyWrite()
           
protected  boolean isPassArrayAsIs()
           
protected  Boolean isReplicateNotifyTemplate()
           
protected  Boolean isTriggerNotifyTemplate()
           
protected  void registerListener(DataEventSession dataEventSession, net.jini.core.event.RemoteEventListener listener)
          Registers a listener using the provided DataEventSession and based on different parameters set on this container.
 void setAutoRenew(boolean autoRenew)
          If setListenerLease(long) is set, automatically performs lease renewal.
 void setBatchSize(Integer batchSize)
          If set, turns batching event notifications where the server space accumalates notifications to be sent and then send them in batch.
 void setBatchTime(Integer batchTime)
          If set, turns batching event notifications where the server space accumalates notifications to be sent and then send them in batch.
 void setComType(int comType)
          See setComTypeName(String).
 void setComTypeName(String comTypeName)
          Sets the communication protocol for the notification registration.
 void setFifo(boolean fifo)
          Determines if events arrives in the same order they were triggered by the space "server".
 void setGuaranteed(Boolean guaranteed)
          Controls if notifications will be guaraneteed (at least once) in case of failover.
 void setLeaseListener(net.jini.lease.LeaseListener leaseListener)
          If setAutoRenew(boolean) is set to true sets the lease listener for it.
 void setListenerLease(long listenerLease)
          Controls the lease associated with the registered listener.
 void setNotifyAll(Boolean notifyAll)
          Turns on notifications for all operations.
 void setNotifyFilter(INotifyDelegatorFilter notifyFilter)
          Allows to register a filter on the server side that can filter out or modify notifications that will be sent by the space "server".
 void setNotifyLeaseExpire(Boolean notifyLeaseExpire)
          Turns on notification for least expiration.
 void setNotifyTake(Boolean notifyTake)
          Turns on notifications for take operations.
 void setNotifyUnmatched(Boolean notifyUnmatched)
          Turns on notifications for unmatched templates (a template that matched an entry but not it does not).
 void setNotifyUpdate(Boolean notifyUpdate)
          Turns on notifications for update operations.
 void setNotifyWrite(Boolean notifyWrite)
          Turns on notifications for write operations.
 void setPassArrayAsIs(boolean passArrayAsIs)
          When batching is turned on, should the batch of events be passed as an Object[] to the listener.
 void setRenewDuration(long renewDuration)
          The period of time that passes between client failure, and the time your notifications stop being sent.
 void setRenewExpiration(long renewExpiration)
          The period of time your notifications stop being renewed.
 void setRenewRTT(long renewRTT)
          RoundTripTime - the time that takes to reach the server and return.
 void setReplicateNotifyTemplate(boolean replicateNotifyTemplate)
          If using a replicated space controls if the listener will be replicated between all the replicated cluster members.
 void setTriggerNotifyTemplate(boolean triggerNotifyTemplate)
          If using a replicated space controls if the listener that are replicated to cluster members will raise notifications.
protected  void validateConfiguration()
          Validate the configuration of this container.
 
Methods inherited from class org.openspaces.events.AbstractTransactionalEventListenerContainer
getTransactionDefinition, getTransactionManager, getTransactionManagerName, isTransactional, setDisableTransactionValidation, setTransactionIsolationLevel, setTransactionIsolationLevelName, setTransactionManager, setTransactionName, setTransactionTimeout
 
Methods inherited from class org.openspaces.events.AbstractTemplateEventListenerContainer
afterPropertiesSet, getReceiveTemplate, getTemplate, isPerformSnapshot, setPerformSnapshot, setTemplate
 
Methods inherited from class org.openspaces.events.AbstractEventListenerContainer
doStart, executeListener, getActualEventListener, getApplicationContext, getEventListener, getEventListenerClass, getFailedEvents, getProcessedEvents, handleListenerException, invokeExceptionListener, invokeListener, setApplicationContext, setEventListener, setEventListenerRef
 
Methods inherited from class org.openspaces.events.AbstractSpaceListeningContainer
destroy, doAfterStart, doBeforeStop, doInitialize, doRescheduleTask, doShutdown, doStop, getBeanName, getGigaSpace, getStatus, isActive, isRunning, message, onApplicationEvent, rescheduleTaskIfNecessary, setActiveWhenPrimary, setAutoStart, setBeanName, setGigaSpace, setRegisterSpaceModeListener, shutdown, start, stop, waitWhileNotRunning
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface org.openspaces.pu.service.ServiceDetailsProvider
getServicesDetails
 
Methods inherited from interface org.openspaces.pu.service.ServiceMonitorsProvider
getServicesMonitors
 

Field Detail

COM_TYPE_PREFIX

public static final String COM_TYPE_PREFIX
See Also:
Constant Field Values

COM_TYPE_UNICAST

public static final int COM_TYPE_UNICAST
Controls how notification are propagated from the space to the listener. Unicast propagation uses TCP unicast communication which is usually best for small amount of registered clients. This is the default communication type.

See Also:
Constant Field Values

COM_TYPE_MULTIPLEX

public static final int COM_TYPE_MULTIPLEX
Controls how notification are propagated from the space to the listener. Same as unicast (COM_TYPE_UNICAST) in terms of communication protocol but uses a single client side multiplexer which handles all the dispatching to the different notification listeners.

See Also:
Constant Field Values

COM_TYPE_MULTICAST

public static final int COM_TYPE_MULTICAST
Controls how notification are propagated from the space to the listener. Multicast propagation uses UDP multicast communication which is usually best for large amount of registered clients.

See Also:
Constant Field Values
Constructor Detail

AbstractNotifyEventListenerContainer

public AbstractNotifyEventListenerContainer()
Method Detail

setComType

public void setComType(int comType)
See setComTypeName(String).

See Also:
COM_TYPE_MULTICAST, COM_TYPE_MULTIPLEX, COM_TYPE_UNICAST

getCommType

protected int getCommType()

setComTypeName

public void setComTypeName(String comTypeName)
Sets the communication protocol for the notification registration.

See Also:
COM_TYPE_MULTICAST, COM_TYPE_MULTIPLEX, COM_TYPE_UNICAST

setFifo

public void setFifo(boolean fifo)
Determines if events arrives in the same order they were triggered by the space "server". Note, for a full fifo based ordering the relevant entries in the space should be configured to be fifo as well.


isFifo

protected boolean isFifo()

setBatchSize

public void setBatchSize(Integer batchSize)
If set, turns batching event notifications where the server space accumalates notifications to be sent and then send them in batch. The batch size controls the number of notifications that will be batched before they are sent. Note, if setting this property the setBatchTime(Integer) must be set as well.


getBatchSize

protected Integer getBatchSize()

setBatchTime

public void setBatchTime(Integer batchTime)
If set, turns batching event notifications where the server space accumalates notifications to be sent and then send them in batch. The batch time controls the elapsed time until the batch buffer is cleared and sent. The time is in milliseconds. Note, if setting this property the setBatchSize(Integer) must be set as well.


getBatchTime

protected Integer getBatchTime()

setAutoRenew

public void setAutoRenew(boolean autoRenew)
If setListenerLease(long) is set, automatically performs lease renewal. Defaults to false.

See Also:
setListenerLease(long)

isAutoRenew

protected boolean isAutoRenew()

getRenewExpiration

protected long getRenewExpiration()
The period of time your notifications stop being renewed. Only applies when setAutoRenew(boolean) is true.

Defaults to EventSessionConfig.DEFAULT_RENEW_EXPIRATION.


setRenewExpiration

public void setRenewExpiration(long renewExpiration)
The period of time your notifications stop being renewed. Only applies when setAutoRenew(boolean) is true.

Defaults to EventSessionConfig.DEFAULT_RENEW_EXPIRATION.


getRenewDuration

protected long getRenewDuration()
The period of time that passes between client failure, and the time your notifications stop being sent. use more than renewRTT. Only applies when setAutoRenew(boolean) is true.

Defaults to EventSessionConfig.DEFAULT_RENEW_DURATION.


setRenewDuration

public void setRenewDuration(long renewDuration)
The period of time that passes between client failure, and the time your notifications stop being sent. use more than renewRTT. Only applies when setAutoRenew(boolean) is true.

Defaults to EventSessionConfig.DEFAULT_RENEW_DURATION.


getRenewRTT

protected long getRenewRTT()
RoundTripTime - the time that takes to reach the server and return. Only applies when setAutoRenew(boolean) is true.

Defaults to EventSessionConfig.DEFAULT_RENEW_RTT.


setRenewRTT

public void setRenewRTT(long renewRTT)
RoundTripTime - the time that takes to reach the server and return. Only applies when setAutoRenew(boolean) is true.

Defaults to EventSessionConfig.DEFAULT_RENEW_RTT.


setLeaseListener

public void setLeaseListener(net.jini.lease.LeaseListener leaseListener)
If setAutoRenew(boolean) is set to true sets the lease listener for it.


setListenerLease

public void setListenerLease(long listenerLease)
Controls the lease associated with the registered listener. Defaults to Lease.FOREVER.

See Also:
setAutoRenew(boolean)

setNotifyFilter

public void setNotifyFilter(INotifyDelegatorFilter notifyFilter)
Allows to register a filter on the server side that can filter out or modify notifications that will be sent by the space "server". Note, this filter will be passed to the space server and used there.


setNotifyWrite

public void setNotifyWrite(Boolean notifyWrite)
Turns on notifications for write operations. Defaults to false.


isNotifyWrite

protected Boolean isNotifyWrite()

setNotifyUpdate

public void setNotifyUpdate(Boolean notifyUpdate)
Turns on notifications for update operations. Defaults to false.


isNotifyUpdate

protected Boolean isNotifyUpdate()

setNotifyTake

public void setNotifyTake(Boolean notifyTake)
Turns on notifications for take operations. Defaults to false.


isNotifyTake

protected Boolean isNotifyTake()

setNotifyAll

public void setNotifyAll(Boolean notifyAll)
Turns on notifications for all operations. This flag will override all the other notify flags (if set). Defaults to false.


isNotifyAll

protected Boolean isNotifyAll()

setNotifyLeaseExpire

public void setNotifyLeaseExpire(Boolean notifyLeaseExpire)
Turns on notification for least expiration. Defaults to false.


isNotifyLeaseExpire

protected Boolean isNotifyLeaseExpire()

setNotifyUnmatched

public void setNotifyUnmatched(Boolean notifyUnmatched)
Turns on notifications for unmatched templates (a template that matched an entry but not it does not). Defaults to false.


isNotifyUnmatched

protected Boolean isNotifyUnmatched()

setTriggerNotifyTemplate

public void setTriggerNotifyTemplate(boolean triggerNotifyTemplate)
If using a replicated space controls if the listener that are replicated to cluster members will raise notifications.

See Also:
setReplicateNotifyTemplate(boolean)

isTriggerNotifyTemplate

protected Boolean isTriggerNotifyTemplate()

setReplicateNotifyTemplate

public void setReplicateNotifyTemplate(boolean replicateNotifyTemplate)
If using a replicated space controls if the listener will be replicated between all the replicated cluster members.

If working directly with a cluster memeber, the default value will be false. Otherwise, the default value will be based on the cluster schema (which is true for clusters with backups).

See Also:
setTriggerNotifyTemplate(boolean)

isReplicateNotifyTemplate

protected Boolean isReplicateNotifyTemplate()

setGuaranteed

public void setGuaranteed(Boolean guaranteed)
Controls if notifications will be guaraneteed (at least once) in case of failover.


isGuaranteed

protected Boolean isGuaranteed()

setPassArrayAsIs

public void setPassArrayAsIs(boolean passArrayAsIs)
When batching is turned on, should the batch of events be passed as an Object[] to the listener. Default to false which means it will be passed one event at a time.


isPassArrayAsIs

protected boolean isPassArrayAsIs()

getNotifyWrite

protected Boolean getNotifyWrite()

getNotifyUpdate

protected Boolean getNotifyUpdate()

getNotifyTake

protected Boolean getNotifyTake()

getNotifyLeaseExpire

protected Boolean getNotifyLeaseExpire()

getNotifyUnmatched

protected Boolean getNotifyUnmatched()

isBatchEnabled

protected boolean isBatchEnabled()
Returns true when batching is enabled.


initialize

public void initialize()
                throws DataAccessException
Description copied from class: AbstractSpaceListeningContainer
Initialize this container. If this container is not configured with "activeWhenPrimary" flag set to true will call AbstractSpaceListeningContainer.doStart() (if it is set to true, lifecycle of the container will be controlled by the current space mode). AbstractSpaceListeningContainer.doInitialize() will be called for additional initialization after the possible AbstractSpaceListeningContainer.doStart() call.

Overrides:
initialize in class AbstractTransactionalEventListenerContainer
Throws:
DataAccessException
See Also:
AbstractSpaceListeningContainer.onApplicationEvent(org.springframework.context.ApplicationEvent)

validateConfiguration

protected void validateConfiguration()
Description copied from class: AbstractSpaceListeningContainer
Validate the configuration of this container.

Overrides:
validateConfiguration in class AbstractTransactionalEventListenerContainer

createEventSessionFactory

protected EventSessionFactory createEventSessionFactory()
Creates a new event session factory based on the space provided.


createEventSessionConfig

protected EventSessionConfig createEventSessionConfig()
                                               throws IllegalArgumentException
Creates a new EventSessionConfig based on the different parameters this container accepts.

Throws:
IllegalArgumentException

createDataEventSession

protected DataEventSession createDataEventSession(EventSessionFactory factory)
                                           throws DataAccessException
Creates a new DataEventSession based on the provided factory. Uses createEventSessionConfig() in order to create the session configuration.

Throws:
DataAccessException

registerListener

protected void registerListener(DataEventSession dataEventSession,
                                net.jini.core.event.RemoteEventListener listener)
                         throws NotifyListenerRegistrationException
Registers a listener using the provided DataEventSession and based on different parameters set on this container.

Throws:
NotifyListenerRegistrationException

invokeListenerWithTransaction

protected void invokeListenerWithTransaction(com.gigaspaces.events.batching.BatchRemoteEvent batchRemoteEvent,
                                             boolean performTakeOnNotify,
                                             boolean ignoreEventOnNullTake)
                                      throws DataAccessException
Throws:
DataAccessException

invokeListenerWithTransaction

protected void invokeListenerWithTransaction(Object eventData,
                                             Object source,
                                             boolean performTakeOnNotify,
                                             boolean ignoreEventOnNullTake)
                                      throws DataAccessException
Executes the given listener. If a AbstractTransactionalEventListenerContainer.setTransactionManager(PlatformTransactionManager) is provided will perform the listener execution within a transaction, if not, the listener execution is performed without a transaction.

If the performTakeOnNotify flag is set to true will also perform take operation with the given event data (i.e. remove it from the space).

Parameters:
eventData - The event data object
source - The remote notify event
performTakeOnNotify - A flag indicating whether to perform take operation with the given event data
Throws:
DataAccessException

GigaSpaces XAP 7.0 API

Copyright © GigaSpaces.