org.objectweb.joram.mom.dest
Class TopicImpl

java.lang.Object
  extended by org.objectweb.joram.mom.dest.DestinationImpl
      extended by org.objectweb.joram.mom.dest.TopicImpl
All Implemented Interfaces:
java.io.Serializable, DestinationImplMBean, TopicImplMBean
Direct Known Subclasses:
AcquisitionTopicImpl, AdminTopicImpl, DistributionTopicImpl, JMSBridgeTopicImpl

public class TopicImpl
extends DestinationImpl
implements TopicImplMBean

The TopicImpl class implements the MOM topic behaviour, basically distributing the received messages to subscribers.

A Topic might be part of a hierarchy; if it is the case, and if the topic is not on top of that hierarchy, it will have a father to forward messages to.

A topic might also be part of a cluster; if it is the case, it will have friends to forward messages to.

A topic can't be part of a hierarchy and of a cluster at the same time.

See Also:
Serialized Form

Field Summary
protected  boolean alreadySentLocally
          Internal boolean used for tagging local sendings.
protected  AgentId fatherId
          Identifier of this topic's father, if any.
protected  java.util.Set friends
          Set of cluster fellows, if any.
protected  java.util.Hashtable selectors
          Table of subscribers' selectors.
private static long serialVersionUID
          define serialVersionUID for interoperability
protected  java.util.Vector subscribers
          Vector of subscribers' identifiers.
 
Fields inherited from class org.objectweb.joram.mom.dest.DestinationImpl
_rights, agent, clients, creationDate, dmqId, freeReading, freeWriting, logger, nbMsgsDeliverSinceCreation, nbMsgsReceiveSinceCreation, nbMsgsSentToDMQSinceCreation, READ, READWRITE, strbuf, WAKEUP_PERIOD, WRITE
 
Constructor Summary
TopicImpl(AgentId adminId, java.util.Properties prop)
          Constructs a TopicImpl instance.
 
Method Summary
 void clusterAck(AgentId from, ClusterAck ack)
          Method implementing the reaction to a ClusterAck notification sent by a topic requested to join the cluster.
 void clusterNot(AgentId from, ClusterNot not)
          Method implementing the reaction to a ClusterNot notification sent by a fellow topic for notifying this topic of a new cluster fellow insertion or suppression.
 void clusterTest(AgentId from, ClusterTest not)
          Method implementing the reaction to a ClusterTest notification sent by a fellow topic for testing if this topic might be part of a cluster.
protected  void doClientMessages(AgentId from, ClientMessages not)
          Method specifically processing a ClientMessages instance.
protected  void doDeleteNot(DeleteNot not)
          Method specifically processing a fr.dyade.aaa.agent.DeleteNot instance.
protected  void doRightRequest(AgentId user, int right)
          Method specifically processing a SetRightRequest instance.
protected  void doUnknownAgent(UnknownAgent uA)
          Method specifically processing an UnknownAgent instance.
protected  void forwardMessages(ClientMessages messages)
          Actually forwards a vector of messages to the father or the cluster fellows, if any.
 long getNbMsgsReceiveSinceCreation()
          Returns the number of messages received since creation time of this destination.
 int getNumberOfSubscribers()
          Returns the number of subscribers.
 java.lang.String[] getSubscriberIds()
          Returns the list of unique identifiers of all subscribers.
 void handleAdminRequestNot(AgentId from, FwdAdminRequestNot not)
           
 void initialize(boolean firstTime)
          Initializes the destination.
 void postSubscribe()
          Deprecated.  
 void postUnsubscribe()
          Deprecated.  
 void preSubscribe()
          Deprecated.  
 void preUnsubscribe()
          Deprecated.  
protected  void processMessages(ClientMessages not)
          Actually processes the distribution of the received messages to the valid subscriptions by sending a TopicMsgsReply notification to the valid subscribers.
 void setAlreadySentLocally(boolean alreadySentLocally)
           
