1
2
3
4
5
6
7
8
9
10
11 package org.mule.context;
12
13 import org.mule.DefaultMuleContext;
14 import org.mule.api.MuleContext;
15 import org.mule.api.MuleRuntimeException;
16 import org.mule.api.config.MuleConfiguration;
17 import org.mule.api.config.ThreadingProfile;
18 import org.mule.api.context.MuleContextBuilder;
19 import org.mule.api.context.WorkManager;
20 import org.mule.api.context.notification.ConnectionNotificationListener;
21 import org.mule.api.context.notification.CustomNotificationListener;
22 import org.mule.api.context.notification.ExceptionNotificationListener;
23 import org.mule.api.context.notification.ManagementNotificationListener;
24 import org.mule.api.context.notification.ModelNotificationListener;
25 import org.mule.api.context.notification.MuleContextNotificationListener;
26 import org.mule.api.context.notification.RegistryNotificationListener;
27 import org.mule.api.context.notification.RoutingNotificationListener;
28 import org.mule.api.context.notification.SecurityNotificationListener;
29 import org.mule.api.context.notification.ServiceNotificationListener;
30 import org.mule.api.context.notification.TransactionNotificationListener;
31 import org.mule.api.lifecycle.LifecycleManager;
32 import org.mule.config.DefaultMuleConfiguration;
33 import org.mule.config.i18n.Message;
34 import org.mule.config.i18n.MessageFactory;
35 import org.mule.context.notification.ConnectionNotification;
36 import org.mule.context.notification.CustomNotification;
37 import org.mule.context.notification.ExceptionNotification;
38 import org.mule.context.notification.ManagementNotification;
39 import org.mule.context.notification.ModelNotification;
40 import org.mule.context.notification.MuleContextNotification;
41 import org.mule.context.notification.RegistryNotification;
42 import org.mule.context.notification.RoutingNotification;
43 import org.mule.context.notification.SecurityNotification;
44 import org.mule.context.notification.ServerNotificationManager;
45 import org.mule.context.notification.ServiceNotification;
46 import org.mule.context.notification.TransactionNotification;
47 import org.mule.lifecycle.MuleContextLifecycleManager;
48 import org.mule.util.ClassUtils;
49 import org.mule.util.SplashScreen;
50 import org.mule.work.DefaultWorkListener;
51 import org.mule.work.MuleWorkManager;
52
53 import javax.resource.spi.work.WorkListener;
54
55 import org.apache.commons.logging.Log;
56 import org.apache.commons.logging.LogFactory;
57
58
59
60
61
62
63
64 public class DefaultMuleContextBuilder implements MuleContextBuilder
65 {
66 protected static final Log logger = LogFactory.getLog(DefaultMuleContextBuilder.class);
67
68 protected MuleConfiguration config;
69
70 protected MuleContextLifecycleManager lifecycleManager;
71
72 protected WorkManager workManager;
73
74 protected WorkListener workListener;
75
76 protected ServerNotificationManager notificationManager;
77
78 protected SplashScreen startupScreen;
79
80 protected SplashScreen shutdownScreen;
81
82
83
84
85 public MuleContext buildMuleContext()
86 {
87 logger.debug("Building new DefaultMuleContext instance with MuleContextBuilder: " + this);
88 MuleContextLifecycleManager manager = getLifecycleManager();
89 DefaultMuleContext muleContext = new DefaultMuleContext(getMuleConfiguration(),
90 getWorkManager(),
91 getWorkListener(),
92 manager,
93 getNotificationManager());
94 manager.setMuleContext(muleContext);
95 muleContext.setExecutionClassLoader(Thread.currentThread().getContextClassLoader());
96 return muleContext;
97 }
98
99 public void setMuleConfiguration(MuleConfiguration config)
100 {
101 this.config = config;
102 }
103
104 public void setWorkManager(WorkManager workManager)
105 {
106 this.workManager = workManager;
107 }
108
109 public void setWorkListener(WorkListener workListener)
110 {
111 this.workListener = workListener;
112 }
113
114 public void setNotificationManager(ServerNotificationManager notificationManager)
115 {
116 this.notificationManager = notificationManager;
117 }
118
119 protected MuleConfiguration getMuleConfiguration()
120 {
121 if (config != null)
122 {
123 return config;
124 }
125 else
126 {
127 return createMuleConfiguration();
128 }
129 }
130
131 protected MuleContextLifecycleManager getLifecycleManager()
132 {
133 if (lifecycleManager != null)
134 {
135 return lifecycleManager;
136 }
137 else
138 {
139 return createLifecycleManager();
140 }
141 }
142
143 public void setLifecycleManager(LifecycleManager manager)
144 {
145 if (!(manager instanceof MuleContextLifecycleManager))
146 {
147 Message msg = MessageFactory.createStaticMessage(
148 "lifecycle manager for MuleContext must be a MuleContextLifecycleManager");
149 throw new MuleRuntimeException(msg);
150 }
151
152 lifecycleManager = (MuleContextLifecycleManager) manager;
153 }
154
155 protected WorkManager getWorkManager()
156 {
157 if (workManager != null)
158 {
159 return workManager;
160 }
161 else
162 {
163 return createWorkManager();
164 }
165 }
166
167 protected WorkListener getWorkListener()
168 {
169 if (workListener != null)
170 {
171 return workListener;
172 }
173 else
174 {
175 return createWorkListener();
176 }
177 }
178
179 protected ServerNotificationManager getNotificationManager()
180 {
181 if (notificationManager != null)
182 {
183 return notificationManager;
184 }
185 else
186 {
187 return createNotificationManager();
188 }
189 }
190
191 public SplashScreen getStartupScreen()
192 {
193 return startupScreen;
194 }
195
196 public void setStartupScreen(SplashScreen startupScreen)
197 {
198 this.startupScreen = startupScreen;
199 }
200
201 public SplashScreen getShutdownScreen()
202 {
203 return shutdownScreen;
204 }
205
206 public void setShutdownScreen(SplashScreen shutdownScreen)
207 {
208 this.shutdownScreen = shutdownScreen;
209 }
210
211 protected DefaultMuleConfiguration createMuleConfiguration()
212 {
213 return new DefaultMuleConfiguration();
214 }
215
216 protected MuleContextLifecycleManager createLifecycleManager()
217 {
218 return new MuleContextLifecycleManager();
219 }
220
221 protected MuleWorkManager createWorkManager()
222 {
223 final MuleConfiguration config = getMuleConfiguration();
224
225 final String threadPrefix = config.isContainerMode()
226 ? String.format("[%s].Mule", config.getId())
227 : "MuleServer";
228 return new MuleWorkManager(ThreadingProfile.DEFAULT_THREADING_PROFILE, threadPrefix, config.getShutdownTimeout());
229 }
230
231 protected DefaultWorkListener createWorkListener()
232 {
233 return new DefaultWorkListener();
234 }
235
236 protected ServerNotificationManager createNotificationManager()
237 {
238 ServerNotificationManager manager = new ServerNotificationManager();
239 manager.addInterfaceToType(MuleContextNotificationListener.class,
240 MuleContextNotification.class);
241 manager.addInterfaceToType(ModelNotificationListener.class, ModelNotification.class);
242 manager.addInterfaceToType(RoutingNotificationListener.class, RoutingNotification.class);
243 manager.addInterfaceToType(ServiceNotificationListener.class,
244 ServiceNotification.class);
245 manager.addInterfaceToType(SecurityNotificationListener.class,
246 SecurityNotification.class);
247 manager.addInterfaceToType(ManagementNotificationListener.class,
248 ManagementNotification.class);
249 manager.addInterfaceToType(CustomNotificationListener.class, CustomNotification.class);
250 manager.addInterfaceToType(ConnectionNotificationListener.class,
251 ConnectionNotification.class);
252 manager.addInterfaceToType(RegistryNotificationListener.class,
253 RegistryNotification.class);
254 manager.addInterfaceToType(ExceptionNotificationListener.class,
255 ExceptionNotification.class);
256 manager.addInterfaceToType(TransactionNotificationListener.class,
257 TransactionNotification.class);
258 return manager;
259 }
260
261 @Override
262 public String toString()
263 {
264 return ClassUtils.getClassName(getClass()) +
265 "{muleConfiguration=" + config +
266 ", lifecycleManager=" + lifecycleManager +
267 ", workManager=" + workManager +
268 ", workListener=" + workListener +
269 ", notificationManager=" + notificationManager + "}";
270 }
271 }