org.objectweb.joram.mom.dest
Class DestinationImpl

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

public abstract class DestinationImpl
extends java.lang.Object
implements java.io.Serializable, DestinationImplMBean

The DestinationImpl class implements the common behavior of MOM destinations.

See Also:
Serialized Form

Field Summary
static java.lang.String[] _rights
           
private  AgentId adminId
          Identifier of the destination's administrator.
protected  Destination agent
          Reference to the agent hosting the destination.
protected  java.util.Hashtable clients
          Table of the destination readers and writers.
 long creationDate
          date of creation.
private  boolean deletable
          true if the destination successfully processed a deletion request.
protected  AgentId dmqId
          Identifier of the dead message queue this destination must send its dead messages to, if any.
protected  boolean freeReading
          true if the READ access is granted to everybody.
protected  boolean freeWriting
          true if the WRITE access is granted to everybody.
static org.objectweb.util.monolog.api.Logger logger
           
protected  long nbMsgsDeliverSinceCreation
           
protected  long nbMsgsReceiveSinceCreation
           
protected  long nbMsgsSentToDMQSinceCreation
           
private  long period
          period to run task at regular interval: cleaning, load-balancing, etc.
static int READ
          READ access value.
static int READWRITE
          READ and WRITE access value.
(package private)  java.lang.StringBuffer strbuf
          Transient StringBuffer used to build message, this buffer is created during agent initialization, then reused during the destination life.
static java.lang.String WAKEUP_PERIOD
           
static int WRITE
          WRITE access value.
 
Constructor Summary
DestinationImpl(AgentId adminId, java.util.Properties prop)
          Constructs a DestinationImpl.
 
Method Summary
 boolean canBeDeleted()
          Returns true if the destination might be deleted.
protected  void clientMessages(AgentId from, ClientMessages not)
          Method implementing the reaction to a ClientMessages notification holding messages sent by a client.
 void delete()
          Deletes the destination.
 void deleteNot(AgentId from, DeleteNot not)
          Method implementing the reaction to a DeleteNot notification requesting the deletion of the destination.
protected abstract  void doClientMessages(AgentId from, ClientMessages not)
           
protected abstract  void doDeleteNot(DeleteNot not)
           
protected abstract  void doRightRequest(AgentId user, int right)
          This method is needed for right revocation.
protected abstract  void doUnknownAgent(UnknownAgent not)
           
 void forward(AgentId to, Notification not)
           
 java.lang.String getCreationDate()
          Returns this destination creation time through a String of the form: dow mon dd hh:mm:ss zzz yyyy.
 long getCreationTimeInMillis()
          Returns this destination creation time as a long.
 java.lang.String getDestinationId()
          Returns the unique identifier of the destination.
 AgentId getDMQAgentId()
           
 java.lang.String getDMQId()
          Return the unique identifier of DMQ set for this destination if any.
 AgentId getId()
          Identifier of the agent hosting the destination.
protected  java.util.Hashtable getJMXStatistics()
          Returns values of all valid JMX attributes about the destination.
 java.lang.String getName()
          Returns the name of the destination.
 long getNbMsgsDeliverSinceCreation()
          Returns the number of messages delivered since creation time of this destination.
abstract  long getNbMsgsReceiveSinceCreation()
          Returns the number of messages received since creation time of this destination.
 long getNbMsgsSentToDMQSinceCreation()
          Returns the number of erroneous messages forwarded to the DMQ since creation time of this destination..
 long getPeriod()
          Returns the period value of this destination, -1 if not set.
 java.lang.String getRight(java.lang.String userid)
          Returns a string representation of rights set on this destination for a particular user.
 java.lang.String[] getRights()
          Returns a string representation of the rights set on this destination.
 void getRights(AgentId from, GetRightsRequestNot not)
          Method implementing the reaction to a GetRightsRequest notification requesting the rights about this destination.
 void handleAdminRequestNot(AgentId from, FwdAdminRequestNot not)
           
protected  void handleDeniedMessage(java.lang.String msgId, AgentId replyTo)
          Method used to do specific actions when a message is denied because of a lack of rights.
abstract  void initialize(boolean firstTime)
          Initializes the destination.
protected  boolean isAdministrator(AgentId client)
          Checks the administering permission of a given client agent.
 boolean isFreeReading()
          Tests if this destination is free for reading.
 boolean isFreeWriting()
          Tests if this destination is free for writing.
protected  boolean isLocal(AgentId id)
           
