Nav
You are viewing an older version of this section. Click here to navigate to the latest version.

Sending and Receiving Mule Events in Spring

You can configure Spring beans to publish events to Mule and configure Spring event listeners to receive Mule events. This page describes how to set up the configuration.

Spring Events Overview

Spring provides a simple mechanism for sending and receiving events between beans. To receive an event, a bean implements ApplicationListener, which has a single method:

ApplicationListener.java

public void onApplicationEvent(E event);

To publish events to listeners, you call the Application Event Publisher interface’s publishEvent method on the ApplicationContext. This publishes the same event to every listener in the context. You can also plug in custom event handlers to the application context.

Mule Events in Spring

To start receiving Mule events, you create a bean based on MuleEventMulticaster in your Mule configuration file. This class is an Application Event Multicaster that enables Spring beans to send and receive Mule events. You also add one or more endpoints on which to receive events:


         
      
1
2
3
4
5
6
7
8
9
10
11
12
xmlns:spring="http://www.springframework.org/schema/beans"
...
<spring:beans>
  <spring:bean id="applicationEventMulticaster "class="org.mule.module.spring.events.MuleEventMulticaster">
    <spring:property name="subscriptions">
      <spring:list>
        <spring:value>jms://my.queue</value>
        <spring:value>pop3://ross:secret@mail.muleumo.org</value>
      </spring:list>
    </spring:property>
  </spring:bean>
</spring:beans>

With this configuration, any emails received for ross@muleumo.org or any JMS messages sent to my.queue are received by all Spring event listeners. Note that the MuleEventMulticaster does not interfere with normal Spring event behavior. If a non-Mule applicationEvent is sent via the ApplicationContext, all beans registered to receive events still get the event.

The inbound endpoints can be any valid Mule Endpoint, so you can receive JMS messages, SOAP requests, files, HTTP and servlet requests, TCP, multicast, and more.

Adding Bean Subscriptions

You can have beans subscribe only to relevant events. The MuleSubscriptionEventListener includes two methods for getting and setting an array of endpoints on which the bean receives events.

TestSubscriptionBean.java


          
       
1
2
3
4
5
6
7
8
9
10
11
12
13
package org.mule.module.spring.events;
public class TestSubscriptionEventBean extends TestMuleEventBean implements MuleSubscriptionEventListener
{
    private String[] subscriptions;
    public void setSubscriptions(String[] subscriptions)
    {
        this.subscriptions = subscriptions;
    }
    public String[] getSubscriptions()
    {
        return subscriptions;
    }
}

You configure this bean like any other bean:


          
       
1
2
3
4
5
6
7
8
9
10
11
xmlns:spring="http://www.springframework.org/schema/beans"
...
<spring:beans>
  <spring:bean id="subscriptionBean" class="org.mule.module.spring.events.TestSubscriptionEventBean">
    <spring:property name="subscriptions">
      <spring:list>
        <spring:value>vm://event.*</value>
      </spring:list>
    </spring:property>
  </spring:bean>
</spring:beans>

Publishing Events to Mule

Publishing events is just as easy as receiving them. You can use the standard method on the application context: ApplicationEventPublisher > publishEvent method.

Your bean can get a reference to the application context by implementing or by querying MuleApplicationEvent using ApplicationContextAware.


          
       
1
2
3
4
5
6
7
//Create a new MuleEvent.
Object message = new String("This is a test message");
MuleApplicationEvent muleEvent = new MuleApplicationEvent(
                     message, "jms://processed.queue");
 
//Call publishEvent on the application context, and Mule does the rest
applicationContext.publishEvent(muleEvent);