001 /**
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements. See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License. You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017 package org.apache.activemq.broker;
018
019 import java.io.IOException;
020 import java.net.URI;
021
022 import org.apache.activemq.util.FactoryFinder;
023 import org.apache.activemq.util.IOExceptionSupport;
024
025 /**
026 * A helper class to create a fully configured broker service using a URI. The
027 * list of currently supported URI syntaxes is described <a
028 * href="http://activemq.apache.org/how-do-i-embed-a-broker-inside-a-connection.html">here</a>
029 *
030 *
031 */
032 public final class BrokerFactory {
033
034 private static final FactoryFinder BROKER_FACTORY_HANDLER_FINDER = new FactoryFinder("META-INF/services/org/apache/activemq/broker/");
035
036 private BrokerFactory() {
037 }
038
039 public static BrokerFactoryHandler createBrokerFactoryHandler(String type) throws IOException {
040 try {
041 return (BrokerFactoryHandler)BROKER_FACTORY_HANDLER_FINDER.newInstance(type);
042 } catch (Throwable e) {
043 throw IOExceptionSupport.create("Could not load " + type + " factory:" + e, e);
044 }
045 }
046
047 /**
048 * Creates a broker from a URI configuration
049 *
050 * @param brokerURI the URI scheme to configure the broker
051 * @throws Exception
052 */
053 public static BrokerService createBroker(URI brokerURI) throws Exception {
054 return createBroker(brokerURI, false);
055 }
056
057 /**
058 * Creates a broker from a URI configuration
059 *
060 * @param brokerURI the URI scheme to configure the broker
061 * @param startBroker whether or not the broker should have its
062 * {@link BrokerService#start()} method called after
063 * construction
064 * @throws Exception
065 */
066 public static BrokerService createBroker(URI brokerURI, boolean startBroker) throws Exception {
067 if (brokerURI.getScheme() == null) {
068 throw new IllegalArgumentException("Invalid broker URI, no scheme specified: " + brokerURI);
069 }
070 BrokerFactoryHandler handler = createBrokerFactoryHandler(brokerURI.getScheme());
071 BrokerService broker = handler.createBroker(brokerURI);
072 if (startBroker) {
073 broker.start();
074 }
075 return broker;
076 }
077
078 /**
079 * Creates a broker from a URI configuration
080 *
081 * @param brokerURI the URI scheme to configure the broker
082 * @throws Exception
083 */
084 public static BrokerService createBroker(String brokerURI) throws Exception {
085 return createBroker(new URI(brokerURI));
086 }
087
088 /**
089 * Creates a broker from a URI configuration
090 *
091 * @param brokerURI the URI scheme to configure the broker
092 * @param startBroker whether or not the broker should have its
093 * {@link BrokerService#start()} method called after
094 * construction
095 * @throws Exception
096 */
097 public static BrokerService createBroker(String brokerURI, boolean startBroker) throws Exception {
098 return createBroker(new URI(brokerURI), startBroker);
099 }
100
101 }