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 * @version $Revision$ 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 }