Package org.jgroups.protocols
Class JMS
- java.lang.Object
-
- org.jgroups.stack.Protocol
-
- org.jgroups.protocols.JMS
-
- All Implemented Interfaces:
javax.jms.MessageListener
public class JMS extends Protocol implements javax.jms.MessageListener
Implementation of the transport protocol using the Java Message Service (JMS). This implementation depends on the JMS server that will distribute messages published to the specific topic to all topic subscribers.Protocol parameters are:
topicName- (required), full JNDI name of the topic to be used for message publishing;cf- (optional), full JNDI name of the topic connection factory that will create topic connection, default value is"ConnectionFactory";jndiCtx- (optional), value of thejavax.naming.Context.INITIAL_CONTEXT_FACTORYproperty; you can specify it as the JVM system property-Djava.naming.factory.initial=factory.class.Name;providerURL- (optional), value of thejavax.naming.Context.PROVIDER_URLproperty; you can specify it as the JVM system property-Djava.naming.provider.url=some_urlttl- (required), time to live in milliseconds. Default value is 0, that means that messages will never expire and will be accumulated by a JMS server.
Note, when you are using the JMS protocol, try to avoid using protocols that open server socket connections, like FD_SOCK. I belive that FD is more appropriate failure detector for JMS case.
- Author:
- Roman Rokytskyy (rrokytskyy@acm.org)
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classJMS.JMSAddressSimpleAddressrepresenting the JMS node ID or JMS topic group.
-
Field Summary
Fields Modifier and Type Field Description static java.lang.StringDEFAULT_CONNECTION_FACTORYstatic java.lang.StringDEST_PROPERTYstatic java.lang.StringGROUP_NAME_PROPERTYstatic java.lang.StringINIT_CONNECTION_FACTORYstatic java.lang.StringINIT_JNDI_CONTEXTstatic java.lang.StringINIT_PROVIDER_URLstatic java.lang.StringINIT_TOPIC_NAMEstatic java.lang.StringSRC_PROPERTYstatic java.lang.StringTIME_TO_LIVE
-
Constructor Summary
Constructors Constructor Description JMS()Empty constructor.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description java.lang.Objectdown(Event evt)Called by the protocol above this.protected java.lang.StringgenerateLocalAddress()Generate random local address.java.lang.StringgetName()Get the name of the protocol.protected java.lang.ObjecthandleDownEvent(Event evt)Handle down event, if it is not a Event.MSG type.voidonMessage(javax.jms.Message jmsMessage)Implementation of thejavax.jms.MessageListenerinterface.protected voidsendMessage(Message msg)Publish message in the JMS topic.booleansetProperties(java.util.Properties props)Set protocol properties.voidstart()Start the JMS protocol.voidstop()Stops the work of the JMS protocol.java.lang.StringtoString()Get the string representation of the protocol.-
Methods inherited from class org.jgroups.stack.Protocol
destroy, downThreadEnabled, dumpStats, enableStats, getDownProtocol, getProperties, getProtocolStack, getThreadFactory, getTransport, getUpProtocol, init, printStats, providedDownServices, providedUpServices, requiredDownServices, requiredUpServices, resetStats, setDownProtocol, setPropertiesInternal, setProtocolStack, setUpProtocol, statsEnabled, up, upThreadEnabled
-
-
-
-
Field Detail
-
DEFAULT_CONNECTION_FACTORY
public static final java.lang.String DEFAULT_CONNECTION_FACTORY
- See Also:
- Constant Field Values
-
INIT_CONNECTION_FACTORY
public static final java.lang.String INIT_CONNECTION_FACTORY
- See Also:
- Constant Field Values
-
INIT_TOPIC_NAME
public static final java.lang.String INIT_TOPIC_NAME
- See Also:
- Constant Field Values
-
INIT_JNDI_CONTEXT
public static final java.lang.String INIT_JNDI_CONTEXT
- See Also:
- Constant Field Values
-
INIT_PROVIDER_URL
public static final java.lang.String INIT_PROVIDER_URL
- See Also:
- Constant Field Values
-
TIME_TO_LIVE
public static final java.lang.String TIME_TO_LIVE
- See Also:
- Constant Field Values
-
GROUP_NAME_PROPERTY
public static final java.lang.String GROUP_NAME_PROPERTY
- See Also:
- Constant Field Values
-
SRC_PROPERTY
public static final java.lang.String SRC_PROPERTY
- See Also:
- Constant Field Values
-
DEST_PROPERTY
public static final java.lang.String DEST_PROPERTY
- See Also:
- Constant Field Values
-
-
Method Detail
-
getName
public java.lang.String getName()
Get the name of the protocol.
-
toString
public java.lang.String toString()
Get the string representation of the protocol.- Overrides:
toStringin classjava.lang.Object- Returns:
- string representation of the protocol (not very useful though).
-
setProperties
public boolean setProperties(java.util.Properties props)
Set protocol properties. Properties are:topicName- (required), full JNDI name of the topic to be used for message publishing;cf- (optional), full JNDI name of the topic connection factory that will create topic connection, default value is"ConnectionFactory";jndiCtx- (optional), value of thejavax.naming.Context.INITIAL_CONTEXT_FACTORYproperty; you can specify it as the JVM system property-Djava.naming.factory.initial=factory.class.Name;providerURL- (optional), value of thejavax.naming.Context.PROVIDER_URLproperty; you can specify it as the JVM system property-Djava.naming.provider.url=some_url
- Overrides:
setPropertiesin classProtocol
-
onMessage
public void onMessage(javax.jms.Message jmsMessage)
Implementation of thejavax.jms.MessageListenerinterface. This method receives the JMS message, checks the destination group name. If the group name is the same as the group name of this channel, it checks the destination address. If destination address is either multicast or is the same as local address then message is unwrapped and passed up the protocol stack. Otherwise it is ignored.- Specified by:
onMessagein interfacejavax.jms.MessageListener- Parameters:
jmsMessage- instance ofjavax.jms.Message.
-
handleDownEvent
protected java.lang.Object handleDownEvent(Event evt)
Handle down event, if it is not a Event.MSG type.- Parameters:
evt- event to handle.
-
down
public java.lang.Object down(Event evt)
Called by the protocol above this. We check the event type, and if it is message, we publish it in the topic, otherwise we let thehandleDownEvent(Event)take care of it.
-
sendMessage
protected void sendMessage(Message msg)
Publish message in the JMS topic. We set the message source and destination addresses if they werenull.- Parameters:
msg- message to publish.
-
start
public void start() throws java.lang.ExceptionStart the JMS protocol. This method instantiates the JNDI initial context and looks up the topic connection factory and topic itself. If this step is successful, it creates a connection to JMS server, opens a session and obtains publisher and subscriber instances.- Overrides:
startin classProtocol- Throws:
javax.jms.JMSException- if something goes wrong with JMS.javax.naming.NamingException- if something goes wrong with JNDI.java.lang.IllegalArgumentException- if the connection factory or topic cannot be found under specified names.java.lang.Exception- Thrown if protocol cannot be started successfully. This will cause the ProtocolStack to fail, soChannel.connect(String)will throw an exception
-
stop
public void stop()
Stops the work of the JMS protocol. This method closes JMS session and connection and deregisters itself from the message notification.
-
generateLocalAddress
protected java.lang.String generateLocalAddress() throws java.net.UnknownHostExceptionGenerate random local address. This method takes host name and appends it with randomly generated integer.- Returns:
- randomly generated local address.
- Throws:
java.net.UnknownHostException
-
-