1
2
3
4
5
6
7
8
9
10
11 package org.mule.impl.model.pipeline;
12
13 import org.mule.config.i18n.CoreMessages;
14 import org.mule.impl.MuleDescriptor;
15 import org.mule.impl.MuleMessage;
16 import org.mule.impl.RequestContext;
17 import org.mule.impl.model.direct.DirectComponent;
18 import org.mule.umo.UMOEvent;
19 import org.mule.umo.UMOException;
20 import org.mule.umo.UMOMessage;
21 import org.mule.umo.lifecycle.Callable;
22 import org.mule.umo.lifecycle.Disposable;
23 import org.mule.umo.lifecycle.Initialisable;
24 import org.mule.umo.lifecycle.InitialisationException;
25 import org.mule.umo.model.UMOModel;
26 import org.mule.umo.provider.DispatchException;
27
28 public class PipelineComponent extends DirectComponent
29 {
30
31
32
33 private static final long serialVersionUID = -2788210157354765190L;
34
35 private Callable callable;
36
37 public PipelineComponent(MuleDescriptor descriptor, UMOModel model)
38 {
39 super(descriptor, model);
40 }
41
42 protected void doInitialise() throws InitialisationException
43 {
44
45 super.doInitialise();
46 Object component = null;
47 try
48 {
49 component = lookupComponent();
50 }
51 catch (UMOException e)
52 {
53 throw new InitialisationException(e, this);
54 }
55 if (component instanceof Callable)
56 {
57 callable = (Callable) component;
58 }
59 else
60 {
61 throw new InitialisationException(
62 CoreMessages.objectNotOfCorrectType(component.getClass(), Callable.class), this);
63 }
64
65 if (component instanceof Initialisable)
66 {
67 ((Initialisable) component).initialise();
68 }
69
70 }
71
72 protected UMOMessage doSend(UMOEvent event) throws UMOException
73 {
74 try
75 {
76 Object result = callable.onCall(RequestContext.getEventContext());
77 UMOMessage returnMessage = null;
78 if (result instanceof UMOMessage)
79 {
80 returnMessage = (UMOMessage) result;
81 }
82 else
83 {
84 returnMessage = new MuleMessage(result, event.getMessage());
85 }
86 if (!event.isStopFurtherProcessing())
87 {
88
89
90
91
92
93 if (descriptor.getOutboundRouter().hasEndpoints())
94 {
95 UMOMessage outboundReturnMessage = descriptor.getOutboundRouter().route(returnMessage,
96 event.getSession(), event.isSynchronous());
97 if (outboundReturnMessage != null)
98 {
99 returnMessage = outboundReturnMessage;
100 }
101 }
102 else
103 {
104 logger.debug("Outbound router on component '" + descriptor.getName()
105 + "' doesn't have any endpoints configured.");
106 }
107 }
108
109 return returnMessage;
110 }
111 catch (Exception e)
112 {
113 throw new DispatchException(event.getMessage(), event.getEndpoint(), e);
114 }
115 }
116
117 protected void doDispatch(UMOEvent event) throws UMOException
118 {
119 sendEvent(event);
120 }
121
122 protected void doDispose()
123 {
124 if (callable instanceof Disposable)
125 {
126 ((Disposable) callable).dispose();
127 }
128 }
129 }