protected  boolean isReader(AgentId client)
          Checks the reading permission of a given client agent.
protected  boolean isValidJMXAttribute(java.lang.String attrName)
          This method allows to exclude some JMX attribute of getJMXStatistics method.
protected  boolean isWriter(AgentId client)
          Checks the writing permission of a given client agent.
 void postProcess(ClientMessages msgs)
          This method is needed to add processing after the standard handling.
 ClientMessages preProcess(AgentId from, ClientMessages msgs)
          This method is needed to add processing before the standard handling.
protected  void processSetRight(AgentId user, int right)
          set user right.
private  void readObject(java.io.ObjectInputStream in)
           
protected  void replyToTopic(AdminReply reply, AgentId replyTo, java.lang.String requestMsgId, java.lang.String replyMsgId)
           
 void requestGroupNot(AgentId from, RequestGroupNot not)
           
 void setAgent(Destination agent)
           
 void setFreeReading(boolean on)
          Sets the FreeReading attribute for this destination.
 void setFreeWriting(boolean on)
          Sets the FreeWriting attribute for this destination.
(package private)  void setNoSave()
           
 void setPeriod(long period)
          Sets or unsets the period for this destination.
 void setRight(SetRight request, AgentId replyTo, java.lang.String requestMsgId, java.lang.String replyMsgId)
          Method implementing the reaction to a SetRightRequest notification requesting rights to be set for a user.
(package private)  void setSave()
           
protected  java.lang.Object specialAdminProcess(SpecialAdminRequest not)
           
 void specialAdminRequest(AgentId from, SpecialAdminRequest not)
          Method implementing the reaction to a SpecialAdminRequest notification requesting the special administration of the destination.
 void unknownAgent(AgentId from, UnknownAgent not)
          Method implementing the reaction to an UnknownAgent notification.
abstract  void wakeUpNot(WakeUpNot not)
           
private  void writeObject(java.io.ObjectOutputStream out)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface org.objectweb.joram.mom.dest.DestinationImplMBean
toString
 

Field Detail

logger

public static org.objectweb.util.monolog.api.Logger logger

WAKEUP_PERIOD

public static final java.lang.String WAKEUP_PERIOD
See Also:
Constant Field Values

deletable

private boolean deletable
true if the destination successfully processed a deletion request.


period

private long period
period to run task at regular interval: cleaning, load-balancing, etc.


adminId

private AgentId adminId
Identifier of the destination's administrator. In any case the administration topics are authorized to handle the destination, this mechanism allows an other agent to get the same rights. In particular it is needed to allow user's proxy to handle temporary destinations.


agent

protected transient Destination agent
Reference to the agent hosting the destination.


freeReading

protected boolean freeReading
true if the READ access is granted to everybody.


freeWriting

protected boolean freeWriting
true if the WRITE access is granted to everybody.


clients

protected java.util.Hashtable clients
Table of the destination readers and writers.


READ

public static int READ
READ access value.


WRITE

public static int WRITE
WRITE access value.


READWRITE

public static int READWRITE
READ and WRITE access value.


dmqId

protected AgentId dmqId
Identifier of the dead message queue this destination must send its dead messages to, if any.


strbuf

transient java.lang.StringBuffer strbuf
Transient StringBuffer used to build message, this buffer is created during agent initialization, then reused during the destination life.


creationDate

public long creationDate
date of creation.


nbMsgsReceiveSinceCreation

protected long nbMsgsReceiveSinceCreation

nbMsgsDeliverSinceCreation

protected long nbMsgsDeliverSinceCreation

nbMsgsSentToDMQSinceCreation

protected long nbMsgsSentToDMQSinceCreation

_rights

public static java.lang.String[] _rights
Constructor Detail

DestinationImpl

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

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

getId

public final AgentId getId()
Identifier of the agent hosting the destination.


getName

public final java.lang.String getName()
Description copied from interface: DestinationImplMBean
Returns the name of the destination.

Specified by:
getName in interface DestinationImplMBean
Returns:
the name of the destination.

setNoSave

void setNoSave()

setSave

void setSave()

initialize

public abstract void initialize(boolean firstTime)
Initializes the destination.

Parameters:
firstTime - true when first called by the factory

setAgent

public void setAgent(Destination agent)

isLocal

protected boolean isLocal(AgentId id)

canBeDeleted

public final boolean canBeDeleted()
Returns true if the destination might be deleted.


getPeriod