private  void setDmq(TopicMsgsReply not)
           
 void subscribeRequest(AgentId from, SubscribeRequest not)
          Method implementing the reaction to a SubscribeRequest instance.
 void topicForwardNot(TopicForwardNot not)
          Method implementing the reaction to a TopicForwardNot instance, carrying messages forwarded by a cluster fellow or a hierarchical son.
 java.lang.String toString()
          Returns a string representation of this destination.
 void unsubscribeRequest(AgentId from)
          Method implementing the reaction to an UnsubscribeRequest instance, requesting to remove a subscriber.
 void wakeUpNot(WakeUpNot not)
           
 
Methods inherited from class org.objectweb.joram.mom.dest.DestinationImpl
canBeDeleted, clientMessages, delete, deleteNot, forward, getCreationDate, getCreationTimeInMillis, getDestinationId, getDMQAgentId, getDMQId, getId, getJMXStatistics, getName, getNbMsgsDeliverSinceCreation, getNbMsgsSentToDMQSinceCreation, getPeriod, getRight, getRights, getRights, handleDeniedMessage, isAdministrator, isFreeReading, isFreeWriting, isLocal, isReader, isValidJMXAttribute, isWriter, postProcess, preProcess, processSetRight, replyToTopic, requestGroupNot, setAgent, setFreeReading, setFreeWriting, setNoSave, setPeriod, setRight, setSave, specialAdminProcess, specialAdminRequest, unknownAgent
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface org.objectweb.joram.mom.dest.DestinationImplMBean
delete, getCreationDate, getCreationTimeInMillis, getDestinationId, getDMQId, getName, getNbMsgsDeliverSinceCreation, getNbMsgsSentToDMQSinceCreation, getPeriod, getRight, getRights, isFreeReading, isFreeWriting, setFreeReading, setFreeWriting, setPeriod
 

Field Detail

serialVersionUID

private static final long serialVersionUID
define serialVersionUID for interoperability

See Also:
Constant Field Values

fatherId

protected AgentId fatherId
Identifier of this topic's father, if any.


friends

protected java.util.Set friends
Set of cluster fellows, if any.


subscribers

protected java.util.Vector subscribers
Vector of subscribers' identifiers.


selectors

protected java.util.Hashtable selectors
Table of subscribers' selectors.


alreadySentLocally

protected transient boolean alreadySentLocally
Internal boolean used for tagging local sendings.

Constructor Detail

TopicImpl

public TopicImpl(AgentId adminId,
                 java.util.Properties prop)
Constructs a TopicImpl instance.

Parameters:
adminId - Identifier of the administrator of the topic.
prop - The initial set of properties.
Method Detail

initialize

public void initialize(boolean firstTime)
Initializes the destination.

Specified by:
initialize in class DestinationImpl
Parameters:
firstTime - true when first called by the factory

toString

public java.lang.String toString()
Returns a string representation of this destination.

Specified by:
toString in interface DestinationImplMBean
Overrides:
toString in class java.lang.Object

wakeUpNot

public void wakeUpNot(WakeUpNot not)
Specified by:
wakeUpNot in class DestinationImpl

clusterTest

public void clusterTest(AgentId from,
                        ClusterTest not)
Method implementing the reaction to a ClusterTest notification sent by a fellow topic for testing if this topic might be part of a cluster.


clusterAck

public void clusterAck(AgentId from,
                       ClusterAck ack)
Method implementing the reaction to a ClusterAck notification sent by a topic requested to join the cluster.


clusterNot

public void clusterNot(AgentId from,
                       ClusterNot not)
Method implementing the reaction to a ClusterNot notification sent by a fellow topic for notifying this topic of a new cluster fellow insertion or suppression.


preSubscribe

public void preSubscribe()
Deprecated. 

This method is currently needed by the JMSBridge. AF(TODO): Remove it.


postSubscribe

public void postSubscribe()
Deprecated. 

This method is currently needed by the JMSBridge. AF(TODO): Remove it.


subscribeRequest

public void subscribeRequest(AgentId from,
                             SubscribeRequest not)
                      throws AccessException
Method implementing the reaction to a SubscribeRequest instance.

