1
2
3
4
5
6
7
8
9
10
11 package org.mule.example.loanbroker.esb;
12
13 import org.mule.api.MuleContext;
14 import org.mule.api.config.ConfigurationBuilder;
15 import org.mule.api.endpoint.EndpointBuilder;
16 import org.mule.api.model.Model;
17 import org.mule.api.registry.Registry;
18 import org.mule.api.routing.InboundRouterCollection;
19 import org.mule.api.routing.OutboundRouterCollection;
20 import org.mule.api.routing.ResponseRouterCollection;
21 import org.mule.api.service.Service;
22 import org.mule.api.transformer.Transformer;
23 import org.mule.component.PooledJavaComponent;
24 import org.mule.component.builder.ReflectionMessageBuilder;
25 import org.mule.config.builders.AbstractConfigurationBuilder;
26 import org.mule.config.builders.DefaultsConfigurationBuilder;
27 import org.mule.endpoint.EndpointURIEndpointBuilder;
28 import org.mule.endpoint.URIBuilder;
29 import org.mule.example.loanbroker.AsynchronousLoanBroker;
30 import org.mule.example.loanbroker.bank.Bank;
31 import org.mule.example.loanbroker.lender.DefaultLender;
32 import org.mule.example.loanbroker.routers.BankQuotesResponseAggregator;
33 import org.mule.example.loanbroker.transformers.CreditProfileXmlToCreditProfile;
34 import org.mule.example.loanbroker.transformers.LoanQuoteRequestToCreditProfileArgs;
35 import org.mule.example.loanbroker.transformers.RestRequestToCustomerRequest;
36 import org.mule.example.loanbroker.transformers.SetLendersAsRecipients;
37 import org.mule.model.seda.SedaModel;
38 import org.mule.model.seda.SedaService;
39 import org.mule.object.PrototypeObjectFactory;
40 import org.mule.routing.filters.MessagePropertyFilter;
41 import org.mule.routing.inbound.DefaultInboundRouterCollection;
42 import org.mule.routing.outbound.DefaultOutboundRouterCollection;
43 import org.mule.routing.outbound.FilteringOutboundRouter;
44 import org.mule.routing.outbound.OutboundPassThroughRouter;
45 import org.mule.routing.outbound.StaticRecipientList;
46 import org.mule.routing.response.DefaultResponseRouterCollection;
47 import org.mule.transport.ejb.EjbConnector;
48 import org.mule.transport.jms.activemq.ActiveMQJmsConnector;
49 import org.mule.transport.jms.transformers.ObjectToJMSMessage;
50
51 import java.util.ArrayList;
52 import java.util.HashMap;
53 import java.util.List;
54 import java.util.Map;
55
56 public class LoanBrokerEsbConfigurationBuilder extends AbstractConfigurationBuilder implements ConfigurationBuilder
57 {
58
59 @Override
60 protected void doConfigure(MuleContext muleContext) throws Exception
61 {
62
63 new DefaultsConfigurationBuilder().configure(muleContext);
64
65 Registry registry = muleContext.getRegistry();
66
67
68 EjbConnector ejbConnector = new EjbConnector();
69 ejbConnector.setName("ejbConnector");
70 ejbConnector.setSecurityPolicy("security.policy");
71 ejbConnector.setJndiInitialFactory("org.openejb.client.LocalInitialContextFactory");
72 Map<String, String> jndiProviderProperties = new HashMap<String, String>();
73 jndiProviderProperties.put("openejb.base", "${openejb.base}");
74 jndiProviderProperties.put("openejb.configuration", "${openejb.configuration}");
75 jndiProviderProperties.put("logging.conf", "${logging.conf}");
76 jndiProviderProperties.put("openejb.nobanner", "${openejb.nobanner}");
77 ejbConnector.setJndiProviderProperties(jndiProviderProperties);
78
79 ActiveMQJmsConnector activeMQJmsConnector = new ActiveMQJmsConnector();
80 activeMQJmsConnector.setName("activeMQJmsConnector");
81 registry.registerConnector(activeMQJmsConnector);
82
83
84 Transformer RestRequestToCustomerRequest = new RestRequestToCustomerRequest();
85 RestRequestToCustomerRequest.setName("RestRequestToCustomerRequest");
86 registry.registerTransformer(RestRequestToCustomerRequest);
87 Transformer LoanQuoteRequestToCreditProfileArgs = new LoanQuoteRequestToCreditProfileArgs();
88 registry.registerTransformer(LoanQuoteRequestToCreditProfileArgs);
89 Transformer CreditProfileXmlToCreditProfile = new CreditProfileXmlToCreditProfile();
90 registry.registerTransformer(CreditProfileXmlToCreditProfile);
91 Transformer SetLendersAsRecipients = new SetLendersAsRecipients();
92 registry.registerTransformer(SetLendersAsRecipients);
93 Transformer ObjectToJMSMessage = new ObjectToJMSMessage();
94 registry.registerTransformer(ObjectToJMSMessage);
95
96
97 EndpointBuilder CustomerRequestsREST = new EndpointURIEndpointBuilder(new URIBuilder(
98 "jetty:rest://localhost:8888/loanbroker"), muleContext);
99 registry.registerEndpointBuilder("CustomerRequestsREST", CustomerRequestsREST);
100 EndpointBuilder CustomerRequests = new EndpointURIEndpointBuilder(new URIBuilder("vm://customer.requests"),
101 muleContext);
102 registry.registerEndpointBuilder("CustomerRequests", CustomerRequests);
103 EndpointBuilder LoanQuotes = new EndpointURIEndpointBuilder(new URIBuilder("axis:http://localhost:10080/mule"),
104 muleContext);
105 registry.registerEndpointBuilder("LoanQuotes", LoanQuotes);
106 EndpointBuilder CustomerResponses = LoanQuotes;
107 registry.registerEndpointBuilder("CustomerResponses", CustomerResponses);
108 EndpointBuilder CreditAgencyGateway = new EndpointURIEndpointBuilder(new URIBuilder("jms://esb.credit.agency"),
109 muleContext);
110 registry.registerEndpointBuilder("CreditAgencyGateway", CreditAgencyGateway);
111 EndpointBuilder CreditAgency = new EndpointURIEndpointBuilder(new URIBuilder(
112 "ejb://localhost:1099/local/CreditAgency?method=getCreditProfile"), muleContext);
113 registry.registerEndpointBuilder("CreditAgency", CreditAgency);
114 EndpointBuilder LenderGateway = new EndpointURIEndpointBuilder(new URIBuilder("jms://esb.lender.service"),
115 muleContext);
116 registry.registerEndpointBuilder("LenderGateway", LenderGateway);
117 EndpointBuilder LenderService = new EndpointURIEndpointBuilder(new URIBuilder("vm://lender.service"),
118 muleContext);
119 registry.registerEndpointBuilder("LenderService", LenderService);
120 EndpointBuilder BankingGateway = new EndpointURIEndpointBuilder(new URIBuilder("jms://esb.banks"), muleContext);
121
122 EndpointBuilder bank1 = new EndpointURIEndpointBuilder(new URIBuilder(
123 "axis:http://localhost:10080/mule/TheBank1?method=getLoanQuote"), muleContext);
124 registry.registerEndpointBuilder("bank1", bank1);
125 EndpointBuilder bank2 = new EndpointURIEndpointBuilder(new URIBuilder(
126 "axis:http://localhost:20080/mule/TheBank2?method=getLoanQuote"), muleContext);
127 registry.registerEndpointBuilder("bank2", bank2);
128 EndpointBuilder bank3 = new EndpointURIEndpointBuilder(new URIBuilder(
129 "axis:http://localhost:30080/mule/TheBank3?method=getLoanQuote"), muleContext);
130 registry.registerEndpointBuilder("bank3", bank3);
131 EndpointBuilder bank4 = new EndpointURIEndpointBuilder(new URIBuilder(
132 "axis:http://localhost:40080/mule/TheBank4?method=getLoanQuote"), muleContext);
133 registry.registerEndpointBuilder("bank4", bank4);
134
135 EndpointBuilder bank1In = new EndpointURIEndpointBuilder(new URIBuilder("axis:http://localhost:10080/mule"),
136 muleContext);
137 registry.registerEndpointBuilder("bank1In", bank1In);
138 EndpointBuilder bank2In = new EndpointURIEndpointBuilder(new URIBuilder("axis:http://localhost:20080/mule"),
139 muleContext);
140 registry.registerEndpointBuilder("bank2In", bank2In);
141 EndpointBuilder bank3In = new EndpointURIEndpointBuilder(new URIBuilder("axis:http://localhost:30080/mule"),
142 muleContext);
143 registry.registerEndpointBuilder("bank3In", bank3In);
144 EndpointBuilder bank4In = new EndpointURIEndpointBuilder(new URIBuilder("axis:http://localhost:40080/mule"),
145 muleContext);
146 registry.registerEndpointBuilder("bank4In", bank4In);
147
148
149 Model model = new SedaModel();
150 model.setName("model");
151 registry.registerModel(model);
152
153
154 Service loanBrokerService = new SedaService();
155 loanBrokerService.setName("LoanBroker");
156 loanBrokerService.setModel(model);
157 loanBrokerService.setComponent(new PooledJavaComponent(new PrototypeObjectFactory(AsynchronousLoanBroker.class)));
158
159 InboundRouterCollection loanBrokerServiceInbound = new DefaultInboundRouterCollection();
160 loanBrokerServiceInbound.addEndpoint(CustomerRequestsREST.buildInboundEndpoint());
161 EndpointBuilder eb = (EndpointBuilder) CustomerRequests.clone();
162 eb.addTransformer(RestRequestToCustomerRequest);
163 loanBrokerServiceInbound.addEndpoint(eb.buildInboundEndpoint());
164 loanBrokerService.setInboundRouter(loanBrokerServiceInbound);
165
166 OutboundRouterCollection loanBrokerServiceOutbound = new DefaultOutboundRouterCollection();
167 OutboundPassThroughRouter outboundPassThroughRouter = new OutboundPassThroughRouter();
168 outboundPassThroughRouter.addEndpoint(CreditAgency.buildOutboundEndpoint());
169 loanBrokerServiceOutbound.addRouter(outboundPassThroughRouter);
170 loanBrokerService.setOutboundRouter(loanBrokerServiceOutbound);
171
172 ResponseRouterCollection responseRouterCollection = new DefaultResponseRouterCollection();
173 responseRouterCollection.addEndpoint(LoanQuotes.buildInboundEndpoint());
174 responseRouterCollection.addRouter(new BankQuotesResponseAggregator());
175 loanBrokerService.setResponseRouter(responseRouterCollection);
176
177 registry.registerService(loanBrokerService);
178
179
180 Service creditAgencyGatewayService = new SedaService();
181 creditAgencyGatewayService.setName("CreditAgencyGatewayService");
182 creditAgencyGatewayService.setModel(model);
183 creditAgencyGatewayService.setComponent(new PooledJavaComponent(new PrototypeObjectFactory(ReflectionMessageBuilder.class)));
184
185 InboundRouterCollection creditAgencyGatewayServiceInbound = new DefaultInboundRouterCollection();
186 creditAgencyGatewayServiceInbound.addEndpoint(CreditAgencyGateway.buildInboundEndpoint());
187 creditAgencyGatewayService.setInboundRouter(creditAgencyGatewayServiceInbound);
188
189 OutboundRouterCollection creditAgencyGatewayServiceOutbound = new DefaultOutboundRouterCollection();
190 FilteringOutboundRouter creditAgencyGatewayServiceOutboundRouter = new FilteringOutboundRouter();
191 EndpointBuilder eb2 = (EndpointBuilder) CreditAgency.clone();
192 eb2.addTransformer(LoanQuoteRequestToCreditProfileArgs);
193 eb2.setRemoteSync(true);
194 List<Transformer> responseTransformers = new ArrayList<Transformer>();
195 responseTransformers.add(CreditProfileXmlToCreditProfile);
196 eb2.setResponseTransformers(responseTransformers);
197 creditAgencyGatewayServiceOutboundRouter.addEndpoint(eb2.buildOutboundEndpoint());
198 creditAgencyGatewayServiceOutboundRouter.addEndpoint(LenderGateway.buildOutboundEndpoint());
199 creditAgencyGatewayServiceOutbound.addRouter(creditAgencyGatewayServiceOutboundRouter);
200 creditAgencyGatewayService.setOutboundRouter(creditAgencyGatewayServiceOutbound);
201
202 registry.registerService(creditAgencyGatewayService);
203
204
205 Service lenderGatewayService = new SedaService();
206 lenderGatewayService.setName("CreditAgencyGatewayService");
207 lenderGatewayService.setModel(model);
208
209 InboundRouterCollection lenderGatewayServiceInbound = new DefaultInboundRouterCollection();
210 lenderGatewayServiceInbound.addEndpoint(LenderGateway.buildInboundEndpoint());
211 lenderGatewayService.setInboundRouter(lenderGatewayServiceInbound);
212
213 OutboundRouterCollection lenderGatewayServiceInboundOutbound = new DefaultOutboundRouterCollection();
214 FilteringOutboundRouter lenderGatewayServiceInboundOutboundRouter = new FilteringOutboundRouter();
215 EndpointBuilder eb3 = (EndpointBuilder) LenderService.clone();
216 eb3.setRemoteSync(true);
217 lenderGatewayServiceInboundOutboundRouter.addEndpoint(eb3.buildOutboundEndpoint());
218 EndpointBuilder eb4 = (EndpointBuilder) BankingGateway.clone();
219 eb4.addTransformer(SetLendersAsRecipients);
220 eb4.addTransformer(ObjectToJMSMessage);
221 lenderGatewayServiceInboundOutboundRouter.addEndpoint(eb4.buildOutboundEndpoint());
222 lenderGatewayServiceInboundOutbound.addRouter(lenderGatewayServiceInboundOutboundRouter);
223 lenderGatewayService.setOutboundRouter(lenderGatewayServiceInboundOutbound);
224
225 registry.registerService(lenderGatewayService);
226
227
228 Service lenderServiceService = new SedaService();
229 lenderServiceService.setName("LenderServiceService");
230 lenderServiceService.setModel(model);
231 lenderGatewayService.setComponent(new PooledJavaComponent(new PrototypeObjectFactory(DefaultLender.class)));
232
233 InboundRouterCollection lenderServiceServiceInbound = new DefaultInboundRouterCollection();
234 lenderServiceServiceInbound.addEndpoint(LenderService.buildInboundEndpoint());
235 lenderServiceService.setInboundRouter(lenderServiceServiceInbound);
236
237 registry.registerService(lenderGatewayService);
238
239
240 Service bankingGatewayService = new SedaService();
241 bankingGatewayService.setName("BankingGatewayService");
242 bankingGatewayService.setModel(model);
243
244 InboundRouterCollection bankingGatewayServiceInbound = new DefaultInboundRouterCollection();
245 bankingGatewayServiceInbound.addEndpoint(BankingGateway.buildInboundEndpoint());
246 bankingGatewayService.setInboundRouter(bankingGatewayServiceInbound);
247
248 OutboundRouterCollection bankingGatewayServiceOutbound = new DefaultOutboundRouterCollection();
249 StaticRecipientList staticRecipientList = new StaticRecipientList();
250 staticRecipientList.setReplyTo("LoanQuotes");
251 staticRecipientList.setFilter(new MessagePropertyFilter("recipients!=null"));
252
253 registry.registerService(lenderGatewayService);
254
255
256 Service bank1Service = new SedaService();
257 bank1Service.setName("TheBank1");
258 bank1Service.setModel(model);
259 bank1Service.setComponent(new PooledJavaComponent(new PrototypeObjectFactory(Bank.class)));
260 InboundRouterCollection bank1ServiceInbound = new DefaultInboundRouterCollection();
261 bank1ServiceInbound.addEndpoint(bank1In.buildInboundEndpoint());
262 bank1Service.setInboundRouter(bank1ServiceInbound);
263 registry.registerService(bank1Service);
264
265
266 Service bank2Service = new SedaService();
267 bank2Service.setName("TheBank2");
268 bank2Service.setModel(model);
269 bank2Service.setComponent(new PooledJavaComponent(new PrototypeObjectFactory(Bank.class)));
270 InboundRouterCollection bank2ServiceInbound = new DefaultInboundRouterCollection();
271 bank2ServiceInbound.addEndpoint(bank2In.buildInboundEndpoint());
272 bank2Service.setInboundRouter(bank2ServiceInbound);
273 registry.registerService(bank2Service);
274
275
276 Service bank3Service = new SedaService();
277 bank3Service.setName("TheBank3");
278 bank3Service.setModel(model);
279 bank3Service.setComponent(new PooledJavaComponent(new PrototypeObjectFactory(Bank.class)));
280 InboundRouterCollection bank3ServiceInbound = new DefaultInboundRouterCollection();
281 bank3ServiceInbound.addEndpoint(bank3In.buildInboundEndpoint());
282 bank3Service.setInboundRouter(bank3ServiceInbound);
283 registry.registerService(bank3Service);
284
285
286 Service bank4Service = new SedaService();
287 bank4Service.setName("TheBank4");
288 bank4Service.setModel(model);
289 bank4Service.setComponent(new PooledJavaComponent(new PrototypeObjectFactory(Bank.class)));
290 InboundRouterCollection bank4ServiceInbound = new DefaultInboundRouterCollection();
291 bank4ServiceInbound.addEndpoint(bank4In.buildInboundEndpoint());
292 bank4Service.setInboundRouter(bank4ServiceInbound);
293 registry.registerService(bank4Service);
294
295 }
296 }