Class JMSPublishingTransportManager

  • Direct Known Subclasses:
    JMSTopicTransportManager

    public class JMSPublishingTransportManager
    extends BroadcastTransportManager

    Purpose: Provide a transport implementation for the Remote Command Module (RCM) that publishes to a JMS topic.

    Description: This class manages two connections: an external connection for publishing to JMS, and a local connection which can be used to process JMS messages received from an application JMS listener.

    Author:
    Chris Delahunt
    Since:
    EclipseLink 2.1
    • Field Detail

      • connectionFactoryName

        protected java.lang.String connectionFactoryName
      • reuseJMSTopicPublisher

        protected boolean reuseJMSTopicPublisher
      • DEFAULT_CONNECTION_FACTORY

        public static final java.lang.String DEFAULT_CONNECTION_FACTORY
        See Also:
        Constant Field Values
    • Constructor Detail

      • JMSPublishingTransportManager

        public JMSPublishingTransportManager​(RemoteCommandManager rcm)
        PUBLIC: Creates a JMSPublishingOnlyTopicTransportManager
    • Method Detail

      • createConnection

        protected org.eclipse.persistence.internal.sessions.coordination.jms.JMSTopicRemoteConnection createConnection​(boolean isLocalConnectionBeingCreated)
                                                                                                                throws RemoteCommandManagerException
        INTERNAL: This method creates JMSTopicRemoteConnection to be used by this TransportManager. Don't confuse this method with no-op createConnection(ServiceId serviceId).
        Throws:
        RemoteCommandManagerException
      • createConnections

        public void createConnections()
        INTERNAL: JMSTopicTransportManager doesn't use DiscoveryManager, therefore this method is called during RCM initialization to create all the necessary connections.
        Overrides:
        createConnections in class BroadcastTransportManager
      • createExternalConnection

        public void createExternalConnection()
        INTERNAL: JMSPublishingTransportManager has maximum one external connection. Verify there are no external connections, create a new external connection, add it to external connections' map.
      • createLocalConnection

        public void createLocalConnection()
        INTERNAL: JMSPublishingTransportManager has only two connections: one local and one external. In case the local connection doesn't exist, this method creates it and holds it to be used when processing incoming JMS messages. The stored local connection on JMSPublishingTransportManager does not connect to topicConnection, and instead must be used from an MDB when a message is received
        Specified by:
        createLocalConnection in class TransportManager
      • getConnectionsToExternalServicesForCommandPropagation

        public java.util.Map<java.lang.String,​org.eclipse.persistence.internal.sessions.coordination.RemoteConnection> getConnectionsToExternalServicesForCommandPropagation()
        INTERNAL: In case there's no external connection attempts to create one. Returns clone of the original map.
        Overrides:
        getConnectionsToExternalServicesForCommandPropagation in class TransportManager
      • getReuseJMSTopicPublisher

        public boolean getReuseJMSTopicPublisher()
        PUBLIC: flag used to toggle between j2EE/JMS spec compliant behavior and legacy behavior. Default value false causes external JMSTopicRemoteConnection to cache the TopicConnectionFactory and obtain TopicConnections, TopicSession and TopicPublishers every time executeCommand is called, and then closing them immediately. This is JMS and J2EE compliant, as the TopicConnection is never reused in different threads. True causes TopicConnection, TopicSession and TopicPublisher to be cached within the JMSTopicRemoteConnection and used for every executeCommand call. These objects can potentially used concurrently, which the JMS spec does not force providers to support.
      • getTopic

        protected javax.jms.Topic getTopic​(javax.naming.Context remoteHostContext)
        INTERNAL:
      • getTopicConnectionFactory

        protected javax.jms.TopicConnectionFactory getTopicConnectionFactory​(javax.naming.Context remoteHostContext)
        INTERNAL:
      • getTopicConnectionFactoryName

        public java.lang.String getTopicConnectionFactoryName()
        PUBLIC: Return the JMS Topic Connection Factory Name for the JMS Topic connections.
      • getTopicHostUrl

        public java.lang.String getTopicHostUrl()
        PUBLIC: Return the URL of the machine on the network that hosts the JMS Topic. This is a required property and must be configured.
      • initialize

        public void initialize()
        INTERNAL: Initialize default properties.
        Overrides:
        initialize in class TransportManager
      • removeLocalConnection

        public void removeLocalConnection()
        INTERNAL: No-op, as the local connection does not need to be removed from JMSPublishingTransportManager. An application must close the connection directly if it is using the local connection as a listener.
        Specified by:
        removeLocalConnection in class TransportManager
      • setNamingServiceType

        public void setNamingServiceType​(int serviceType)
        ADVANCED: This function is not supported for naming service other than JNDI or TransportManager.JNDI_NAMING_SERVICE.
        Overrides:
        setNamingServiceType in class TransportManager
      • setShouldReuseJMSTopicPublisher

        public void setShouldReuseJMSTopicPublisher​(boolean reuseJMSTopicPublisher)
        PUBLIC: flag used to toggle between j2EE/JMS spec compliant behavior and legacy behavior. Default value false causes external JMSTopicRemoteConnection to cache the TopicConnectionFactory and obtain TopicConnections, TopicSession and TopicPublishers every time executeCommand is called, and then closing them immediately. This is JMS and J2EE compliant, as the TopicConnection is never reused in different threads. True causes TopicConnection, TopicSession and TopicPublisher to be cached within the JMSTopicRemoteConnection and used for every executeCommand call. These objects can potentially used concurrently, which the JMS spec does not force providers to support.
        Parameters:
        reuseJMSTopicPublisher -
      • setTopicConnectionFactoryName

        public void setTopicConnectionFactoryName​(java.lang.String newTopicConnectionFactoryName)
        PUBLIC: Configure the JMS Topic Connection Factory Name for the JMS Topic connections.
      • setTopicHostUrl

        public void setTopicHostUrl​(java.lang.String jmsHostUrl)
        PUBLIC: Configure the URL of the machine on the network that hosts the JMS Topic. This is a required property and must be configured.