Info
The Sakai MessageService integrates JMS with Sakai and exposes the JMS API as a service. ActiveMQ is used as the JMS implementation.
News
- 2008-02-13 : Switch to full spring configuration.
- org.sakaiproject.messageservice.JmsConnectionFactory accessible via Spring declaration.
- Retained org.sakaiproject.messageservice.api.MessageService for direct JMS implementation.
- Changed ActiveMQ to version 5.1 to fix 'hanging' broker and client during shutdown problem.
- 2008-02-04 : Applied some Bugfixes to the messageservice based cluster service. This should be ready for initial testing now
- 2008-01-29 : Extended MessageService API to allow to create a connection with username and password
- 2008-01-26 :
- Extended MessageService API by adding "public Connection getConnection()"
- Created MessageService sakai_2-4-x branch, which uses ActiveMQ v4.1.1
- 2008-01-23 :
- Finished first round of converting Sakai Cluster Service to use the Message Service. Performed initial testing in a two node setup.
- Requested Sakai Foundation JIRA Branch for Sakai Cluster Service using Message Service: http://bugs.sakaiproject.org/jira/browse/SAK-12797
Source Code
Documentation JMS v1.1
- Make sure that you look at the v1.1 and NOT v1.0.2 of the JMS API
Usage
The MessageService API is very simple and exposes the following methods:
/* * Creates a JMS connection with the default user identity. The connection is * created in stopped mode. No messages will be delivered until the * Connection.start method is explicitly called. * * @return a newly created JMS connection. May return null * */ public Connection createConnection(); /* * Creates a JMS connection with the specified user identity. The connection is * created in stopped mode. No messages will be delivered until the * Connection.start method is explicitly called. * * @parameter userName - the caller's user name * @parameter password - the caller's password * * @return a newly created JMS connection. May return null */ public Connection createConnection(String userName, String password); /* * Gets the JMS Connection with the specified user identity, configured in components.xml * The connection is returned in start mode. * * @return the initially created JMS Connection object. May return null * */ public Connection getConnection(); }
MessageService (JMS) Best Practices
- JMS Connection Object
- Usually there is no need to create more than one JMS Connection object, and the ActiveMQ documentation and AQM Forum posts recommend to create/use only one connection object per server. Thus, in Sakai, we should use only one connection by calling getConnection(). In rare cases, it's justified to create a second connection.
- JMS Session
- I asked about JMS session usage in the ActiveMQ forum, and here is the thread:
Configuring
- Sakai Properties
Property
Default Value
Comments
jms.useJMX
false
If you have tomcat configured to allow JMX access, I would recommend to enable this setting as it greatly helps during the development process
jms.brokerURL
tcp://localhost:61616
-
jms.brokerDataPath
sakai-home location
This is either in "tomcat/sakai" or the location defined by JAVA_OPTS "-Dsakai.home=/path/to/sakai-home/"
- On each application node, you need to enable the following ports and protocols in your host based firewall
- TCP port 61616
- UDP port 6155
- e.g. Linux iptables
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp -s 192.168.1.0/24 --dport 61616 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp -s 192.168.1.0/24 --dport 6155 -j ACCEPT
Building The MessageService sakai_2-4-x Branch (Maven 1)
- svn co https://source.sakaiproject.org/contrib/messageservice/branches/sakai_2-4-x messageservice-2-4-x
- cd messageservice-sakai_2-4-x
- maven sakai