public long getPeriod()
Returns the period value of this destination, -1 if not set.

Specified by:
getPeriod in interface DestinationImplMBean
Returns:
the period value of this destination; -1 if not set.

setPeriod

public void setPeriod(long period)
Sets or unsets the period for this destination.

Specified by:
setPeriod in interface DestinationImplMBean
Parameters:
period - The period value to be set or -1 for unsetting previous value (ignore 0).

wakeUpNot

public abstract void wakeUpNot(WakeUpNot not)

setRight

public void setRight(SetRight request,
                     AgentId replyTo,
                     java.lang.String requestMsgId,
                     java.lang.String replyMsgId)
Method implementing the reaction to a SetRightRequest notification requesting rights to be set for a user.

Parameters:
not - The notification describing the security modifications.

doRightRequest

protected abstract void doRightRequest(AgentId user,
                                       int right)
This method is needed for right revocation. It allows to remove request or subscription from users no longer authorized.

Parameters:
user - The user about right modification.
right - The right modification.

processSetRight

protected void processSetRight(AgentId user,
                               int right)
                        throws RequestException
set user right.

Throws:
RequestException

getRights

public void getRights(AgentId from,
                      GetRightsRequestNot not)
               throws AccessException
Method implementing the reaction to a GetRightsRequest notification requesting the rights about this destination.

Throws:
AccessException - If the requester is not the administrator.

getRights

public java.lang.String[] getRights()
Returns a string representation of the rights set on this destination.

Specified by:
getRights in interface DestinationImplMBean
Returns:
the rights set on this destination.

getRight

public java.lang.String getRight(java.lang.String userid)
Returns a string representation of rights set on this destination for a particular user. The user is pointed out by its unique identifier.

Specified by:
getRight in interface DestinationImplMBean
Parameters:
userid - The user's unique identifier.
Returns:
the rights set on this destination.

isValidJMXAttribute

protected boolean isValidJMXAttribute(java.lang.String attrName)
This method allows to exclude some JMX attribute of getJMXStatistics method. It must be overloaded in subclass.

Parameters:
attrName - name of attribute to test.
Returns:
true if the attribute is a valid one.

getJMXStatistics

protected final java.util.Hashtable getJMXStatistics()
Returns values of all valid JMX attributes about the destination.

Returns:
a Hashtable containing the values of all valid JMX attributes about the destination. The keys are the name of corresponding attributes.

clientMessages

protected void clientMessages(AgentId from,
                              ClientMessages not)
                       throws AccessException
Method implementing the reaction to a ClientMessages notification holding messages sent by a client.

If the sender is not a writer on the destination the messages are sent to the DMQ and an exception is thrown. Otherwise, the processing of the received messages is performed in subclasses.

Throws:
AccessException - If the sender is not a WRITER on the destination.

handleDeniedMessage

protected void handleDeniedMessage(java.lang.String msgId,
                                   AgentId replyTo)
Method used to do specific actions when a message is denied because of a lack of rights.


unknownAgent

public void unknownAgent(AgentId from,
                         UnknownAgent not)
Method implementing the reaction to an UnknownAgent notification.

If the unknown agent is the DMQ, its identifier is set to null. If it is a client of the destination, it is removed. Specific processing is also done in subclasses.


deleteNot

public void deleteNot(AgentId from,
                      DeleteNot not)
Method implementing the reaction to a DeleteNot notification requesting the deletion of the destination.

The processing is done in subclasses if the sender is an administrator.


specialAdminRequest

public void specialAdminRequest(AgentId from,
                                SpecialAdminRequest not)
Method implementing the reaction to a SpecialAdminRequest notification requesting the special administration of the destination.


requestGroupNot

public void requestGroupNot(AgentId from,
                            RequestGroupNot not)

specialAdminProcess

protected java.lang.Object specialAdminProcess(SpecialAdminRequest not)
                                        throws RequestException
Throws:
RequestException

isReader

protected boolean isReader(AgentId client)
Checks the reading permission of a given client agent.

Parameters:
client - AgentId of the client requesting a reading permission.

isWriter

protected boolean isWriter(AgentId client)
Checks the writing permission of a given client agent.

Parameters:
client - AgentId of the client requesting a writing permission.

isAdministrator

protected boolean isAdministrator(AgentId client)
Checks the administering permission of a given client agent.

Parameters:
client - AgentId of the client requesting an admin permission.

doClientMessages

protected abstract void doClientMessages(AgentId from,
                                         ClientMessages not)

