Class Destination

    • Field Detail

      • serialVersionUID

        private static final long serialVersionUID
        define serialVersionUID for interoperability, fix with 5.15.0 value. This value is identical in 5.15.0, 5.16.0, 5.16.3, 5.17 and next. It is different in 5.16.1 and 5.16.2 (and 5.17.0RC).
        See Also:
        Constant Field Values
      • logger

        private static final Logger logger
      • DEBUG

        private static final boolean DEBUG
      • temporary

        protected transient boolean temporary
      • 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.
      • interceptorsProp

        private List<Properties> interceptorsProp
        the interceptors list.
      • 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.
      • READ

        public static final Integer READ
        READ access value.
      • WRITE

        public static final Integer WRITE
        WRITE access value.
      • READWRITE

        public static final Integer 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 StringBuffer strbuf
        Transient StringBuffer used to build message, this buffer is created during agent initialization, then reused during the destination life.
      • creationDate

        private long creationDate
        date of creation.
      • strictCounters

        protected static boolean strictCounters
      • nbMsgsDeliverSinceCreation

        protected long nbMsgsDeliverSinceCreation
      • nbMsgsSentToDMQSinceCreation

        protected long nbMsgsSentToDMQSinceCreation
      • _rights

        private static String[] _rights
    • Constructor Detail

      • Destination

        public Destination()
        Empty constructor for newInstance().
      • Destination

        protected Destination​(String name,
                              boolean fixed,
                              int stamp)
        Constructor with parameters for fixing the destination and specifying its identifier. Be careful, this constructor should only be used for destinations with well known stamps, it throws an exception otherwise.
        Parameters:
        name - Name of destination;
        fixed - If true, destination is fixed in memory.
        stamp - Specific stamp for resulting agent.
    • Method Detail

      • agentInitialize

        protected void agentInitialize​(boolean firstTime)
                                throws Exception
        Gives this agent an opportunity to initialize after having been deployed, and each time it is loaded into memory.
        Overrides:
        agentInitialize in class Agent
        Parameters:
        firstTime - true when first called by the factory
        Throws:
        Exception - unspecialized exception
      • initialize

        protected abstract void initialize​(boolean firstTime)
                                    throws Exception
        Initializes the destination.
        Parameters:
        firstTime - true when first called by the factory
        Throws:
        Exception
      • agentFinalize

        public void agentFinalize​(boolean last)
        Finalizes the agent before it is garbaged.
        Overrides:
        agentFinalize in class Agent
        Parameters:
        last - true if the destination is deleted
      • finalize

        protected abstract void finalize​(boolean last)
        Finalizes the destination before it is garbaged.
        Parameters:
        last - true if the destination is deleted
      • getMBeanName

        private final String getMBeanName()
      • react

        public void react​(AgentId from,
                          Notification not)
                   throws Exception
        Distributes the received notifications to the appropriate reactions.
        Overrides:
        react in class Agent
        Parameters:
        from - agent sending notification
        not - notification to react to
        Throws:
        Exception
      • doSetPeriod

        private void doSetPeriod​(long period)
      • setAdminId

        public final void setAdminId​(AgentId adminId)
        Sets the administrator of the destination.
        Parameters:
        adminId - Identifier of the administrator of the destination.
      • setProperties

        public void setProperties​(Properties prop,
                                  boolean firstTime)
                           throws Exception
        Sets the configuration of a Destination. Be careful, this is done a first time before Agent.deploy(), so the agent is serialized and initialized afterwards.
        After deployment, firstTime argument is set to false.
        Parameters:
        prop - The initial set of properties.
        Throws:
        Exception
      • isLocal

        protected boolean isLocal​(AgentId id)
      • canBeDeleted

        private 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 DestinationMBean
        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 DestinationMBean
        Parameters:
        period - The period value to be set or -1 for unsetting previous value (ignore 0).
      • wakeUpNot

        public abstract void wakeUpNot​(WakeUpNot not)
      • setRight

        protected void setRight​(SetRight request,
                                AgentId replyTo,
                                String requestMsgId,
                                String replyMsgId)
        Method implementing the reaction to a SetRightRequest notification requesting rights to be set for a user.
        Parameters:
        request - ACL
        replyTo - Identifier of the sender
        requestMsgId - identifier of the request
        replyMsgId - identifier of the reply
      • 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.
      • getRights

        protected 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 String[] getRights()
        Returns a string representation of the rights set on this destination.
        Specified by:
        getRights in interface DestinationMBean
        Returns:
        the rights set on this destination.
      • getRight

        public String getRight​(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 DestinationMBean
        Parameters:
        userid - The user's unique identifier.
        Returns:
        the rights set on this destination.
      • isValidJMXAttribute

        protected boolean isValidJMXAttribute​(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 Hashtable<String,​Object> getJMXStatistics​(String names)
        Returns values of all valid JMX attributes about the destination.
        Parameters:
        names - A comma separated list of requested JMX attribute names.
        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​(String msgId,
                                           AgentId replyTo)
        Method used to do specific actions when a message is denied because of a lack of rights.
      • unknownAgent

        protected 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

        protected 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.

      • 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.
      • doUnknownAgent

        protected abstract void doUnknownAgent​(UnknownAgent not)
      • doDeleteNot

        protected abstract void doDeleteNot​(DeleteNot not)
      • delete

        public void delete()
        Description copied from class: Agent
        Permits this agent to destroy itself. If necessary, this method should be overloaded to work properly.
        Specified by:
        delete in interface AgentMBean
        Specified by:
        delete in interface DestinationMBean
        Overrides:
        delete in class Agent
      • preProcess

        protected ClientMessages preProcess​(AgentId from,
                                            ClientMessages msgs)
        This method is needed to add processing before the standard handling. It is used in subclass of Queue and Topic. 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

        protected void postProcess​(ClientMessages msgs)
        This method is needed to add processing after the standard handling. It is used in subclass of Queue and Topic. The incoming messages can be modified or deleted during the processing.
        Parameters:
        msgs - The incoming messages.
      • getDestinationId

        public final String getDestinationId()
        Returns the unique identifier of the destination.
        Specified by:
        getDestinationId in interface DestinationMBean
        Returns:
        the unique identifier of the destination.
      • isFreeReading

        public boolean isFreeReading()
        Tests if this destination is free for reading.
        Specified by:
        isFreeReading in interface DestinationMBean
        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 DestinationMBean
        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 DestinationMBean
        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 DestinationMBean
        Parameters:
        on - if true anyone can send message to this destination.
      • getDMQId

        public String getDMQId()
        Return the unique identifier of DMQ set for this destination if any.
        Specified by:
        getDMQId in interface DestinationMBean
        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 DestinationMBean
        Returns:
        the destination creation time as UTC milliseconds from the epoch.
      • getCreationDate

        public 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 DestinationMBean
        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 DestinationMBean
        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 DestinationMBean
        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 DestinationMBean
        Returns:
        the number of erroneous messages forwarded to the DMQ.
      • handleAdminRequestNot

        protected void handleAdminRequestNot​(AgentId from,
                                             FwdAdminRequestNot not)
        Parameters:
        from -
        not -
      • processAdminCommand

        protected void processAdminCommand​(AdminCommandRequest request,
                                           AgentId replyTo,
                                           String requestMsgId)
        Proccess an admin command.
        Parameters:
        request - The administration request.
        replyTo - The destination to reply.
        requestMsgId - The JMS message id needed to reply.
      • processStartHandler

        protected Properties processStartHandler​(Properties prop)
                                          throws Exception
        Start the acquisition queue/topic handler.
        Parameters:
        prop - properties for start if needed (can be null)
        Returns:
        properties for the reply.
        Throws:
        Exception
      • processStopHandler

        protected Properties processStopHandler​(Properties prop)
                                         throws Exception
        Stop the acquisition queue/topic handler.
        Parameters:
        prop - properties for start if needed (can be null)
        Returns:
        properties for the reply.
        Throws:
        Exception
      • processPause

        protected Properties processPause​(Properties prop)
                                   throws Exception
        Pause / Resume the message distribution.
        Parameters:
        prop - properties for start if needed (can be null)
        Returns:
        properties for the reply.
        Throws:
        Exception
      • processInterceptors

        protected Message processInterceptors​(Message msg)
        Run all defined interceptors on the message.
        Parameters:
        msg - the message
        Returns:
        message potentially modified by the interceptors, null if an interceptor reject the message.
      • interceptorsAvailable

        protected boolean interceptorsAvailable()
        Returns:
        true if interceptors set