diff --git a/activemq-karaf/pom.xml b/activemq-karaf/pom.xml index d217fca885..d2ad9987ef 100644 --- a/activemq-karaf/pom.xml +++ b/activemq-karaf/pom.xml @@ -26,10 +26,44 @@ activemq-karaf - jar + bundle ActiveMQ :: Apache Karaf Provides resources for running ActiveMQ in Apache Karaf + + + org.apache.karaf.shell + org.apache.karaf.shell.console + ${karaf-version} + + + org.osgi + org.osgi.core + provided + + + + org.apache.activemq + activemq-core + + + + org.apache.activemq + activemq-optional + + + + org.apache.activemq + activemq-console + + + + org.apache.activemq + activemq-pool + + + + @@ -73,6 +107,22 @@ + + org.apache.felix + maven-bundle-plugin + + + ${project.artifactId} + org.apache.activemq.karaf.commands;version=${project.version};-split-package:=merge-first + + org.apache.felix.gogo.commands, + * + + !* + <_versionpolicy>[$(version;==;$(@)),$(version;+;$(@))) + + + diff --git a/activemq-karaf/src/main/java/org/apache/activemq/karaf/commands/ActiveMQCommand.java b/activemq-karaf/src/main/java/org/apache/activemq/karaf/commands/ActiveMQCommand.java new file mode 100644 index 0000000000..3dd9bc6914 --- /dev/null +++ b/activemq-karaf/src/main/java/org/apache/activemq/karaf/commands/ActiveMQCommand.java @@ -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 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 getCompleters() { + return completers; + } + + public void setCompleters(List 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 params) throws Exception + { + Map arguments = new HashMap(); + List orderedArguments = new ArrayList(); + // 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 argumentValues = new HashMap(); + int argIndex = 0; + for (Iterator 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 l = (List) argumentValues.get(argument); + if (l == null) { + l = new ArrayList(); + argumentValues.put(argument, l); + } + l.add(param); + } else { + argumentValues.put(argument, param); + } + } + + for (Map.Entry 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; + } + +} diff --git a/activemq-karaf/src/main/java/org/apache/activemq/karaf/commands/ActiveMQCommandSupport.java b/activemq-karaf/src/main/java/org/apache/activemq/karaf/commands/ActiveMQCommandSupport.java new file mode 100644 index 0000000000..d23e00e4de --- /dev/null +++ b/activemq-karaf/src/main/java/org/apache/activemq/karaf/commands/ActiveMQCommandSupport.java @@ -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 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(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; + } +} diff --git a/activemq-karaf/src/main/java/org/apache/activemq/karaf/commands/CreateBrokerCommand.java b/activemq-karaf/src/main/java/org/apache/activemq/karaf/commands/CreateBrokerCommand.java new file mode 100644 index 0000000000..c5a752ee53 --- /dev/null +++ b/activemq-karaf/src/main/java/org/apache/activemq/karaf/commands/CreateBrokerCommand.java @@ -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 props = new HashMap(); + 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 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 props) { + for (Map.Entry 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; + } + +} diff --git a/activemq-karaf/src/main/java/org/apache/activemq/karaf/commands/DestroyBrokerCommand.java b/activemq-karaf/src/main/java/org/apache/activemq/karaf/commands/DestroyBrokerCommand.java new file mode 100644 index 0000000000..65195a55b6 --- /dev/null +++ b/activemq-karaf/src/main/java/org/apache/activemq/karaf/commands/DestroyBrokerCommand.java @@ -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; + } +} diff --git a/activemq-karaf/src/main/resources/OSGI-INF/blueprint/activemq-karaf.xml b/activemq-karaf/src/main/resources/OSGI-INF/blueprint/activemq-karaf.xml new file mode 100644 index 0000000000..6b40378f2a --- /dev/null +++ b/activemq-karaf/src/main/resources/OSGI-INF/blueprint/activemq-karaf.xml @@ -0,0 +1,165 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + org.osgi.service.command.Function + org.apache.karaf.shell.console.CompletableFunction + + + + + + + + + + + + + + + + + + + + + + + org.osgi.service.command.Function + org.apache.karaf.shell.console.CompletableFunction + + + + + + + + + + + + + + + + + + + + + + + org.osgi.service.command.Function + org.apache.karaf.shell.console.CompletableFunction + + + + + + + + + + + + + + + + + + + + + + + org.osgi.service.command.Function + org.apache.karaf.shell.console.CompletableFunction + + + + + + + + + + + + + + + + + + + + + + + org.osgi.service.command.Function + org.apache.karaf.shell.console.CompletableFunction + + + + + + + + + + + + + + diff --git a/activemq-karaf/src/main/resources/features.xml b/activemq-karaf/src/main/resources/features.xml index 170f9b42cb..d0b411fe07 100644 --- a/activemq-karaf/src/main/resources/features.xml +++ b/activemq-karaf/src/main/resources/features.xml @@ -1,26 +1,6 @@ - mvn:org.apache.felix.karaf/apache-felix-karaf/1.6.0/xml/features - - - mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.aopalliance/1.0_3 - mvn:org.springframework/spring-core/${spring-version} - mvn:org.springframework/spring-beans/${spring-version} - mvn:org.springframework/spring-aop/${spring-version} - mvn:org.springframework/spring-context/${spring-version} - mvn:org.springframework/spring-context-support/${spring-version} - mvn:org.springframework/spring-asm/${spring-version} - mvn:org.springframework/spring-expression/${spring-version} - - - - spring - mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.cglib/2.1_3_4 - mvn:org.springframework.osgi/spring-osgi-io/1.2.0 - mvn:org.springframework.osgi/spring-osgi-core/1.2.0 - mvn:org.springframework.osgi/spring-osgi-extender/1.2.0 - mvn:org.springframework.osgi/spring-osgi-annotation/1.2.0 - mvn:org.apache.felix.karaf.deployer/org.apache.felix.karaf.deployer.spring/1.7.0-SNAPSHOT - + + mvn:org.apache.geronimo.specs/geronimo-annotation_1.0_spec/1.1.1 @@ -35,13 +15,13 @@ mvn:org.apache.activemq/activemq-core/${activemq-version} mvn:org.apache.activemq/kahadb/${activemq-version} mvn:org.apache.activemq/activemq-console/${activemq-version} - mvn:org.apache.activemq/activemq-pool/${activemq-version} - mvn:org.apache.servicemix.activemq/org.apache.servicemix.activemq.commands/4.2.0 + mvn:org.apache.activemq/activemq-pool/${activemq-version} + mvn:org.apache.activemq/activemq-karaf/${activemq-version} mvn:org.apache.aries.transaction/org.apache.aries.transaction.manager/0.1-incubating - spring-dm + spring-dm activemq mvn:org.apache.xbean/xbean-spring/${xbean-version} diff --git a/activemq-karaf/src/main/resources/org/apache/activemq/karaf/commands/AdministrationCommand.properties b/activemq-karaf/src/main/resources/org/apache/activemq/karaf/commands/AdministrationCommand.properties new file mode 100644 index 0000000000..97bae95886 --- /dev/null +++ b/activemq-karaf/src/main/resources/org/apache/activemq/karaf/commands/AdministrationCommand.properties @@ -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 diff --git a/activemq-karaf/src/main/resources/org/apache/activemq/karaf/commands/CreateBrokerCommand.properties b/activemq-karaf/src/main/resources/org/apache/activemq/karaf/commands/CreateBrokerCommand.properties new file mode 100644 index 0000000000..c4c84368dd --- /dev/null +++ b/activemq-karaf/src/main/resources/org/apache/activemq/karaf/commands/CreateBrokerCommand.properties @@ -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 diff --git a/activemq-karaf/src/main/resources/org/apache/activemq/karaf/commands/DestroyBrokerCommand.properties b/activemq-karaf/src/main/resources/org/apache/activemq/karaf/commands/DestroyBrokerCommand.properties new file mode 100644 index 0000000000..3efb2208e2 --- /dev/null +++ b/activemq-karaf/src/main/resources/org/apache/activemq/karaf/commands/DestroyBrokerCommand.properties @@ -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 diff --git a/activemq-karaf/src/main/resources/org/apache/activemq/karaf/commands/broker.xml b/activemq-karaf/src/main/resources/org/apache/activemq/karaf/commands/broker.xml new file mode 100644 index 0000000000..301a526e61 --- /dev/null +++ b/activemq-karaf/src/main/resources/org/apache/activemq/karaf/commands/broker.xml @@ -0,0 +1,137 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + javax.jms.ConnectionFactory + + + + + + + + + diff --git a/pom.xml b/pom.xml index a3ccd49082..ddc45cc24c 100755 --- a/pom.xml +++ b/pom.xml @@ -67,6 +67,7 @@ 2.5.1 4.5 2.0 + 1.99.0-SNAPSHOT 1.2.14 1.5.2 10.1.3.1