Throws:
AccessException - If the sender is not a READER.

preUnsubscribe

public void preUnsubscribe()
Deprecated. 

This method is currently needed by the JMSBridge. AF(TODO): Remove it.


postUnsubscribe

public void postUnsubscribe()
Deprecated. 

This method is currently needed by the JMSBridge. AF(TODO): Remove it.


unsubscribeRequest

public void unsubscribeRequest(AgentId from)
Method implementing the reaction to an UnsubscribeRequest instance, requesting to remove a subscriber.


topicForwardNot

public void topicForwardNot(TopicForwardNot not)
Method implementing the reaction to a TopicForwardNot instance, carrying messages forwarded by a cluster fellow or a hierarchical son.


handleAdminRequestNot

public void handleAdminRequestNot(AgentId from,
                                  FwdAdminRequestNot not)
Overrides:
handleAdminRequestNot in class DestinationImpl
See Also:
DestinationImpl.handleAdminRequestNot(fr.dyade.aaa.agent.AgentId, org.objectweb.joram.mom.notifications.FwdAdminRequestNot)

getNumberOfSubscribers

public final int getNumberOfSubscribers()
Returns the number of subscribers. Each user appears once even if there is multiples subscriptions, the different subscriptions can be enumerate through the proxy MBean.

Specified by:
getNumberOfSubscribers in interface TopicImplMBean
Returns:
the number of subscribers.

getSubscriberIds

public final java.lang.String[] getSubscriberIds()
Returns the list of unique identifiers of all subscribers. Each user appears once even if there is multiples subscriptions, the different subscriptions can be enumerate through the proxy MBean.

Specified by:
getSubscriberIds in interface TopicImplMBean
Returns:
the list of unique identifiers of all subscribers.

doRightRequest

protected void doRightRequest(AgentId user,
                              int right)
Method specifically processing a SetRightRequest instance.

When a reader is removed, deleting this reader's subscription if any, and sending an ExceptionReply notification to the client.

Specified by:
doRightRequest in class DestinationImpl
Parameters:
user - The user about right modification.
right - The right modification.

doClientMessages

protected void doClientMessages(AgentId from,
                                ClientMessages not)
Method specifically processing a ClientMessages instance.

This method may forward the messages to the topic father if any, or to the cluster fellows if any.It may finally send TopicMsgsReply instances to the valid subscribers.

Specified by:
doClientMessages in class DestinationImpl

doUnknownAgent

protected void doUnknownAgent(UnknownAgent uA)
Method specifically processing an UnknownAgent instance.

This method notifies the administrator of the failing cluster or hierarchy building request, if needed, or removes the subscriptions of the deleted client, if any, or sets the father identifier to null if it comes from a deleted father.

Specified by:
doUnknownAgent in class DestinationImpl

doDeleteNot

protected void doDeleteNot(DeleteNot not)
Method specifically processing a fr.dyade.aaa.agent.DeleteNot instance.

UnknownAgent notifications are sent to each subscriber and UnclusterNot notifications to the cluster fellows.

Specified by:
doDeleteNot in class DestinationImpl

forwardMessages

protected void forwardMessages(ClientMessages messages)
Actually forwards a vector of messages to the father or the cluster fellows, if any.


processMessages

protected void processMessages(ClientMessages not)
Actually processes the distribution of the received messages to the valid subscriptions by sending a TopicMsgsReply notification to the valid subscribers.


setDmq

private void setDmq(TopicMsgsReply not)

setAlreadySentLocally

public void setAlreadySentLocally(boolean alreadySentLocally)

getNbMsgsReceiveSinceCreation

public long getNbMsgsReceiveSinceCreation()
Description copied from class: DestinationImpl
Returns the number of messages received since creation time of this destination.

Specified by:
getNbMsgsReceiveSinceCreation in interface DestinationImplMBean
Specified by:
getNbMsgsReceiveSinceCreation in class DestinationImpl
Returns:
the number of messages received since creation time.


Copyright © 2010 ScalAgent D.T.. All Rights Reserved.