001: /*
002: * $Id: DefaultMuleContextFactory.java 11370 2008-03-15 03:06:08Z tcarlson $
003: * --------------------------------------------------------------------------------------
004: * Copyright (c) MuleSource, Inc. All rights reserved. http://www.mulesource.com
005: *
006: * The software in this package is published under the terms of the CPAL v1.0
007: * license, a copy of which has been included with this distribution in the
008: * LICENSE.txt file.
009: */
010:
011: package org.mule.context;
012:
013: import org.mule.MuleServer;
014: import org.mule.RegistryContext;
015: import org.mule.api.MuleContext;
016: import org.mule.api.config.ConfigurationBuilder;
017: import org.mule.api.config.ConfigurationException;
018: import org.mule.api.context.MuleContextBuilder;
019: import org.mule.api.context.MuleContextFactory;
020: import org.mule.api.lifecycle.InitialisationException;
021: import org.mule.config.builders.AutoConfigurationBuilder;
022: import org.mule.config.builders.DefaultsConfigurationBuilder;
023: import org.mule.config.builders.SimpleConfigurationBuilder;
024:
025: import java.util.List;
026: import java.util.Properties;
027:
028: import org.apache.commons.logging.Log;
029: import org.apache.commons.logging.LogFactory;
030:
031: /**
032: * Default implementation that stores MuleContext in {@link MuleServer} static and
033: * uses {@link DefaultMuleContextBuilder} to build new {@link MuleContext} instances.
034: */
035: public class DefaultMuleContextFactory implements MuleContextFactory {
036: protected static final Log logger = LogFactory
037: .getLog(DefaultMuleContextBuilder.class);
038:
039: /**
040: * Use default ConfigurationBuilder, default MuleContextBuilder
041: */
042: public MuleContext createMuleContext()
043: throws InitialisationException, ConfigurationException {
044: // Configure with defaults needed for a feasible/startable MuleContext
045: return createMuleContext(new DefaultsConfigurationBuilder(),
046: new DefaultMuleContextBuilder());
047: }
048:
049: /**
050: * Use default MuleContextBuilder
051: */
052: public MuleContext createMuleContext(
053: ConfigurationBuilder configurationBuilder)
054: throws InitialisationException, ConfigurationException {
055: // Create MuleContext using default MuleContextBuilder
056: return createMuleContext(configurationBuilder,
057: new DefaultMuleContextBuilder());
058: }
059:
060: /**
061: * Use default ConfigurationBuilder
062: */
063: public MuleContext createMuleContext(
064: MuleContextBuilder muleContextBuilder)
065: throws InitialisationException, ConfigurationException {
066: // Configure with defaults needed for a feasible/startable MuleContext
067: return createMuleContext(new DefaultsConfigurationBuilder(),
068: muleContextBuilder);
069: }
070:
071: /**
072: * {@inheritDoc
073: */
074: public MuleContext createMuleContext(List configurationBuilders,
075: MuleContextBuilder muleContextBuilder)
076: throws InitialisationException, ConfigurationException {
077: // Create MuleContext
078: MuleContext muleContext = doCreateMuleContext(muleContextBuilder);
079:
080: // Configure
081: for (int i = 0; i < configurationBuilders.size(); i++) {
082: ((ConfigurationBuilder) configurationBuilders.get(i))
083: .configure(muleContext);
084: }
085:
086: return muleContext;
087: }
088:
089: /**
090: * {@inheritDoc
091: */
092: public MuleContext createMuleContext(
093: ConfigurationBuilder configurationBuilder,
094: MuleContextBuilder muleContextBuilder)
095: throws InitialisationException, ConfigurationException {
096: // Create MuleContext
097: MuleContext muleContext = doCreateMuleContext(muleContextBuilder);
098:
099: // Configure
100: configurationBuilder.configure(muleContext);
101:
102: return muleContext;
103: }
104:
105: // Additional Factory methods provided by this implementation.
106:
107: /**
108: * Creates a new {@link MuleContext} instance from the resource provided.
109: * Implementations of {@link MuleContextFactory} can either use a default
110: * {@link ConfigurationBuilder} to implement this, or do some auto-detection to
111: * determine the {@link ConfigurationBuilder} that should be used.
112: *
113: * @param configResources comma seperated list of configuration resources.
114: * @return
115: * @throws InitialisationException
116: * @throws ConfigurationException
117: */
118: public MuleContext createMuleContext(String resource)
119: throws InitialisationException, ConfigurationException {
120: return createMuleContext(resource, null);
121: }
122:
123: /**
124: * Creates a new {@link MuleContext} instance from the resource provided.
125: * Implementations of {@link MuleContextFactory} can either use a default
126: * {@link ConfigurationBuilder} to implement this, or do some auto-detection to
127: * determine the {@link ConfigurationBuilder} that should be used. Properties if
128: * provided are used to replace "property placeholder" value in configuration
129: * files.
130: *
131: * @param resource
132: * @param properties
133: * @return
134: * @throws InitialisationException
135: * @throws ConfigurationException
136: */
137: public MuleContext createMuleContext(String configResources,
138: Properties properties) throws InitialisationException,
139: ConfigurationException {
140: // Create MuleContext
141: MuleContext muleContext = doCreateMuleContext(new DefaultMuleContextBuilder());
142:
143: // Configure with startup properties
144: if (properties != null && !properties.isEmpty()) {
145: new SimpleConfigurationBuilder(properties)
146: .configure(muleContext);
147: }
148:
149: // Automatically resolve Configuration to be used and delegate configuration
150: // to it.
151: new AutoConfigurationBuilder(configResources)
152: .configure(muleContext);
153:
154: return muleContext;
155: }
156:
157: /**
158: * Creates a new MuleContext using the given configurationBuilder. Properties if
159: * provided are used to replace "property placeholder" value in configuration
160: * files.
161: *
162: * @param configurationBuilder
163: * @param properties
164: * @return
165: * @throws InitialisationException
166: * @throws ConfigurationException
167: */
168: public MuleContext createMuleContext(
169: ConfigurationBuilder configurationBuilder,
170: Properties properties) throws InitialisationException,
171: ConfigurationException {
172: // Create MuleContext
173: MuleContext muleContext = doCreateMuleContext(new DefaultMuleContextBuilder());
174:
175: // Configure with startup properties
176: if (properties != null && !properties.isEmpty()) {
177: new SimpleConfigurationBuilder(properties)
178: .configure(muleContext);
179: }
180:
181: // Configure with cconfigurationBuilder
182: configurationBuilder.configure(muleContext);
183:
184: return muleContext;
185: }
186:
187: protected MuleContext doCreateMuleContext(
188: MuleContextBuilder muleContextBuilder)
189: throws InitialisationException {
190: // Create transent registry
191: RegistryContext.getOrCreateRegistry();
192:
193: // Create muleContext instance and set it in MuleServer
194: MuleContext muleContext = buildMuleContext(muleContextBuilder);
195: MuleServer.setMuleContext(muleContext);
196:
197: // Initialiase MuleContext
198: muleContext.initialise();
199:
200: return muleContext;
201: }
202:
203: protected MuleContext buildMuleContext(
204: MuleContextBuilder muleContextBuilder) {
205: return muleContextBuilder.buildMuleContext();
206: }
207:
208: }
|