doUnknownAgent

protected abstract void doUnknownAgent(UnknownAgent not)

doDeleteNot

protected abstract void doDeleteNot(DeleteNot not)

delete

public void delete()
Description copied from interface: DestinationImplMBean
Deletes the destination.

Specified by:
delete in interface DestinationImplMBean

preProcess

public ClientMessages preProcess(AgentId from,
                                 ClientMessages msgs)
This method is needed to add processing before the standard handling. It is used in subclass of QueueImpl and TopicImpl. The incoming messages can be modified or deleted during the processing.

Parameters:
from - The sender of the message
msgs - The incoming messages.
Returns:
The incoming messages after processing.

postProcess

public void postProcess(ClientMessages msgs)
This method is needed to add processing after the standard handling. It is used in subclass of QueueImpl and TopicImpl. The incoming messages can be modified or deleted during the processing.

Parameters:
from - The sender of the message
msgs - The incoming messages.

writeObject

private void writeObject(java.io.ObjectOutputStream out)
                  throws java.io.IOException
Throws:
java.io.IOException

readObject

private void readObject(java.io.ObjectInputStream in)
                 throws java.io.IOException,
                        java.lang.ClassNotFoundException
Throws:
java.io.IOException
java.lang.ClassNotFoundException

getDestinationId

public final java.lang.String getDestinationId()
Returns the unique identifier of the destination.

Specified by:
getDestinationId in interface DestinationImplMBean
Returns:
the unique identifier of the destination.

isFreeReading

public boolean isFreeReading()
Tests if this destination is free for reading.

Specified by:
isFreeReading in interface DestinationImplMBean
Returns:
true if anyone can receive messages from this destination; false otherwise.

setFreeReading

public void setFreeReading(boolean on)
Sets the FreeReading attribute for this destination.

Specified by:
setFreeReading in interface DestinationImplMBean
Parameters:
on - if true anyone can receive message from this destination.

isFreeWriting

public boolean isFreeWriting()
Tests if this destination is free for writing.

Specified by:
isFreeWriting in interface DestinationImplMBean
Returns:
true if anyone can send messages to this destination; false otherwise.

setFreeWriting

public void setFreeWriting(boolean on)
Sets the FreeWriting attribute for this destination.

Specified by:
setFreeWriting in interface DestinationImplMBean
Parameters:
on - if true anyone can send message to this destination.

getDMQId

public java.lang.String getDMQId()
Return the unique identifier of DMQ set for this destination if any.

Specified by:
getDMQId in interface DestinationImplMBean
Returns:
the unique identifier of DMQ set for this destination if any; null otherwise.

getDMQAgentId

public AgentId getDMQAgentId()

getCreationTimeInMillis

public long getCreationTimeInMillis()
Returns this destination creation time as a long.

Specified by:
getCreationTimeInMillis in interface DestinationImplMBean
Returns:
the destination creation time as UTC milliseconds from the epoch.

getCreationDate

public java.lang.String getCreationDate()
Returns this destination creation time through a String of the form: dow mon dd hh:mm:ss zzz yyyy.

Specified by:
getCreationDate in interface DestinationImplMBean
Returns:
the destination creation time.

getNbMsgsReceiveSinceCreation

public abstract long getNbMsgsReceiveSinceCreation()
Returns the number of messages received since creation time of this destination.

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

getNbMsgsDeliverSinceCreation

public long getNbMsgsDeliverSinceCreation()
Returns the number of messages delivered since creation time of this destination. It includes messages all delivered messages to a consumer, already acknowledged or not.

Specified by:
getNbMsgsDeliverSinceCreation in interface DestinationImplMBean
Returns:
the number of messages delivered since creation time.

getNbMsgsSentToDMQSinceCreation

public long getNbMsgsSentToDMQSinceCreation()
Returns the number of erroneous messages forwarded to the DMQ since creation time of this destination..

Specified by:
getNbMsgsSentToDMQSinceCreation in interface DestinationImplMBean
Returns:
the number of erroneous messages forwarded to the DMQ.

replyToTopic

protected void replyToTopic(AdminReply reply,
                            AgentId replyTo,
                            java.lang.String requestMsgId,
                            java.lang.String replyMsgId)

forward

public final void forward(AgentId to,
                          Notification not)

handleAdminRequestNot

public void handleAdminRequestNot(AgentId from,
                                  FwdAdminRequestNot not)
Parameters:
from -
not -


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