You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by js...@apache.org on 2007/03/15 12:39:05 UTC
svn commit: r518590 - in /activemq/trunk/activemq-core/src:
main/java/org/apache/activemq/broker/
main/java/org/apache/activemq/transport/peer/
main/java/org/apache/activemq/transport/vm/
main/java/org/apache/activemq/xbean/ main/resources/META-INF/ser...
Author: jstrachan
Date: Thu Mar 15 04:39:04 2007
New Revision: 518590
URL: http://svn.apache.org/viewvc?view=rev&rev=518590
Log:
added support for using a properties file to configure the broker to avoid the dependency on Spring and xbean; for AMQ-1206
Added:
activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/BrokerFactoryHandler.java (with props)
activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/PropertiesBrokerFactory.java (with props)
activemq/trunk/activemq-core/src/main/resources/META-INF/services/org/apache/activemq/broker/properties
activemq/trunk/activemq-core/src/test/java/org/apache/activemq/config/BrokerPropertiesTest.java (with props)
activemq/trunk/activemq-core/src/test/resources/org/apache/activemq/config/broker.properties (with props)
Modified:
activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/BrokerFactory.java
activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/BrokerService.java
activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/DefaultBrokerFactory.java
activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/peer/PeerTransportFactory.java
activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/vm/VMTransportFactory.java
activemq/trunk/activemq-core/src/main/java/org/apache/activemq/xbean/XBeanBrokerFactory.java
Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/BrokerFactory.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/BrokerFactory.java?view=diff&rev=518590&r1=518589&r2=518590
==============================================================================
--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/BrokerFactory.java (original)
+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/BrokerFactory.java Thu Mar 15 04:39:04 2007
@@ -34,10 +34,6 @@
static final private FactoryFinder brokerFactoryHandlerFinder = new FactoryFinder("META-INF/services/org/apache/activemq/broker/");
- public interface BrokerFactoryHandler {
- public BrokerService createBroker(URI brokerURI) throws Exception;
- }
-
public static BrokerFactoryHandler createBrokerFactoryHandler(String type) throws IOException {
try {
return (BrokerFactoryHandler)brokerFactoryHandlerFinder.newInstance(type);
@@ -48,26 +44,50 @@
/**
* Creates a broker from a URI configuration
- * @param brokerURI
- * @throws Exception
+ * @param brokerURI the URI scheme to configure the broker
+ * @throws Exception
*/
public static BrokerService createBroker(URI brokerURI) throws Exception {
+ return createBroker(brokerURI, false);
+ }
+
+ /**
+ * Creates a broker from a URI configuration
+ * @param brokerURI the URI scheme to configure the broker
+ * @param startBroker whether or not the broker should have its {@link BrokerService#start()} method called after construction
+ * @throws Exception
+ */
+ public static BrokerService createBroker(URI brokerURI, boolean startBroker) throws Exception {
if( brokerURI.getScheme() == null )
throw new IllegalArgumentException("Invalid broker URI, no scheme specified: "+brokerURI);
BrokerFactoryHandler handler = createBrokerFactoryHandler(brokerURI.getScheme());
BrokerService broker = handler.createBroker(brokerURI);
+ if (startBroker) {
+ broker.start();
+ }
return broker;
}
/**
* Creates a broker from a URI configuration
- * @param brokerURI
+ * @param brokerURI the URI scheme to configure the broker
* @throws Exception
*/
public static BrokerService createBroker(String brokerURI) throws Exception {
return createBroker(new URI(brokerURI));
+ }
+
+
+ /**
+ * Creates a broker from a URI configuration
+ * @param brokerURI the URI scheme to configure the broker
+ * @param startBroker whether or not the broker should have its {@link BrokerService#start()} method called after construction
+ * @throws Exception
+ */
+ public static BrokerService createBroker(String brokerURI, boolean startBroker) throws Exception {
+ return createBroker(new URI(brokerURI), startBroker);
}
Added: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/BrokerFactoryHandler.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/BrokerFactoryHandler.java?view=auto&rev=518590
==============================================================================
--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/BrokerFactoryHandler.java (added)
+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/BrokerFactoryHandler.java Thu Mar 15 04:39:04 2007
@@ -0,0 +1,29 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.activemq.broker;
+
+import java.net.URI;
+
+/**
+ * Represents the interface used to create a broker from a URI scheme.
+ *
+ * @version $Revision$
+*/
+public interface BrokerFactoryHandler {
+ public BrokerService createBroker(URI brokerURI) throws Exception;
+}
Propchange: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/BrokerFactoryHandler.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/BrokerFactoryHandler.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/BrokerFactoryHandler.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/BrokerService.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/BrokerService.java?view=diff&rev=518590&r1=518589&r2=518590
==============================================================================
--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/BrokerService.java (original)
+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/BrokerService.java Thu Mar 15 04:39:04 2007
@@ -155,7 +155,22 @@
private int persistenceThreadPriority = Thread.MAX_PRIORITY;
private boolean useLocalHostBrokerName = false;
private CountDownLatch stoppedLatch = new CountDownLatch(1);
-
+
+ static{
+ String localHostName = "localhost";
+ try{
+ localHostName=java.net.InetAddress.getLocalHost().getHostName();
+ }catch(UnknownHostException e){
+ log.error("Failed to resolve localhost");
+ }
+ LOCAL_HOST_NAME = localHostName;
+ }
+
+ @Override
+ public String toString() {
+ return "BrokerService[" + getBrokerName() + "]";
+ }
+
/**
* Adds a new transport connector for the given bind address
*
@@ -1654,16 +1669,6 @@
}
}
}
-
- static{
- String localHostName = "localhost";
- try{
- localHostName=java.net.InetAddress.getLocalHost().getHostName();
- }catch(UnknownHostException e){
- log.error("Failed to resolve localhost");
- }
- LOCAL_HOST_NAME = localHostName;
- }
Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/DefaultBrokerFactory.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/DefaultBrokerFactory.java?view=diff&rev=518590&r1=518589&r2=518590
==============================================================================
--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/DefaultBrokerFactory.java (original)
+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/DefaultBrokerFactory.java Thu Mar 15 04:39:04 2007
@@ -17,7 +17,7 @@
*/
package org.apache.activemq.broker;
-import org.apache.activemq.broker.BrokerFactory.BrokerFactoryHandler;
+import org.apache.activemq.broker.BrokerFactoryHandler;
import org.apache.activemq.util.IntrospectionSupport;
import org.apache.activemq.util.URISupport;
import org.apache.activemq.util.URISupport.CompositeData;
@@ -55,9 +55,6 @@
brokerService.addConnector(components[i]);
}
}
-
- // TODO we want folks to be able to add other connectors and start the broker afterwards
- //brokerService.start();
return brokerService;
}
Added: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/PropertiesBrokerFactory.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/PropertiesBrokerFactory.java?view=auto&rev=518590
==============================================================================
--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/PropertiesBrokerFactory.java (added)
+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/PropertiesBrokerFactory.java Thu Mar 15 04:39:04 2007
@@ -0,0 +1,102 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.activemq.broker;
+
+import org.apache.activemq.util.IntrospectionSupport;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URI;
+import java.net.URL;
+import java.net.MalformedURLException;
+import java.util.Map;
+import java.util.Properties;
+
+/**
+ * A {@link BrokerFactoryHandler} which uses a properties file to
+ * configure the broker's various policies.
+ *
+ * @version $Revision$
+ */
+public class PropertiesBrokerFactory implements BrokerFactoryHandler {
+
+ public BrokerService createBroker(URI brokerURI) throws Exception {
+
+ Map properties = loadProperties(brokerURI);
+ BrokerService brokerService = createBrokerService(brokerURI, properties);
+
+ IntrospectionSupport.setProperties(brokerService, properties);
+ return brokerService;
+ }
+
+ /**
+ * Lets load the properties from some external URL or a relative file
+ */
+ protected Map loadProperties(URI brokerURI) throws IOException {
+ // lets load a URI
+ String remaining = brokerURI.getSchemeSpecificPart();
+ Properties properties = new Properties();
+ File file = new File(remaining);
+
+ InputStream inputStream = null;
+ if (file.exists()) {
+ inputStream = new FileInputStream(file);
+ }
+ else {
+ URL url = null;
+ try {
+ url = new URL(remaining);
+ }
+ catch (MalformedURLException e) {
+ // lets now see if we can find the name on the classpath
+ inputStream = findResourceOnClassPath(remaining);
+ if (inputStream == null) {
+ throw new IOException("File does not exist: " + remaining + ", could not be found on the classpath and is not a valid URL: " + e);
+ }
+ }
+ if (inputStream == null) {
+ inputStream = url.openStream();
+ }
+ }
+ properties.load(inputStream);
+
+ // should we append any system properties?
+ try {
+ Properties systemProperties = System.getProperties();
+ properties.putAll(systemProperties);
+ }
+ catch (Exception e) {
+ // ignore security exception
+ }
+ return properties;
+ }
+
+ protected InputStream findResourceOnClassPath(String remaining) {
+ InputStream answer = Thread.currentThread().getContextClassLoader().getResourceAsStream(remaining);
+ if (answer == null) {
+ answer = getClass().getClassLoader().getResourceAsStream(remaining);
+ }
+ return answer;
+ }
+
+ protected BrokerService createBrokerService(URI brokerURI, Map properties) {
+ return new BrokerService();
+ }
+}
Propchange: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/PropertiesBrokerFactory.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/PropertiesBrokerFactory.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/PropertiesBrokerFactory.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/peer/PeerTransportFactory.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/peer/PeerTransportFactory.java?view=diff&rev=518590&r1=518589&r2=518590
==============================================================================
--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/peer/PeerTransportFactory.java (original)
+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/peer/PeerTransportFactory.java Thu Mar 15 04:39:04 2007
@@ -25,7 +25,7 @@
import org.apache.activemq.broker.BrokerService;
import org.apache.activemq.broker.TransportConnector;
-import org.apache.activemq.broker.BrokerFactory.BrokerFactoryHandler;
+import org.apache.activemq.broker.BrokerFactoryHandler;
import org.apache.activemq.transport.Transport;
import org.apache.activemq.transport.TransportFactory;
import org.apache.activemq.transport.TransportServer;
Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/vm/VMTransportFactory.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/vm/VMTransportFactory.java?view=diff&rev=518590&r1=518589&r2=518590
==============================================================================
--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/vm/VMTransportFactory.java (original)
+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/vm/VMTransportFactory.java Thu Mar 15 04:39:04 2007
@@ -26,7 +26,7 @@
import org.apache.activemq.broker.BrokerRegistry;
import org.apache.activemq.broker.BrokerService;
import org.apache.activemq.broker.TransportConnector;
-import org.apache.activemq.broker.BrokerFactory.BrokerFactoryHandler;
+import org.apache.activemq.broker.BrokerFactoryHandler;
import org.apache.activemq.transport.MarshallingTransportFilter;
import org.apache.activemq.transport.Transport;
import org.apache.activemq.transport.TransportFactory;
Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/xbean/XBeanBrokerFactory.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/xbean/XBeanBrokerFactory.java?view=diff&rev=518590&r1=518589&r2=518590
==============================================================================
--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/xbean/XBeanBrokerFactory.java (original)
+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/xbean/XBeanBrokerFactory.java Thu Mar 15 04:39:04 2007
@@ -21,7 +21,7 @@
import java.net.URI;
import org.apache.activemq.broker.BrokerService;
-import org.apache.activemq.broker.BrokerFactory.BrokerFactoryHandler;
+import org.apache.activemq.broker.BrokerFactoryHandler;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.apache.xbean.spring.context.ClassPathXmlApplicationContext;
Added: activemq/trunk/activemq-core/src/main/resources/META-INF/services/org/apache/activemq/broker/properties
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/resources/META-INF/services/org/apache/activemq/broker/properties?view=auto&rev=518590
==============================================================================
--- activemq/trunk/activemq-core/src/main/resources/META-INF/services/org/apache/activemq/broker/properties (added)
+++ activemq/trunk/activemq-core/src/main/resources/META-INF/services/org/apache/activemq/broker/properties Thu Mar 15 04:39:04 2007
@@ -0,0 +1 @@
+class=org.apache.activemq.broker.PropertiesBrokerFactory
Added: activemq/trunk/activemq-core/src/test/java/org/apache/activemq/config/BrokerPropertiesTest.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/config/BrokerPropertiesTest.java?view=auto&rev=518590
==============================================================================
--- activemq/trunk/activemq-core/src/test/java/org/apache/activemq/config/BrokerPropertiesTest.java (added)
+++ activemq/trunk/activemq-core/src/test/java/org/apache/activemq/config/BrokerPropertiesTest.java Thu Mar 15 04:39:04 2007
@@ -0,0 +1,42 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.activemq.config;
+
+import junit.framework.TestCase;
+import org.apache.activemq.broker.BrokerFactory;
+import org.apache.activemq.broker.BrokerService;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * @version $Revision$
+ */
+public class BrokerPropertiesTest extends TestCase {
+ private static final transient Log log = LogFactory.getLog(BrokerPropertiesTest.class);
+
+ public void testPropertiesFile() throws Exception {
+ BrokerService broker = BrokerFactory.createBroker("properties:org/apache/activemq/config/broker.properties");
+
+ log.info("Created broker: " + broker);
+ assertNotNull(broker);
+
+ assertEquals("isUseJmx()", false, broker.isUseJmx());
+ assertEquals("isPersistent()", false, broker.isPersistent());
+ assertEquals("getBrokerName()", "Cheese", broker.getBrokerName());
+ }
+}
Propchange: activemq/trunk/activemq-core/src/test/java/org/apache/activemq/config/BrokerPropertiesTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: activemq/trunk/activemq-core/src/test/java/org/apache/activemq/config/BrokerPropertiesTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: activemq/trunk/activemq-core/src/test/java/org/apache/activemq/config/BrokerPropertiesTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: activemq/trunk/activemq-core/src/test/resources/org/apache/activemq/config/broker.properties
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/test/resources/org/apache/activemq/config/broker.properties?view=auto&rev=518590
==============================================================================
--- activemq/trunk/activemq-core/src/test/resources/org/apache/activemq/config/broker.properties (added)
+++ activemq/trunk/activemq-core/src/test/resources/org/apache/activemq/config/broker.properties Thu Mar 15 04:39:04 2007
@@ -0,0 +1,3 @@
+useJmx = false
+persistent = false
+brokerName = Cheese
\ No newline at end of file
Propchange: activemq/trunk/activemq-core/src/test/resources/org/apache/activemq/config/broker.properties
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: activemq/trunk/activemq-core/src/test/resources/org/apache/activemq/config/broker.properties
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: activemq/trunk/activemq-core/src/test/resources/org/apache/activemq/config/broker.properties
------------------------------------------------------------------------------
svn:mime-type = text/plain