You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by de...@apache.org on 2010/07/08 13:11:23 UTC
svn commit: r961712 - in /activemq/trunk: ./ activemq-karaf/
activemq-karaf/src/main/java/ activemq-karaf/src/main/java/org/
activemq-karaf/src/main/java/org/apache/
activemq-karaf/src/main/java/org/apache/activemq/
activemq-karaf/src/main/java/org/apa...
Author: dejanb
Date: Thu Jul 8 11:11:22 2010
New Revision: 961712
URL: http://svn.apache.org/viewvc?rev=961712&view=rev
Log:
https://issues.apache.org/activemq/browse/AMQ-2815 - first stab at moving karaf commands to activemq
Added:
activemq/trunk/activemq-karaf/src/main/java/
activemq/trunk/activemq-karaf/src/main/java/org/
activemq/trunk/activemq-karaf/src/main/java/org/apache/
activemq/trunk/activemq-karaf/src/main/java/org/apache/activemq/
activemq/trunk/activemq-karaf/src/main/java/org/apache/activemq/karaf/
activemq/trunk/activemq-karaf/src/main/java/org/apache/activemq/karaf/commands/
activemq/trunk/activemq-karaf/src/main/java/org/apache/activemq/karaf/commands/ActiveMQCommand.java
activemq/trunk/activemq-karaf/src/main/java/org/apache/activemq/karaf/commands/ActiveMQCommandSupport.java
activemq/trunk/activemq-karaf/src/main/java/org/apache/activemq/karaf/commands/CreateBrokerCommand.java
activemq/trunk/activemq-karaf/src/main/java/org/apache/activemq/karaf/commands/DestroyBrokerCommand.java
activemq/trunk/activemq-karaf/src/main/resources/OSGI-INF/
activemq/trunk/activemq-karaf/src/main/resources/OSGI-INF/blueprint/
activemq/trunk/activemq-karaf/src/main/resources/OSGI-INF/blueprint/activemq-karaf.xml
activemq/trunk/activemq-karaf/src/main/resources/org/
activemq/trunk/activemq-karaf/src/main/resources/org/apache/
activemq/trunk/activemq-karaf/src/main/resources/org/apache/activemq/
activemq/trunk/activemq-karaf/src/main/resources/org/apache/activemq/karaf/
activemq/trunk/activemq-karaf/src/main/resources/org/apache/activemq/karaf/commands/
activemq/trunk/activemq-karaf/src/main/resources/org/apache/activemq/karaf/commands/AdministrationCommand.properties
activemq/trunk/activemq-karaf/src/main/resources/org/apache/activemq/karaf/commands/CreateBrokerCommand.properties
activemq/trunk/activemq-karaf/src/main/resources/org/apache/activemq/karaf/commands/DestroyBrokerCommand.properties
activemq/trunk/activemq-karaf/src/main/resources/org/apache/activemq/karaf/commands/broker.xml
activemq/trunk/activemq-karaf/src/test/
activemq/trunk/activemq-karaf/src/test/java/
activemq/trunk/activemq-karaf/src/test/resources/
Modified:
activemq/trunk/activemq-karaf/pom.xml
activemq/trunk/activemq-karaf/src/main/resources/features.xml
activemq/trunk/pom.xml
Modified: activemq/trunk/activemq-karaf/pom.xml
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-karaf/pom.xml?rev=961712&r1=961711&r2=961712&view=diff
==============================================================================
--- activemq/trunk/activemq-karaf/pom.xml (original)
+++ activemq/trunk/activemq-karaf/pom.xml Thu Jul 8 11:11:22 2010
@@ -26,10 +26,44 @@
</parent>
<artifactId>activemq-karaf</artifactId>
- <packaging>jar</packaging>
+ <packaging>bundle</packaging>
<name>ActiveMQ :: Apache Karaf</name>
<description>Provides resources for running ActiveMQ in Apache Karaf</description>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.karaf.shell</groupId>
+ <artifactId>org.apache.karaf.shell.console</artifactId>
+ <version>${karaf-version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.core</artifactId>
+ <scope>provided</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.activemq</groupId>
+ <artifactId>activemq-core</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.activemq</groupId>
+ <artifactId>activemq-optional</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.activemq</groupId>
+ <artifactId>activemq-console</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.activemq</groupId>
+ <artifactId>activemq-pool</artifactId>
+ </dependency>
+
+ </dependencies>
+
<build>
<resources>
<resource>
@@ -73,6 +107,22 @@
</execution>
</executions>
</plugin>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <configuration>
+ <instructions>
+ <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
+ <Export-Package>org.apache.activemq.karaf.commands;version=${project.version};-split-package:=merge-first</Export-Package>
+ <Import-Package>
+ org.apache.felix.gogo.commands,
+ *
+ </Import-Package>
+ <Private-Package>!*</Private-Package>
+ <_versionpolicy>[$(version;==;$(@)),$(version;+;$(@)))</_versionpolicy>
+ </instructions>
+ </configuration>
+ </plugin>
</plugins>
</build>
Added: activemq/trunk/activemq-karaf/src/main/java/org/apache/activemq/karaf/commands/ActiveMQCommand.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-karaf/src/main/java/org/apache/activemq/karaf/commands/ActiveMQCommand.java?rev=961712&view=auto
==============================================================================
--- activemq/trunk/activemq-karaf/src/main/java/org/apache/activemq/karaf/commands/ActiveMQCommand.java (added)
+++ activemq/trunk/activemq-karaf/src/main/java/org/apache/activemq/karaf/commands/ActiveMQCommand.java Thu Jul 8 11:11:22 2010
@@ -0,0 +1,158 @@
+/**
+ *
+ * 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.karaf.commands;
+
+import org.apache.felix.gogo.commands.Action;
+import org.apache.felix.gogo.commands.Argument;
+import org.apache.felix.gogo.commands.basic.AbstractCommand;
+import org.apache.felix.gogo.commands.basic.ActionPreparator;
+import org.apache.felix.gogo.commands.basic.DefaultActionPreparator;
+import org.apache.karaf.shell.console.BlueprintContainerAware;
+import org.apache.karaf.shell.console.BundleContextAware;
+import org.apache.karaf.shell.console.CompletableFunction;
+import org.apache.karaf.shell.console.Completer;
+import org.apache.karaf.shell.console.commands.GenericType;
+import org.osgi.framework.BundleContext;
+import org.osgi.service.blueprint.container.BlueprintContainer;
+import org.osgi.service.blueprint.container.Converter;
+import org.osgi.service.command.CommandSession;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Type;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Base command to process options and wrap native ActiveMQ console commands.
+ */
+public class ActiveMQCommand extends AbstractCommand implements CompletableFunction
+{
+ protected BlueprintContainer blueprintContainer;
+ protected Converter blueprintConverter;
+ protected String actionId;
+ protected List<Completer> completers;
+
+ public void setBlueprintContainer(BlueprintContainer blueprintContainer) {
+ this.blueprintContainer = blueprintContainer;
+ }
+
+ public void setBlueprintConverter(Converter blueprintConverter) {
+ this.blueprintConverter = blueprintConverter;
+ }
+
+ public void setActionId(String actionId) {
+ this.actionId = actionId;
+ }
+
+ public List<Completer> getCompleters() {
+ return completers;
+ }
+
+ public void setCompleters(List<Completer> completers) {
+ this.completers = completers;
+ }
+
+ @Override
+ protected ActionPreparator getPreparator() throws Exception {
+ return new ActiveMQActionPreparator();
+ }
+
+ class ActiveMQActionPreparator extends DefaultActionPreparator {
+ @Override
+ public boolean prepare(Action action, CommandSession session, List<Object> params) throws Exception
+ {
+ Map<Argument, Field> arguments = new HashMap<Argument, Field>();
+ List<Argument> orderedArguments = new ArrayList<Argument>();
+ // Introspect
+ for (Class type = action.getClass(); type != null; type = type.getSuperclass()) {
+ for (Field field : type.getDeclaredFields()) {
+ Argument argument = field.getAnnotation(Argument.class);
+ if (argument != null) {
+ arguments.put(argument, field);
+ int index = argument.index();
+ while (orderedArguments.size() <= index) {
+ orderedArguments.add(null);
+ }
+ if (orderedArguments.get(index) != null) {
+ throw new IllegalArgumentException("Duplicate argument index: " + index);
+ }
+ orderedArguments.set(index, argument);
+ }
+ }
+ }
+ // Check indexes are correct
+ for (int i = 0; i < orderedArguments.size(); i++) {
+ if (orderedArguments.get(i) == null) {
+ throw new IllegalArgumentException("Missing argument for index: " + i);
+ }
+ }
+ // Populate
+ Map<Argument, Object> argumentValues = new HashMap<Argument, Object>();
+ int argIndex = 0;
+ for (Iterator<Object> it = params.iterator(); it.hasNext();) {
+ Object param = it.next();
+ if (argIndex >= orderedArguments.size()) {
+ throw new IllegalArgumentException("Too many arguments specified");
+ }
+ Argument argument = orderedArguments.get(argIndex);
+ if (!argument.multiValued()) {
+ argIndex++;
+ }
+ if (argument.multiValued()) {
+ List<Object> l = (List<Object>) argumentValues.get(argument);
+ if (l == null) {
+ l = new ArrayList<Object>();
+ argumentValues.put(argument, l);
+ }
+ l.add(param);
+ } else {
+ argumentValues.put(argument, param);
+ }
+ }
+
+ for (Map.Entry<Argument, Object> entry : argumentValues.entrySet()) {
+ Field field = arguments.get(entry.getKey());
+ Object value = convert(action, session, entry.getValue(), field.getGenericType());
+ field.setAccessible(true);
+ field.set(action, value);
+ }
+ return true;
+ }
+
+ @Override
+ protected Object convert(Action action, CommandSession commandSession, Object o, Type type) throws Exception {
+ return blueprintConverter.convert(o, new GenericType(type));
+ }
+ }
+
+ protected Action createNewAction() throws Exception {
+ Action action = (Action) blueprintContainer.getComponentInstance(actionId);
+ if (action instanceof BlueprintContainerAware) {
+ ((BlueprintContainerAware) action).setBlueprintContainer(blueprintContainer);
+ }
+ if (action instanceof BundleContextAware) {
+ BundleContext context = (BundleContext) blueprintContainer.getComponentInstance("blueprintBundleContext");
+ ((BundleContextAware) action).setBundleContext(context);
+ }
+ return action;
+ }
+
+}
Added: activemq/trunk/activemq-karaf/src/main/java/org/apache/activemq/karaf/commands/ActiveMQCommandSupport.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-karaf/src/main/java/org/apache/activemq/karaf/commands/ActiveMQCommandSupport.java?rev=961712&view=auto
==============================================================================
--- activemq/trunk/activemq-karaf/src/main/java/org/apache/activemq/karaf/commands/ActiveMQCommandSupport.java (added)
+++ activemq/trunk/activemq-karaf/src/main/java/org/apache/activemq/karaf/commands/ActiveMQCommandSupport.java Thu Jul 8 11:11:22 2010
@@ -0,0 +1,91 @@
+/*
+ * 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.karaf.commands;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.apache.activemq.console.command.Command;
+import org.apache.activemq.console.formatter.CommandShellOutputFormatter;
+import org.apache.activemq.console.CommandContext;
+import org.apache.karaf.shell.console.OsgiCommandSupport;
+import org.apache.felix.gogo.commands.Argument;
+
+/**
+ * @version $Rev: 960482 $ $Date: 2010-07-05 10:28:33 +0200 (Mon, 05 Jul 2010) $
+ */
+public class ActiveMQCommandSupport extends OsgiCommandSupport {
+
+ private Command command;
+
+ @Argument(index=0, multiValued=true, required=true)
+ private Collection<String> arguments = null;
+
+ protected Object doExecute() throws Exception {
+ final String[] args = toStringArray(arguments.toArray());
+
+ CommandContext context2 = new CommandContext();
+ context2.setFormatter(new CommandShellOutputFormatter(System.out));
+ Command currentCommand = command.getClass().newInstance();
+
+ try {
+ currentCommand.setCommandContext(context2);
+ currentCommand.execute(new ArrayList<String>(Arrays.asList(args)));
+ return null;
+ } catch (Throwable e) {
+ Throwable cur = e;
+ while (cur.getCause() != null) {
+ cur = cur.getCause();
+ }
+ if (cur instanceof java.net.ConnectException) {
+ context2
+ .print("\n"
+ + "Could not connect to JMX server. This command requires that the remote JMX server be enabled.\n"
+ + "This is typically done by adding the following JVM arguments: \n"
+ + " -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.authenticate=false \n"
+ + " -Dcom.sun.management.jmxremote.ssl=false \n" + "\n"
+ + "The connection error was: " + cur + "\n");
+ } else {
+ if (e instanceof Exception) {
+ throw (Exception)e;
+ } else {
+ throw new RuntimeException(e);
+ }
+
+ }
+ }
+ return null;
+
+ }
+
+ public Command getCommand() {
+ return command;
+ }
+
+ public void setCommand(Command command) {
+ this.command = command;
+ }
+
+ public static String[] toStringArray(Object args[]) {
+ String strings[] = new String[args.length];
+ for(int i = 0; i < args.length; i++) {
+ strings[i] = String.valueOf(args[i]);
+ }
+ return strings;
+ }
+}
Added: activemq/trunk/activemq-karaf/src/main/java/org/apache/activemq/karaf/commands/CreateBrokerCommand.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-karaf/src/main/java/org/apache/activemq/karaf/commands/CreateBrokerCommand.java?rev=961712&view=auto
==============================================================================
--- activemq/trunk/activemq-karaf/src/main/java/org/apache/activemq/karaf/commands/CreateBrokerCommand.java (added)
+++ activemq/trunk/activemq-karaf/src/main/java/org/apache/activemq/karaf/commands/CreateBrokerCommand.java Thu Jul 8 11:11:22 2010
@@ -0,0 +1,152 @@
+/*
+ * 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.karaf.commands;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.PrintStream;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Scanner;
+
+import org.apache.felix.gogo.commands.Option;
+import org.apache.felix.gogo.commands.Command;
+import org.apache.karaf.shell.console.OsgiCommandSupport;
+
+/**
+ * @version $Rev: 960482 $ $Date: 2010-07-05 10:28:33 +0200 (Mon, 05 Jul 2010) $
+ */
+ @Command(scope="activemq", name="create-broker", description="Creates a broker instance.")
+public class CreateBrokerCommand extends OsgiCommandSupport {
+
+ @Option(name = "-n", aliases = {"--name"}, description = "The name of the broker (defaults to localhost).")
+ private String name = "localhost";
+
+ /*
+ * (non-Javadoc)
+ * @see
+ * org.apache.karaf.shell.console.OsgiCommandSupport#doExecute()
+ */
+ protected Object doExecute() throws Exception {
+
+ try {
+ String name = getName();
+ File base = new File(System.getProperty("karaf.base"));
+ File deploy = new File(base, "deploy");
+
+ HashMap<String, String> props = new HashMap<String, String>();
+ props.put("${name}", name);
+
+ mkdir(deploy);
+ File configFile = new File(deploy, name + "-broker.xml");
+ copyFilteredResourceTo(configFile, "broker.xml", props);
+
+ System.out.println("");
+ System.out.println("Default ActiveMQ Broker (" + name + ") configuration file created at: "
+ + configFile.getPath());
+ System.out.println("Please review the configuration and modify to suite your needs. ");
+ System.out.println("");
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw e;
+ }
+
+ return 0;
+ }
+
+ private void copyFilteredResourceTo(File outFile, String resource, HashMap<String, String> props)
+ throws Exception {
+ if (!outFile.exists()) {
+ System.out.println("Creating file: @|green " + outFile.getPath() + "|");
+ InputStream is = CreateBrokerCommand.class.getResourceAsStream(resource);
+ try {
+ // Read it line at a time so that we can use the platform line
+ // ending when we write it out.
+ PrintStream out = new PrintStream(new FileOutputStream(outFile));
+ try {
+ Scanner scanner = new Scanner(is);
+ while (scanner.hasNextLine()) {
+ String line = scanner.nextLine();
+ line = filter(line, props);
+ out.println(line);
+ }
+ } finally {
+ safeClose(out);
+ }
+ } finally {
+ safeClose(is);
+ }
+ } else {
+ System.out.println("@|red File already exists|. Move it out of the way if you want it re-created: "
+ + outFile.getPath() + "");
+ }
+ }
+
+ private void safeClose(InputStream is) throws IOException {
+ if (is == null)
+ return;
+ try {
+ is.close();
+ } catch (Throwable ignore) {
+ }
+ }
+
+ private void safeClose(OutputStream is) throws IOException {
+ if (is == null)
+ return;
+ try {
+ is.close();
+ } catch (Throwable ignore) {
+ }
+ }
+
+ private String filter(String line, HashMap<String, String> props) {
+ for (Map.Entry<String, String> i : props.entrySet()) {
+ int p1;
+ while ((p1 = line.indexOf(i.getKey())) >= 0) {
+ String l1 = line.substring(0, p1);
+ String l2 = line.substring(p1 + i.getKey().length());
+ line = l1 + i.getValue() + l2;
+ }
+ }
+ return line;
+ }
+
+ private void mkdir(File file) {
+ if (!file.exists()) {
+ System.out.println("Creating missing directory: @|green " + file.getPath() + "|");
+ file.mkdirs();
+ }
+ }
+
+ public String getName() {
+ if (name == null) {
+ File base = new File(System.getProperty("karaf.base"));
+ name = base.getName();
+ }
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+}
Added: activemq/trunk/activemq-karaf/src/main/java/org/apache/activemq/karaf/commands/DestroyBrokerCommand.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-karaf/src/main/java/org/apache/activemq/karaf/commands/DestroyBrokerCommand.java?rev=961712&view=auto
==============================================================================
--- activemq/trunk/activemq-karaf/src/main/java/org/apache/activemq/karaf/commands/DestroyBrokerCommand.java (added)
+++ activemq/trunk/activemq-karaf/src/main/java/org/apache/activemq/karaf/commands/DestroyBrokerCommand.java Thu Jul 8 11:11:22 2010
@@ -0,0 +1,68 @@
+/*
+ * 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.karaf.commands;
+
+import java.io.File;
+
+import org.apache.felix.gogo.commands.Option;
+import org.apache.felix.gogo.commands.Command;
+import org.apache.karaf.shell.console.OsgiCommandSupport;
+
+/**
+ * @version $Rev: 960482 $ $Date: 2010-07-05 10:28:33 +0200 (Mon, 05 Jul 2010) $
+ */
+@Command(scope="activemq", name="destroy-broker", description="Destory a broker instance.")
+public class DestroyBrokerCommand extends OsgiCommandSupport {
+
+ @Option(name = "-n", aliases = {"--name"}, description = "The name of the broker (defaults to localhost).")
+ private String name = "localhost";
+
+ protected Object doExecute() throws Exception {
+
+ try {
+ String name = getName();
+ File base = new File(System.getProperty("karaf.base"));
+ File deploy = new File(base, "deploy");
+ File configFile = new File(deploy, name + "-broker.xml");
+
+ configFile.delete();
+
+ System.out.println("");
+ System.out.println("Default ActiveMQ Broker (" + name + ") configuration file created at: "
+ + configFile.getPath() + " removed.");
+ System.out.println("");
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw e;
+ }
+
+ return 0;
+ }
+
+ public String getName() {
+ if (name == null) {
+ File base = new File(System.getProperty("karaf.base"));
+ name = base.getName();
+ }
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
Added: activemq/trunk/activemq-karaf/src/main/resources/OSGI-INF/blueprint/activemq-karaf.xml
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-karaf/src/main/resources/OSGI-INF/blueprint/activemq-karaf.xml?rev=961712&view=auto
==============================================================================
--- activemq/trunk/activemq-karaf/src/main/resources/OSGI-INF/blueprint/activemq-karaf.xml (added)
+++ activemq/trunk/activemq-karaf/src/main/resources/OSGI-INF/blueprint/activemq-karaf.xml Thu Jul 8 11:11:22 2010
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ 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.
+
+-->
+<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
+ xmlns:shell="http://felix.apache.org/karaf/xmlns/shell/v1.0.0">
+
+ <shell:command-bundle>
+
+ <shell:command name="activemq/create-broker">
+ <shell:action class="org.apache.activemq.karaf.commands.CreateBrokerCommand"/>
+ </shell:command>
+
+ <shell:command name="activemq/destroy-broker">
+ <shell:action class="org.apache.activemq.karaf.commands.DestroyBrokerCommand"/>
+ </shell:command>
+
+ </shell:command-bundle>
+
+ <!-- ActiveMQ List Command -->
+ <bean id="listcommand" class="org.apache.activemq.karaf.commands.ActiveMQCommand">
+ <property name="blueprintContainer" ref="blueprintContainer"/>
+ <property name="blueprintConverter" ref="blueprintConverter"/>
+ <property name="actionId" value="listaction"/>
+ </bean>
+
+ <service ref="listcommand" activation="lazy" >
+ <interfaces>
+ <value>org.osgi.service.command.Function</value>
+ <value>org.apache.karaf.shell.console.CompletableFunction</value>
+ </interfaces>
+ <service-properties>
+ <entry key="osgi.command.scope" value="activemq"/>
+ <entry key="osgi.command.function" value="list"/>
+ </service-properties>
+ </service>
+
+ <bean id="listaction" class="org.apache.activemq.karaf.commands.ActiveMQCommandSupport"
+ activation="lazy"
+ scope="prototype">
+ <property name="command">
+ <bean class="org.apache.activemq.console.command.ListCommand"/>
+ </property>
+ </bean>
+
+ <!-- ActiveMQ Query Command -->
+ <bean id="querycommand" class="org.apache.activemq.karaf.commands.ActiveMQCommand">
+ <property name="blueprintContainer" ref="blueprintContainer"/>
+ <property name="blueprintConverter" ref="blueprintConverter"/>
+ <property name="actionId" value="queryaction"/>
+ </bean>
+
+ <service ref="querycommand" activation="lazy" >
+ <interfaces>
+ <value>org.osgi.service.command.Function</value>
+ <value>org.apache.karaf.shell.console.CompletableFunction</value>
+ </interfaces>
+ <service-properties>
+ <entry key="osgi.command.scope" value="activemq"/>
+ <entry key="osgi.command.function" value="query"/>
+ </service-properties>
+ </service>
+
+ <bean id="queryaction" class="org.apache.activemq.karaf.commands.ActiveMQCommandSupport"
+ activation="lazy"
+ scope="prototype">
+ <property name="command">
+ <bean class="org.apache.activemq.console.command.QueryCommand"/>
+ </property>
+ </bean>
+
+ <!-- ActiveMQ Browse Command -->
+ <bean id="browsecommand" class="org.apache.activemq.karaf.commands.ActiveMQCommand">
+ <property name="blueprintContainer" ref="blueprintContainer"/>
+ <property name="blueprintConverter" ref="blueprintConverter"/>
+ <property name="actionId" value="browseaction"/>
+ </bean>
+
+ <service ref="browsecommand" activation="lazy" >
+ <interfaces>
+ <value>org.osgi.service.command.Function</value>
+ <value>org.apache.karaf.shell.console.CompletableFunction</value>
+ </interfaces>
+ <service-properties>
+ <entry key="osgi.command.scope" value="activemq"/>
+ <entry key="osgi.command.function" value="browse"/>
+ </service-properties>
+ </service>
+
+ <bean id="browseaction" class="org.apache.activemq.karaf.commands.ActiveMQCommandSupport"
+ activation="lazy"
+ scope="prototype">
+ <property name="command">
+ <bean class="org.apache.activemq.console.command.AmqBrowseCommand"/>
+ </property>
+ </bean>
+
+ <!-- ActiveMQ Bstat Command -->
+ <bean id="bstatcommand" class="org.apache.activemq.karaf.commands.ActiveMQCommand">
+ <property name="blueprintContainer" ref="blueprintContainer"/>
+ <property name="blueprintConverter" ref="blueprintConverter"/>
+ <property name="actionId" value="bstataction"/>
+ </bean>
+
+ <service ref="bstatcommand" activation="lazy" >
+ <interfaces>
+ <value>org.osgi.service.command.Function</value>
+ <value>org.apache.karaf.shell.console.CompletableFunction</value>
+ </interfaces>
+ <service-properties>
+ <entry key="osgi.command.scope" value="activemq"/>
+ <entry key="osgi.command.function" value="bstat"/>
+ </service-properties>
+ </service>
+
+ <bean id="bstataction" class="org.apache.activemq.karaf.commands.ActiveMQCommandSupport"
+ activation="lazy"
+ scope="prototype">
+ <property name="command">
+ <bean class="org.apache.activemq.console.command.BstatCommand"/>
+ </property>
+ </bean>
+
+ <!-- ActiveMQ Purge Command -->
+ <bean id="purgecommand" class="org.apache.activemq.karaf.commands.ActiveMQCommand">
+ <property name="blueprintContainer" ref="blueprintContainer"/>
+ <property name="blueprintConverter" ref="blueprintConverter"/>
+ <property name="actionId" value="purgeaction"/>
+ </bean>
+
+ <service ref="purgecommand" activation="lazy" >
+ <interfaces>
+ <value>org.osgi.service.command.Function</value>
+ <value>org.apache.karaf.shell.console.CompletableFunction</value>
+ </interfaces>
+ <service-properties>
+ <entry key="osgi.command.scope" value="activemq"/>
+ <entry key="osgi.command.function" value="purge"/>
+ </service-properties>
+ </service>
+
+ <bean id="purgeaction" class="org.apache.activemq.karaf.commands.ActiveMQCommandSupport"
+ activation="lazy"
+ scope="prototype">
+ <property name="command">
+ <bean class="org.apache.activemq.console.command.PurgeCommand"/>
+ </property>
+ </bean>
+
+</blueprint>
Modified: activemq/trunk/activemq-karaf/src/main/resources/features.xml
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-karaf/src/main/resources/features.xml?rev=961712&r1=961711&r2=961712&view=diff
==============================================================================
--- activemq/trunk/activemq-karaf/src/main/resources/features.xml (original)
+++ activemq/trunk/activemq-karaf/src/main/resources/features.xml Thu Jul 8 11:11:22 2010
@@ -1,26 +1,6 @@
<features name="activemq-${activemq-version}">
- <repository>mvn:org.apache.felix.karaf/apache-felix-karaf/1.6.0/xml/features</repository>
-
- <feature name="spring" version="${spring-version}">
- <bundle>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.aopalliance/1.0_3</bundle>
- <bundle>mvn:org.springframework/spring-core/${spring-version}</bundle>
- <bundle>mvn:org.springframework/spring-beans/${spring-version}</bundle>
- <bundle>mvn:org.springframework/spring-aop/${spring-version}</bundle>
- <bundle>mvn:org.springframework/spring-context/${spring-version}</bundle>
- <bundle>mvn:org.springframework/spring-context-support/${spring-version}</bundle>
- <bundle>mvn:org.springframework/spring-asm/${spring-version}</bundle>
- <bundle>mvn:org.springframework/spring-expression/${spring-version}</bundle>
- </feature>
-
- <feature name="spring-dm" version="1.2.1">
- <feature version="${spring-version}">spring</feature>
- <bundle>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.cglib/2.1_3_4</bundle>
- <bundle>mvn:org.springframework.osgi/spring-osgi-io/1.2.0</bundle>
- <bundle>mvn:org.springframework.osgi/spring-osgi-core/1.2.0</bundle>
- <bundle>mvn:org.springframework.osgi/spring-osgi-extender/1.2.0</bundle>
- <bundle>mvn:org.springframework.osgi/spring-osgi-annotation/1.2.0</bundle>
- <bundle>mvn:org.apache.felix.karaf.deployer/org.apache.felix.karaf.deployer.spring/1.7.0-SNAPSHOT</bundle>
- </feature>
+ <!-- TODO: uncomment when we upgrade to karaf 2.0 -->
+ <!-- <repository>mvn:org.apache.felix.karaf/apache-felix-karaf/${karaf-version}/xml/features</repository> -->
<feature name="activemq" version="${activemq-version}">
<bundle>mvn:org.apache.geronimo.specs/geronimo-annotation_1.0_spec/1.1.1</bundle>
@@ -35,13 +15,13 @@
<bundle>mvn:org.apache.activemq/activemq-core/${activemq-version}</bundle>
<bundle>mvn:org.apache.activemq/kahadb/${activemq-version}</bundle>
<bundle>mvn:org.apache.activemq/activemq-console/${activemq-version}</bundle>
- <bundle>mvn:org.apache.activemq/activemq-pool/${activemq-version}</bundle>
- <bundle>mvn:org.apache.servicemix.activemq/org.apache.servicemix.activemq.commands/4.2.0</bundle>
+ <bundle>mvn:org.apache.activemq/activemq-pool/${activemq-version}</bundle>
+ <bundle>mvn:org.apache.activemq/activemq-karaf/${activemq-version}</bundle>
<bundle>mvn:org.apache.aries.transaction/org.apache.aries.transaction.manager/0.1-incubating</bundle>
</feature>
<feature name="activemq-spring" version="${activemq-version}">
- <feature version="1.2.1">spring-dm</feature>
+ <feature version="1.2.0">spring-dm</feature>
<feature version="${activemq-version}">activemq</feature>
<bundle>mvn:org.apache.xbean/xbean-spring/${xbean-version}</bundle>
</feature>
Added: activemq/trunk/activemq-karaf/src/main/resources/org/apache/activemq/karaf/commands/AdministrationCommand.properties
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-karaf/src/main/resources/org/apache/activemq/karaf/commands/AdministrationCommand.properties?rev=961712&view=auto
==============================================================================
--- activemq/trunk/activemq-karaf/src/main/resources/org/apache/activemq/karaf/commands/AdministrationCommand.properties (added)
+++ activemq/trunk/activemq-karaf/src/main/resources/org/apache/activemq/karaf/commands/AdministrationCommand.properties Thu Jul 8 11:11:22 2010
@@ -0,0 +1,27 @@
+##
+## 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.
+##
+
+##
+## $Rev: 703511 $ $Date: 2008-10-10 18:07:36 +0200 (Fri, 10 Oct 2008) $
+##
+
+command.description=Parent ActiveMQ administration command.
+
+command.manual=\
+ TODO: date manual
Added: activemq/trunk/activemq-karaf/src/main/resources/org/apache/activemq/karaf/commands/CreateBrokerCommand.properties
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-karaf/src/main/resources/org/apache/activemq/karaf/commands/CreateBrokerCommand.properties?rev=961712&view=auto
==============================================================================
--- activemq/trunk/activemq-karaf/src/main/resources/org/apache/activemq/karaf/commands/CreateBrokerCommand.properties (added)
+++ activemq/trunk/activemq-karaf/src/main/resources/org/apache/activemq/karaf/commands/CreateBrokerCommand.properties Thu Jul 8 11:11:22 2010
@@ -0,0 +1,27 @@
+##
+## 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.
+##
+
+##
+## $Rev: 703511 $ $Date: 2008-10-10 18:07:36 +0200 (Fri, 10 Oct 2008) $
+##
+
+command.description=Creates a broker instance.
+
+command.manual=\
+ TODO: date manual
Added: activemq/trunk/activemq-karaf/src/main/resources/org/apache/activemq/karaf/commands/DestroyBrokerCommand.properties
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-karaf/src/main/resources/org/apache/activemq/karaf/commands/DestroyBrokerCommand.properties?rev=961712&view=auto
==============================================================================
--- activemq/trunk/activemq-karaf/src/main/resources/org/apache/activemq/karaf/commands/DestroyBrokerCommand.properties (added)
+++ activemq/trunk/activemq-karaf/src/main/resources/org/apache/activemq/karaf/commands/DestroyBrokerCommand.properties Thu Jul 8 11:11:22 2010
@@ -0,0 +1,27 @@
+##
+## 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.
+##
+
+##
+## $Rev: 703511 $ $Date: 2008-10-10 18:07:36 +0200 (Fri, 10 Oct 2008) $
+##
+
+command.description=Remove a broker instance.
+
+command.manual=\
+ TODO: date manual
Added: activemq/trunk/activemq-karaf/src/main/resources/org/apache/activemq/karaf/commands/broker.xml
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-karaf/src/main/resources/org/apache/activemq/karaf/commands/broker.xml?rev=961712&view=auto
==============================================================================
--- activemq/trunk/activemq-karaf/src/main/resources/org/apache/activemq/karaf/commands/broker.xml (added)
+++ activemq/trunk/activemq-karaf/src/main/resources/org/apache/activemq/karaf/commands/broker.xml Thu Jul 8 11:11:22 2010
@@ -0,0 +1,137 @@
+<!--
+ 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.
+-->
+<beans
+ xmlns="http://www.springframework.org/schema/beans"
+ xmlns:amq="http://activemq.apache.org/schema/core"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:osgi="http://www.springframework.org/schema/osgi"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
+ http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd
+ http://activemq.apache.org/camel/schema/spring http://activemq.apache.org/camel/schema/spring/camel-spring.xsd
+ http://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi.xsd">
+
+ <!-- Allows us to use system properties as variables in this configuration file -->
+ <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"/>
+
+ <broker xmlns="http://activemq.apache.org/schema/core" brokerName="${name}" dataDirectory="${karaf.base}/data/activemq/${name}" useShutdownHook="false">
+
+ <!-- Destination specific policies using destination names or wildcards -->
+ <destinationPolicy>
+ <policyMap>
+
+ <policyEntries>
+ <policyEntry queue=">" memoryLimit="5mb"/>
+ <policyEntry topic=">" memoryLimit="5mb">
+ <subscriptionRecoveryPolicy>
+ <lastImageSubscriptionRecoveryPolicy/>
+ </subscriptionRecoveryPolicy>
+ </policyEntry>
+ </policyEntries>
+ </policyMap>
+
+ </destinationPolicy>
+
+ <!-- Use the following to configure how ActiveMQ is exposed in JMX -->
+ <managementContext>
+ <managementContext createConnector="false"/>
+ </managementContext>
+
+ <!-- The store and forward broker networks ActiveMQ will listen to -->
+ <networkConnectors>
+ <!-- by default just auto discover the other brokers -->
+
+ <networkConnector name="default-nc" uri="multicast://default"/>
+ <!-- Example of a static configuration:
+ <networkConnector name="host1 and host2" uri="static://(tcp://host1:61616,tcp://host2:61616)"/>
+ -->
+ </networkConnectors>
+
+ <persistenceAdapter>
+ <amqPersistenceAdapter syncOnWrite="false" directory="${karaf.base}/data/activemq/${name}" maxFileLength="20 mb"/>
+ </persistenceAdapter>
+
+ <!-- Use the following if you wish to configure the journal with JDBC -->
+ <!--
+ <persistenceAdapter>
+ <journaledJDBC dataDirectory="${activemq.base}/data" dataSource="#postgres-ds"/>
+ </persistenceAdapter>
+ -->
+
+ <!-- Or if you want to use pure JDBC without a journal -->
+ <!--
+ <persistenceAdapter>
+ <jdbcPersistenceAdapter dataSource="#postgres-ds"/>
+ </persistenceAdapter>
+ -->
+
+ <!-- The maximum about of space the broker will use before slowing down producers -->
+ <systemUsage>
+ <systemUsage>
+ <memoryUsage>
+ <memoryUsage limit="20 mb"/>
+ </memoryUsage>
+
+ <storeUsage>
+ <storeUsage limit="1 gb" name="foo"/>
+ </storeUsage>
+ <tempUsage>
+ <tempUsage limit="100 mb"/>
+ </tempUsage>
+ </systemUsage>
+ </systemUsage>
+
+ <!-- The transport connectors ActiveMQ will listen to -->
+ <transportConnectors>
+ <transportConnector name="openwire" uri="tcp://localhost:61616" discoveryUri="multicast://default"/>
+ <transportConnector name="stomp" uri="stomp://localhost:61613"/>
+ </transportConnectors>
+
+ </broker>
+
+ <bean id="activemqConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
+
+ <property name="brokerURL" value="tcp://localhost:61616" />
+ </bean>
+
+ <bean id="pooledConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactoryBean">
+ <property name="maxConnections" value="8" />
+ <property name="transactionManager" ref="transactionManager" />
+ <property name="connectionFactory" ref="activemqConnectionFactory" />
+ <property name="resourceName" value="activemq.${name}" />
+ </bean>
+
+ <bean id="resourceManager" class="org.apache.activemq.pool.ActiveMQResourceManager" init-method="recoverResource">
+ <property name="transactionManager" ref="transactionManager" />
+ <property name="connectionFactory" ref="activemqConnectionFactory" />
+ <property name="resourceName" value="activemq.${name}" />
+ </bean>
+
+ <osgi:reference id="transactionManager" interface="javax.transaction.TransactionManager" />
+
+ <osgi:service ref="pooledConnectionFactory">
+
+ <osgi:interfaces>
+ <value>javax.jms.ConnectionFactory</value>
+ </osgi:interfaces>
+ <osgi:service-properties>
+ <entry key="name" value="${name}"/>
+ </osgi:service-properties>
+ </osgi:service>
+
+</beans>
+
+
Modified: activemq/trunk/pom.xml
URL: http://svn.apache.org/viewvc/activemq/trunk/pom.xml?rev=961712&r1=961711&r2=961712&view=diff
==============================================================================
--- activemq/trunk/pom.xml (original)
+++ activemq/trunk/pom.xml Thu Jul 8 11:11:22 2010
@@ -67,6 +67,7 @@
<jmock-version>2.5.1</jmock-version>
<junit-version>4.5</junit-version>
<jxta-version>2.0</jxta-version>
+ <karaf-version>1.99.0-SNAPSHOT</karaf-version>
<log4j-version>1.2.14</log4j-version>
<nlog4j-version>1.5.2</nlog4j-version>
<org-apache-derby-version>10.1.3.1</org-apache-derby-version>