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