1
2
3
4
5
6
7 package org.mule.transport.vm;
8
9 import org.mule.api.MuleEvent;
10 import org.mule.api.MuleMessage;
11 import org.mule.api.ThreadSafeAccess;
12 import org.mule.api.endpoint.InboundEndpoint;
13 import org.mule.transport.AbstractMessageRequester;
14 import org.mule.util.queue.Queue;
15 import org.mule.util.queue.QueueSession;
16
17
18
19
20
21 public class VMMessageRequester extends AbstractMessageRequester
22 {
23
24 private final VMConnector connector;
25
26 public VMMessageRequester(InboundEndpoint endpoint)
27 {
28 super(endpoint);
29 this.connector = (VMConnector) endpoint.getConnector();
30 }
31
32
33
34
35
36
37
38
39
40
41
42
43 protected MuleMessage doRequest(long timeout) throws Exception
44 {
45 try
46 {
47 QueueSession queueSession = connector.getQueueSession();
48 Queue queue = queueSession.getQueue(endpoint.getEndpointURI().getAddress());
49
50 if (queue == null)
51 {
52 if (logger.isDebugEnabled())
53 {
54 logger.debug("No queue with name " + endpoint.getEndpointURI().getAddress());
55 }
56 return null;
57 }
58 else
59 {
60 MuleEvent event = null;
61 if (logger.isDebugEnabled())
62 {
63 logger.debug("Waiting for a message on " + endpoint.getEndpointURI().getAddress());
64 }
65 try
66 {
67 event = (MuleEvent) queue.poll(timeout);
68 }
69 catch (InterruptedException e)
70 {
71 logger.error("Failed to receive message from queue: " + endpoint.getEndpointURI());
72 }
73 if (event != null)
74 {
75
76 if(event.getMessage() instanceof ThreadSafeAccess)
77 {
78 ((ThreadSafeAccess) event.getMessage()).resetAccessControl();
79 }
80 if (logger.isDebugEnabled())
81 {
82 logger.debug("Message received: " + event);
83 }
84 return event.getMessage();
85 }
86 else
87 {
88 if (logger.isDebugEnabled())
89 {
90 logger.debug("No event received after " + timeout + " ms");
91 }
92 return null;
93 }
94 }
95 }
96 catch (Exception e)
97 {
98 throw e;
99 }
100 }
101
102 protected void doDispose()
103 {
104
105 }
106
107 protected void doConnect() throws Exception
108 {
109
110 connector.getQueueProfile().configureQueue(endpoint.getEndpointURI().getAddress(),
111 connector.getQueueManager());
112 }
113
114 protected void doDisconnect() throws Exception
115 {
116
117 }
118
119 }