1
2
3
4
5
6
7 package org.mule.module.jca;
8
9 import org.mule.DefaultMuleEvent;
10 import org.mule.DefaultMuleMessage;
11 import org.mule.MessageExchangePattern;
12 import org.mule.api.MuleContext;
13 import org.mule.api.MuleEvent;
14 import org.mule.api.MuleException;
15 import org.mule.api.MuleMessage;
16 import org.mule.api.MuleSession;
17 import org.mule.api.config.MuleProperties;
18 import org.mule.api.endpoint.EndpointBuilder;
19 import org.mule.api.endpoint.InboundEndpoint;
20 import org.mule.api.endpoint.OutboundEndpoint;
21 import org.mule.api.transport.DispatchException;
22 import org.mule.api.transport.ReceiveException;
23 import org.mule.module.client.i18n.ClientMessages;
24 import org.mule.module.jca.i18n.JcaMessages;
25 import org.mule.security.MuleCredentials;
26 import org.mule.session.DefaultMuleSession;
27 import org.mule.transport.AbstractConnector;
28
29 import java.util.Map;
30
31 import javax.resource.ResourceException;
32
33
34
35
36 public class DefaultMuleConnection implements MuleConnection
37 {
38 private final MuleCredentials credentials;
39 private final MuleContext muleContext;
40 private MuleManagedConnection managedConnection;
41
42 public DefaultMuleConnection(MuleManagedConnection managedConnection,
43 MuleContext muleContext,
44 MuleCredentials credentials)
45 {
46 this.muleContext = muleContext;
47 this.credentials = credentials;
48 this.managedConnection = managedConnection;
49 }
50
51
52
53
54
55
56
57
58
59
60
61
62
63 public void dispatch(String url, Object payload, Map messageProperties) throws MuleException
64 {
65 MuleMessage message = new DefaultMuleMessage(payload, messageProperties, muleContext);
66 OutboundEndpoint endpoint = muleContext.getEndpointFactory().getOutboundEndpoint(url);
67 MuleEvent event = getEvent(message,endpoint);
68 try
69 {
70 endpoint.process(event);
71 }
72 catch (MuleException e)
73 {
74 throw e;
75 }
76 catch (Exception e)
77 {
78 throw new DispatchException(ClientMessages.failedToDispatchClientEvent(), event,
79 endpoint, e);
80 }
81 }
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96 public MuleMessage send(String url, Object payload, Map messageProperties) throws MuleException
97 {
98 MuleMessage message = new DefaultMuleMessage(payload, messageProperties, muleContext);
99 OutboundEndpoint endpoint = getOutboundEndpoint(url, MessageExchangePattern.REQUEST_RESPONSE);
100 MuleEvent event = getEvent(message, endpoint);
101
102 try
103 {
104 MuleEvent resultEvent = endpoint.process(event);
105 if (resultEvent != null)
106 {
107 return resultEvent.getMessage();
108 }
109 else
110 {
111 return null;
112 }
113 }
114 catch (MuleException e)
115 {
116 throw e;
117 }
118 catch (Exception e)
119 {
120 throw new DispatchException(ClientMessages.failedToDispatchClientEvent(), event,
121 endpoint, e);
122 }
123 }
124
125
126
127
128
129
130
131
132
133
134
135
136 public MuleMessage request(String url, long timeout) throws MuleException
137 {
138 InboundEndpoint endpoint = muleContext.getEndpointFactory().getInboundEndpoint(url);
139
140 try
141 {
142 return endpoint.request(timeout);
143 }
144 catch (Exception e)
145 {
146 throw new ReceiveException(endpoint, timeout, e);
147 }
148 }
149
150 protected OutboundEndpoint getOutboundEndpoint(String uri, MessageExchangePattern exchangePattern)
151 throws MuleException
152 {
153 EndpointBuilder endpointBuilder = muleContext.getEndpointFactory().getEndpointBuilder(uri);
154 endpointBuilder.setExchangePattern(exchangePattern);
155 return muleContext.getEndpointFactory().getOutboundEndpoint(endpointBuilder);
156 }
157
158
159
160
161 protected MuleEvent getEvent(MuleMessage message, OutboundEndpoint endpoint)
162 throws MuleException
163 {
164 MuleSession session = new DefaultMuleSession(message, ((AbstractConnector)endpoint.getConnector()).getSessionHandler(), muleContext);
165
166 if (credentials != null)
167 {
168 message.setOutboundProperty(MuleProperties.MULE_USER_PROPERTY, "Plain " + credentials.getToken());
169 }
170
171 return new DefaultMuleEvent(message, endpoint, session);
172 }
173
174
175
176
177
178
179
180
181 public MuleManagedConnection getManagedConnection()
182 {
183 return managedConnection;
184 }
185
186
187
188
189 public void close() throws ResourceException
190 {
191 if (managedConnection == null)
192 {
193 return;
194 }
195 managedConnection.removeConnection(this);
196
197
198 managedConnection.fireCloseEvent(this);
199 managedConnection = null;
200 }
201
202
203
204
205
206
207
208 public void associateConnection(MuleManagedConnection newMc) throws ResourceException
209 {
210 checkIfValid();
211
212 managedConnection.removeConnection(this);
213
214 newMc.addConnection(this);
215 managedConnection = newMc;
216 }
217
218
219
220
221
222
223
224 void checkIfValid() throws ResourceException
225 {
226 if (managedConnection == null)
227 {
228 throw new ResourceException(
229 JcaMessages.objectMarkedInvalid("muleManagedConnection").toString());
230 }
231 }
232
233
234
235
236
237
238 void invalidate()
239 {
240 managedConnection = null;
241 }
242 }