1
2
3
4
5
6
7
8
9
10
11 package org.mule.providers.vm;
12
13 import org.mule.MuleException;
14 import org.mule.config.i18n.CoreMessages;
15 import org.mule.impl.MuleMessage;
16 import org.mule.providers.TransactedPollingMessageReceiver;
17 import org.mule.umo.UMOComponent;
18 import org.mule.umo.UMOEvent;
19 import org.mule.umo.UMOException;
20 import org.mule.umo.UMOMessage;
21 import org.mule.umo.endpoint.UMOEndpoint;
22 import org.mule.umo.lifecycle.InitialisationException;
23 import org.mule.umo.provider.UMOConnector;
24 import org.mule.util.queue.Queue;
25 import org.mule.util.queue.QueueSession;
26
27 import java.util.List;
28
29 import edu.emory.mathcs.backport.java.util.concurrent.TimeUnit;
30
31
32
33
34
35 public class VMMessageReceiver extends TransactedPollingMessageReceiver
36 {
37 public static final long DEFAULT_VM_POLL_FREQUENCY = 10;
38 public static final TimeUnit DEFAULT_VM_POLL_TIMEUNIT = TimeUnit.MILLISECONDS;
39
40 private VMConnector connector;
41 private final Object lock = new Object();
42
43 public VMMessageReceiver(UMOConnector connector, UMOComponent component, UMOEndpoint endpoint)
44 throws InitialisationException
45 {
46 super(connector, component, endpoint);
47 this.setReceiveMessagesInTransaction(endpoint.getTransactionConfig().isTransacted());
48 this.setFrequency(DEFAULT_VM_POLL_FREQUENCY);
49 this.setTimeUnit(DEFAULT_VM_POLL_TIMEUNIT);
50 this.connector = (VMConnector) connector;
51 }
52
53 protected void doDispose()
54 {
55
56 }
57
58 protected void doConnect() throws Exception
59 {
60 if (connector.isQueueEvents())
61 {
62
63 QueueSession queueSession = connector.getQueueSession();
64 Queue q = queueSession.getQueue(endpoint.getEndpointURI().getAddress());
65 if (logger.isDebugEnabled())
66 {
67 logger.debug("Current queue depth for queue: " + endpoint.getEndpointURI().getAddress()
68 + " is: " + q.size());
69 }
70 }
71 }
72
73 protected void doDisconnect() throws Exception
74 {
75
76 }
77
78
79
80
81
82
83 public void onEvent(UMOEvent event) throws UMOException
84 {
85 if (connector.isQueueEvents())
86 {
87 QueueSession queueSession = connector.getQueueSession();
88 Queue queue = queueSession.getQueue(endpoint.getEndpointURI().getAddress());
89 try
90 {
91 queue.put(event);
92 }
93 catch (InterruptedException e)
94 {
95 throw new MuleException(CoreMessages.interruptedQueuingEventFor(this.endpoint
96 .getEndpointURI()), e);
97 }
98 }
99 else
100 {
101 UMOMessage msg = new MuleMessage(event.getTransformedMessage(), event.getMessage());
102 synchronized (lock)
103 {
104 routeMessage(msg);
105 }
106 }
107 }
108
109 public Object onCall(UMOEvent event) throws UMOException
110 {
111 return routeMessage(new MuleMessage(event.getTransformedMessage(), event.getMessage()), event
112 .isSynchronous());
113 }
114
115 protected List getMessages() throws Exception
116 {
117 QueueSession qs = connector.getQueueSession();
118 Queue queue = qs.getQueue(endpoint.getEndpointURI().getAddress());
119 UMOEvent event = (UMOEvent) queue.poll(connector.getQueueTimeout());
120 if (event != null)
121 {
122 routeMessage(new MuleMessage(event.getTransformedMessage(), event.getMessage()));
123 }
124 return null;
125 }
126
127
128
129
130
131
132 protected void processMessage(Object msg) throws Exception
133 {
134
135 }
136
137 }