You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by dj...@apache.org on 2011/04/27 01:20:37 UTC
svn commit: r1096957 - in /geronimo/server/trunk: ./
framework/buildsupport/car-maven-plugin/src/main/resources/META-INF/plexus/
framework/configs/j2ee-security/ framework/configs/plugin/
framework/configs/server-security-config/ framework/features/cli...
Author: djencks
Date: Tue Apr 26 23:20:36 2011
New Revision: 1096957
URL: http://svn.apache.org/viewvc?rev=1096957&view=rev
Log:
Add a ConfigurationInstaller to install plugin xml substituttions and xml overrirdes. LocalAttributeManager stores data using config admin. Server now starts OK
Added:
geronimo/server/trunk/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/configuration/ConfigurationInstaller.java (with props)
Removed:
geronimo/server/trunk/framework/features/client-system/src/main/history/dependencies.xml
geronimo/server/trunk/framework/features/geronimo-gbean-deployer/src/main/history/dependencies.xml
geronimo/server/trunk/framework/features/j2ee-security/src/main/history/dependencies.xml
geronimo/server/trunk/framework/features/jmx-security/src/main/history/dependencies.xml
geronimo/server/trunk/framework/features/jsr88-cli/src/main/history/dependencies.xml
geronimo/server/trunk/framework/features/jsr88-deploymentfactory/src/main/history/dependencies.xml
geronimo/server/trunk/framework/features/offline-deployer/src/main/history/dependencies.xml
geronimo/server/trunk/framework/features/online-deployer/src/main/history/dependencies.xml
geronimo/server/trunk/framework/features/plugin/src/main/history/dependencies.xml
geronimo/server/trunk/framework/features/rmi-naming/src/main/history/dependencies.xml
geronimo/server/trunk/framework/features/shutdown/src/main/history/dependencies.xml
Modified:
geronimo/server/trunk/framework/buildsupport/car-maven-plugin/src/main/resources/META-INF/plexus/components.xml
geronimo/server/trunk/framework/configs/j2ee-security/pom.xml
geronimo/server/trunk/framework/configs/plugin/pom.xml
geronimo/server/trunk/framework/configs/server-security-config/pom.xml
geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/ConfigurationExtender.java
geronimo/server/trunk/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/configuration/LocalAttributeManager.java
geronimo/server/trunk/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/configuration/PluginAttributeStore.java
geronimo/server/trunk/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/configuration/WrapperAttributeManager.java
geronimo/server/trunk/framework/modules/geronimo-system/src/test/java/org/apache/geronimo/system/configuration/LocalAttributeManagerTest.java
geronimo/server/trunk/pom.xml
Modified: geronimo/server/trunk/framework/buildsupport/car-maven-plugin/src/main/resources/META-INF/plexus/components.xml
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/buildsupport/car-maven-plugin/src/main/resources/META-INF/plexus/components.xml?rev=1096957&r1=1096956&r2=1096957&view=diff
==============================================================================
--- geronimo/server/trunk/framework/buildsupport/car-maven-plugin/src/main/resources/META-INF/plexus/components.xml (original)
+++ geronimo/server/trunk/framework/buildsupport/car-maven-plugin/src/main/resources/META-INF/plexus/components.xml Tue Apr 26 23:20:36 2011
@@ -45,7 +45,8 @@
</process-resources>
<compile>
org.apache.geronimo.buildsupport:car-maven-plugin:validate-configuration,
- org.apache.geronimo.buildsupport:car-maven-plugin:prepare-plan
+ org.apache.geronimo.buildsupport:car-maven-plugin:prepare-plan,
+ org.apache.geronimo.buildsupport:car-maven-plugin:prepare-metadata
</compile>
<package>
org.apache.geronimo.buildsupport:car-maven-plugin:compile-gbean-plan,
Modified: geronimo/server/trunk/framework/configs/j2ee-security/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/configs/j2ee-security/pom.xml?rev=1096957&r1=1096956&r2=1096957&view=diff
==============================================================================
--- geronimo/server/trunk/framework/configs/j2ee-security/pom.xml (original)
+++ geronimo/server/trunk/framework/configs/j2ee-security/pom.xml Tue Apr 26 23:20:36 2011
@@ -115,17 +115,17 @@
<configuration>
<category>Security</category>
<instance>
- <plugin-artifact>
- <config-xml-content>
- <gbean name="JMXService">
- <attribute name="protocol">rmi</attribute>
- <attribute name="host">#{ServerHostname}</attribute>
- <attribute name="port">#{JMXPort + PortOffset}</attribute>
- <attribute name="urlPath">/jndi/rmi://#{ServerHostname}:#{NamingPort + PortOffset}/JMXConnector</attribute>
- </gbean>
- </config-xml-content>
- <config-substitution key="JMXPort">9999</config-substitution>
- </plugin-artifact>
+ <!--<plugin-artifact>-->
+ <!--<config-xml-content>-->
+ <!--<gbean name="JMXService">-->
+ <!--<attribute name="protocol">rmi</attribute>-->
+ <!--<attribute name="host">#{ServerHostname}</attribute>-->
+ <!--<attribute name="port">#{JMXPort + PortOffset}</attribute>-->
+ <!--<attribute name="urlPath">/jndi/rmi://#{ServerHostname}:#{NamingPort + PortOffset}/JMXConnector</attribute>-->
+ <!--</gbean>-->
+ <!--</config-xml-content>-->
+ <!--<config-substitution key="JMXPort">9999</config-substitution>-->
+ <!--</plugin-artifact>-->
</instance>
</configuration>
</plugin>
Modified: geronimo/server/trunk/framework/configs/plugin/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/configs/plugin/pom.xml?rev=1096957&r1=1096956&r2=1096957&view=diff
==============================================================================
--- geronimo/server/trunk/framework/configs/plugin/pom.xml (original)
+++ geronimo/server/trunk/framework/configs/plugin/pom.xml Tue Apr 26 23:20:36 2011
@@ -117,17 +117,17 @@
<deployerName>org.apache.geronimo.framework/geronimo-gbean-deployer-bootstrap/${geronimoVersion}/car?j2eeType=Deployer,name=Deployer</deployerName>
<category>Geronimo Core</category>
<instance>
- <plugin-artifact>
- <config-xml-content>
- <gbean name="DownloadedPluginRepos">
- <attribute name="repositoryList">http://geronimo.apache.org/plugins/plugin-repository-list-3.0.txt</attribute>
- </gbean>
- </config-xml-content>
- <!--<artifact-alias key="org.apache.geronimo.framework/jsr88-cli//car">org.apache.geronimo.framework/plugin/${project.version}/car</artifact-alias>-->
- <!--<artifact-alias key="org.apache.geronimo.framework/jsr88-cli/${project.version}/car">org.apache.geronimo.framework/plugin/${project.version}/car</artifact-alias>-->
- <copy-file dest-dir="schema">schema/xsd/</copy-file>
- <copy-file dest-dir="var/config" relative-to="server">plugin-repositories.properties</copy-file>
- </plugin-artifact>
+ <!--<plugin-artifact>-->
+ <!--<config-xml-content>-->
+ <!--<gbean name="DownloadedPluginRepos">-->
+ <!--<attribute name="repositoryList">http://geronimo.apache.org/plugins/plugin-repository-list-3.0.txt</attribute>-->
+ <!--</gbean>-->
+ <!--</config-xml-content>-->
+ <!--<!–<artifact-alias key="org.apache.geronimo.framework/jsr88-cli//car">org.apache.geronimo.framework/plugin/${project.version}/car</artifact-alias>–>-->
+ <!--<!–<artifact-alias key="org.apache.geronimo.framework/jsr88-cli/${project.version}/car">org.apache.geronimo.framework/plugin/${project.version}/car</artifact-alias>–>-->
+ <!--<copy-file dest-dir="schema">schema/xsd/</copy-file>-->
+ <!--<copy-file dest-dir="var/config" relative-to="server">plugin-repositories.properties</copy-file>-->
+ <!--</plugin-artifact>-->
</instance>
</configuration>
</plugin>
Modified: geronimo/server/trunk/framework/configs/server-security-config/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/configs/server-security-config/pom.xml?rev=1096957&r1=1096956&r2=1096957&view=diff
==============================================================================
--- geronimo/server/trunk/framework/configs/server-security-config/pom.xml (original)
+++ geronimo/server/trunk/framework/configs/server-security-config/pom.xml Tue Apr 26 23:20:36 2011
@@ -86,9 +86,9 @@
<configuration>
<category>Security</category>
<instance>
- <plugin-artifact>
- <copy-file relative-to="server" dest-dir="var/security">security/</copy-file>
- </plugin-artifact>
+ <!--<plugin-artifact>-->
+ <!--<copy-file relative-to="server" dest-dir="var/security">security/</copy-file>-->
+ <!--</plugin-artifact>-->
</instance>
</configuration>
</plugin>
Modified: geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/ConfigurationExtender.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/ConfigurationExtender.java?rev=1096957&r1=1096956&r2=1096957&view=diff
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/ConfigurationExtender.java (original)
+++ geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/ConfigurationExtender.java Tue Apr 26 23:20:36 2011
@@ -31,6 +31,7 @@ import org.apache.felix.scr.annotations.
import org.apache.felix.scr.annotations.Deactivate;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.ReferenceCardinality;
+import org.apache.felix.scr.annotations.ReferencePolicy;
import org.apache.geronimo.kernel.Kernel;
import org.apache.geronimo.kernel.util.IOUtils;
import org.osgi.framework.Bundle;
@@ -56,7 +57,7 @@ public class ConfigurationExtender {
private BundleTracker bt;
- @Reference(cardinality = ReferenceCardinality.OPTIONAL_UNARY)
+ @Reference(cardinality = ReferenceCardinality.OPTIONAL_UNARY, policy = ReferencePolicy.DYNAMIC)
private ManageableAttributeStore manageableAttributeStore;
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
@@ -98,6 +99,11 @@ public class ConfigurationExtender {
private class ConfigurationBundleTrackerCustomizer implements BundleTrackerCustomizer {
@Override
public Object addingBundle(Bundle bundle, BundleEvent bundleEvent) {
+ if (bundleEvent != null) {
+ if (bundleEvent.getType() == BundleEvent.STOPPED) {
+ return null;
+ }
+ }
if (bundle.getState() == Bundle.RESOLVED) {
return loadConfiguration(bundle);
} else if (bundle.getState() == Bundle.ACTIVE) {
@@ -120,44 +126,7 @@ public class ConfigurationExtender {
}
}
-
-// protected Configuration loadConfiguration(Bundle bundle) {
-// PluginArtifactType pluginArtifact = dependencyManager.getCachedPluginMetadata(bundle);
-// if (pluginArtifact == null) {
-// if (BundleUtils.isResolved(bundle)) {
-// loadedBundleIds.add(bundle.getBundleId());
-// }
-// return;
-// }
-// Set<Long> dependentBundleIds = new HashSet<Long>();
-// for (DependencyType dependency : pluginArtifact.getDependency()) {
-// Long dependentBundleId = dependencyManager.getBundle(dependency.toArtifact()).getBundleId();
-// if (!loadedBundleIds.contains(dependentBundleId)) {
-// dependentBundleIds.add(dependentBundleId);
-// }
-// }
-// if (dependentBundleIds.size() > 0) {
-// bundleIdListenerMap.put(bundle.getBundleId(), new BundleListener(bundle, dependentBundleIds));
-// return;
-// }
-// _loadConfiguration(bundle);
-// loadedBundleIds.add(bundle.getBundleId());
-//
-// boolean bundleStatusChanged;
-// do {
-// bundleStatusChanged = false;
-// for (Iterator<Map.Entry<Long, BundleListener>> it = bundleIdListenerMap.entrySet().iterator(); it.hasNext();) {
-// Map.Entry<Long, BundleListener> entry = it.next();
-// if (entry.getValue().bundleChanged(bundle)) {
-// bundleStatusChanged = true;
-// it.remove();
-// }
-// }
-// } while (bundleStatusChanged);
-// }
-
private LoadConfiguration loadConfiguration(Bundle bundle) {
-// loadedBundleIds.add(bundle.getBundleId());
URL configSerURL = bundle.getEntry("META-INF/config.ser");
if (configSerURL == null) {
return null;
@@ -166,35 +135,6 @@ public class ConfigurationExtender {
executor.execute(loader);
configurationMap.put(bundle.getBundleId(), loader);
return loader;
-//
-// InputStream in = null;
-// try {
-// in = configSerURL.openStream();
-// //TODO there are additional consistency checks in RepositoryConfigurationStore that we should use.
-// ConfigurationData data = ConfigurationUtil.readConfigurationData(in);
-// data.setBundle(bundle);
-// Configuration configuration = new Configuration(data, manageableAttributeStore);
-// configurationMap.put(bundle.getBundleId(), configuration);
-// ConfigurationUtil.loadConfigurationGBeans(configuration, kernel);
-//// for (GBeanData gBeanData: configuration.getGBeans().values()) {
-//// kernel.loadGBean(gBeanData, configuration.getBundle());
-//// }
-// return configuration;
-//
-//// configurationManager.loadConfiguration(data);
-//// bundleIdArtifactMap.put(bundle.getBundleId(), data.getId());
-// } catch (IOException e) {
-// logger.error("Could not read the config.ser file from bundle " + bundle.getLocation(), e);
-// } catch (ClassNotFoundException e) {
-// logger.error("Could not load required classes from bundle " + bundle.getLocation(), e);
-// } catch (InvalidConfigException e) {
-// logger.error("Could not load Configuration from bundle " + bundle.getLocation(), e);
-//// } catch (GBeanAlreadyExistsException e) {
-//// logger.error("Duplicate gbean in bundle " + bundle.getLocation(), e);
-// } finally {
-// IOUtils.close(in);
-// }
-// return null;
}
private StartConfiguration startConfiguration(Bundle bundle) {
@@ -216,45 +156,6 @@ public class ConfigurationExtender {
executor.execute(stopConfiguration);
configurationMap.put(bundle.getBundleId(), stopConfiguration);
}
-// Artifact id = getArtifact(bundle);
-// if (id == null) {
-// return;
-// }
-// ServiceReference kernelReference = null;
-// try {
-// kernelReference = bundleContext.getServiceReference(Kernel.class.getName());
-// if (kernelReference == null) {
-// return;
-// }
-// Kernel kernel = (Kernel) bundleContext.getService(kernelReference);
-// AbstractName name = Configuration.getConfigurationAbstractName(id);
-// //TODO investigate how this is called and whether just stopping/unloading the configuration gbean will
-// //leave the configuration model in a consistent state. We might need a shutdown flag set elsewhere to avoid
-// //overwriting the load attribute in config.xml. This code mimics the shutdown hook in KernelConfigurationManager
-// //see https://issues.apache.org/jira/browse/GERONIMO-4909
-// try {
-// kernel.stopGBean(name);
-// } catch (Exception e) {
-// //ignore
-// }
-// try {
-// kernel.unloadGBean(name);
-// } catch (Exception e) {
-// }
-// //TODO this code is more symmetrical with start, but currently sets the load attribute to false in config.xml,
-// //which prevents restarting the server.
-// //ConfigurationManager manager = ConfigurationUtil.getConfigurationManager(kernel);
-// //manager.unloadConfiguration(id);
-// } catch (InvalidConfigException e) {
-// //
-// } finally {
-// if (kernelReference != null) {
-// try {
-// bundleContext.ungetService(kernelReference);
-// } catch (Exception e) {
-// }
-// }
-// }
}
private void unloadConfiguration(Bundle bundle, GetConfiguration configuration) {
@@ -296,21 +197,13 @@ public class ConfigurationExtender {
data.setBundle(bundle);
Configuration configuration = new Configuration(data, manageableAttributeStore);
ConfigurationUtil.loadConfigurationGBeans(configuration, kernel);
-// for (GBeanData gBeanData: configuration.getGBeans().values()) {
-// kernel.loadGBean(gBeanData, configuration.getBundle());
-// }
this.configuration = configuration;
-
-// configurationManager.loadConfiguration(data);
-// bundleIdArtifactMap.put(bundle.getBundleId(), data.getId());
} catch (IOException e) {
logger.error("Could not read the config.ser file from bundle " + bundle.getLocation(), e);
} catch (ClassNotFoundException e) {
logger.error("Could not load required classes from bundle " + bundle.getLocation(), e);
} catch (InvalidConfigException e) {
logger.error("Could not load Configuration from bundle " + bundle.getLocation(), e);
-// } catch (GBeanAlreadyExistsException e) {
-// logger.error("Duplicate gbean in bundle " + bundle.getLocation(), e);
} finally {
IOUtils.close(in);
}
Added: geronimo/server/trunk/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/configuration/ConfigurationInstaller.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/configuration/ConfigurationInstaller.java?rev=1096957&view=auto
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/configuration/ConfigurationInstaller.java (added)
+++ geronimo/server/trunk/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/configuration/ConfigurationInstaller.java Tue Apr 26 23:20:36 2011
@@ -0,0 +1,176 @@
+/*
+ * 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.geronimo.system.configuration;
+
+import java.io.InputStream;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.Executor;
+import java.util.concurrent.Executors;
+import java.util.concurrent.RejectedExecutionException;
+
+import org.apache.felix.scr.annotations.Activate;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Deactivate;
+import org.apache.felix.scr.annotations.Reference;
+import org.apache.felix.scr.annotations.ReferenceCardinality;
+import org.apache.geronimo.kernel.repository.Artifact;
+import org.apache.geronimo.system.plugin.model.ArtifactType;
+import org.apache.geronimo.system.plugin.model.ConfigXmlContentType;
+import org.apache.geronimo.system.plugin.model.PluginArtifactType;
+import org.apache.geronimo.system.plugin.model.PluginType;
+import org.apache.geronimo.system.plugin.model.PluginXmlUtil;
+import org.apache.geronimo.system.plugin.model.PropertyType;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.BundleEvent;
+import org.osgi.util.tracker.BundleTracker;
+import org.osgi.util.tracker.BundleTrackerCustomizer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @version $Rev:$ $Date:$
+ */
+@Component(metatype = true)
+public class ConfigurationInstaller {
+ private static final Logger logger = LoggerFactory.getLogger(ConfigurationInstaller.class);
+
+ private final Executor executor = Executors.newCachedThreadPool();
+
+ private BundleTracker bt;
+
+ @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+ private PluginAttributeStore pluginAttributeStore;
+
+ public void setPluginAttributeStore(PluginAttributeStore pluginAttributeStore) {
+ this.pluginAttributeStore = pluginAttributeStore;
+ }
+
+ public void unsetPluginAttributeStore(PluginAttributeStore pluginAttributeStore) {
+ if (pluginAttributeStore == this.pluginAttributeStore) {
+ this.pluginAttributeStore = null;
+ }
+ }
+
+ @Activate
+ public void start(BundleContext bundleContext) {
+ bt = new BundleTracker(bundleContext, Bundle.INSTALLED, new ConfigurationBundleTrackerCustomizer());
+ bt.open();
+
+ }
+
+ @Deactivate
+ public void stop() {
+ bt.close();
+ bt = null;
+ }
+
+ private class ConfigurationBundleTrackerCustomizer implements BundleTrackerCustomizer {
+
+ @Override
+ public Object addingBundle(Bundle bundle, BundleEvent bundleEvent) {
+ installConfiguration(bundle);
+ return null;
+ }
+
+ @Override
+ public void modifiedBundle(Bundle bundle, BundleEvent bundleEvent, Object o) {
+ }
+
+ @Override
+ public void removedBundle(Bundle bundle, BundleEvent bundleEvent, Object o) {
+ }
+ }
+
+ private void installConfiguration(Bundle bundle) {
+ URL configSerURL = bundle.getEntry("META-INF/geronimo-plugin.xml");
+ if (configSerURL == null) {
+ return;
+ }
+ Installer loader = new Installer(configSerURL);
+ loader.run();
+// try {
+// executor.execute(loader);
+// } catch (RejectedExecutionException e) {
+// logger.info("could not execute in thread pool", e);
+// loader.run();
+// }
+
+ }
+
+ private class Installer implements Runnable {
+
+ private URL pluginXmlURL;
+
+ public Installer(URL pluginXmlURL) {
+ this.pluginXmlURL = pluginXmlURL;
+
+
+ }
+
+ private boolean equals(String server, String serverName) {
+ return server == null? serverName == null || serverName.isEmpty(): server.equals(serverName);
+ }
+
+ private Artifact toArtifact(ArtifactType moduleId) {
+ String groupId = moduleId.getGroupId();
+ String artifactId = moduleId.getArtifactId();
+ String version = moduleId.getVersion();
+ String type = moduleId.getType();
+ return new Artifact(groupId, artifactId, version, type);
+ }
+
+
+ @Override
+ public void run() {
+ try {
+ InputStream in = pluginXmlURL.openStream();
+ try {
+ PluginType pluginType = PluginXmlUtil.loadPluginMetadata(in);
+ PluginArtifactType pluginArtifactType = pluginType.getPluginArtifact().get(0);
+ List<PropertyType> substitutions = pluginArtifactType.getConfigSubstitution();
+ Map<String, String> subMap = new HashMap<String, String>();
+ for (PropertyType propertyType: substitutions) {
+ if (equals(propertyType.getServer(), pluginAttributeStore.getServerName())) {
+ subMap.put(propertyType.getKey(), propertyType.getValue());
+ }
+ }
+ pluginAttributeStore.addConfigSubstitutions(subMap);
+ List<ConfigXmlContentType> xmls = pluginArtifactType.getConfigXmlContent();
+ for (ConfigXmlContentType xml: xmls) {
+ if (equals(xml.getServer(), pluginAttributeStore.getServerName())) {
+ pluginAttributeStore.setModuleGBeans(toArtifact(pluginArtifactType.getModuleId()), xml.getGbean(), xml.isLoad(), xml.getCondition());
+ }
+ }
+ } finally {
+ in.close();
+ }
+ } catch (Exception e) {
+ logger.info("Could not install plugin xml", e);
+ }
+ }
+ }
+
+
+}
Propchange: geronimo/server/trunk/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/configuration/ConfigurationInstaller.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: geronimo/server/trunk/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/configuration/ConfigurationInstaller.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: geronimo/server/trunk/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/configuration/ConfigurationInstaller.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: geronimo/server/trunk/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/configuration/LocalAttributeManager.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/configuration/LocalAttributeManager.java?rev=1096957&r1=1096956&r2=1096957&view=diff
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/configuration/LocalAttributeManager.java (original)
+++ geronimo/server/trunk/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/configuration/LocalAttributeManager.java Tue Apr 26 23:20:36 2011
@@ -16,13 +16,6 @@
*/
package org.apache.geronimo.system.configuration;
-import java.io.BufferedReader;
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.FileReader;
-import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.StringReader;
@@ -30,22 +23,24 @@ import java.io.StringWriter;
import java.io.Writer;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.Dictionary;
import java.util.Enumeration;
import java.util.HashMap;
+import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
-import java.util.Properties;
-import java.util.Timer;
-import java.util.TimerTask;
import javax.xml.bind.JAXBException;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.stream.XMLStreamException;
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Modified;
import org.apache.felix.scr.annotations.Property;
+import org.apache.felix.scr.annotations.Reference;
+import org.apache.felix.scr.annotations.ReferenceCardinality;
import org.apache.felix.scr.annotations.Service;
import org.apache.geronimo.gbean.AbstractName;
import org.apache.geronimo.gbean.GAttributeInfo;
@@ -65,8 +60,9 @@ import org.apache.geronimo.system.config
import org.apache.geronimo.system.plugin.model.AttributesType;
import org.apache.geronimo.system.plugin.model.GbeanType;
import org.apache.geronimo.system.plugin.model.ModuleType;
-import org.apache.geronimo.system.serverinfo.ServerInfo;
import org.osgi.framework.Bundle;
+import org.osgi.framework.Constants;
+import org.osgi.service.cm.ConfigurationAdmin;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.xml.sax.SAXException;
@@ -82,84 +78,97 @@ import org.xml.sax.SAXException;
public class LocalAttributeManager implements PluginAttributeStore, PersistentConfigurationList {
private static final Logger log = LoggerFactory.getLogger(LocalAttributeManager.class);
- private static final String CONFIG_FILE_PROPERTY = "org.apache.geronimo.config.file";
- private final static String SUBSTITUTIONS_FILE_PROPERTY = "org.apache.geronimo.config.substitutions.file";
private final static String SUBSTITUTION_PREFIX_PREFIX = "org.apache.geronimo.config.substitution.prefix";
- private static final String BACKUP_EXTENSION = ".bak";
- private static final String TEMP_EXTENSION = ".working";
- private static final int SAVE_BUFFER_MS = 5000;
+ private final JexlExpressionParser expressionParser = new JexlExpressionParser(Collections.emptyMap());
-// private final ServerInfo serverInfo;
-// private final String configFile;
- private boolean readOnly;
- private JexlExpressionParser expressionParser;
-
-// private File attributeFile;
-// private File backupFile;
-// private File tempFile;
private ServerOverride serverOverride;
-// private Timer timer;
-// private TimerTask currentTask;
-
private boolean kernelFullyStarted;
private String prefix;
-// private File configSubstitutionsFile;
private Map<String, String> localConfigSubstitutions;
-// private String resolvedPropertiesFile;
private final GBeanInfoFactory infoFactory = new MultiGBeanInfoFactory();
- private static final byte[] INSTRUCTION = ("# Put variables and their substitution values in this file. \n"
- + "# They will be used when processing the corresponding config.xml. \n"
- + "# Values in this file can be overridden by environment variables and system properties \n"
- + "# by prefixing the property name with 'org.apache.geronimo.config.substitution.' \n"
- + "# For example, an entry such as hostName=localhost \n"
- + "# can be overridden by an environment variable or system property org.apache.geronimo.config.substitution.hostName=foo \n"
- + "# When running multiple instances of Geronimo choose a PortOffset value such that none of the ports conflict. \n"
- + "# For example, try PortOffset=10 \n").getBytes();
- private org.osgi.service.cm.Configuration configuration;
-
- @Property()
static final String OVERRIDES_KEY = ".overrides";
+
@Property(value = "org.apache.geronimo.config.substitution.")
static final String PREFIX_KEY = ".configSubstitutionsPrefix";
+
@Property(boolValue = false)
static final String READ_ONLY_KEY = "readOnly";
+ private boolean readOnly;
+ @Property(value = "default")
+ static final String SERVER_NAME_KEY = "serverName";
+ private String serverName;
+
+ @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+ private ConfigurationAdmin configurationAdmin;
+
+ public void setConfigurationAdmin(ConfigurationAdmin configurationAdmin) {
+ this.configurationAdmin = configurationAdmin;
+ }
+
+ public void unsetConfigurationAdmin(ConfigurationAdmin configurationAdmin) {
+ if (configurationAdmin == this.configurationAdmin) {
+ this.configurationAdmin = null;
+ }
+ }
+
+ private org.osgi.service.cm.Configuration configuration;
-// public LocalAttributeManager(String configFile, String configSubstitutionsFileName, String configSubstitutionsPrefix, boolean readOnly, ServerInfo serverInfo) {
-// this.configFile = System.getProperty(CONFIG_FILE_PROPERTY, configFile);
-// resolvedPropertiesFile = System.getProperty(SUBSTITUTIONS_FILE_PROPERTY, configSubstitutionsFileName);
-// configSubstitutionsFile = resolvedPropertiesFile == null? null: serverInfo.resolveServer(resolvedPropertiesFile);
-// localConfigSubstitutions = loadConfigSubstitutions(configSubstitutionsFile);
-// prefix = System.getProperty(SUBSTITUTION_PREFIX_PREFIX, configSubstitutionsPrefix);
-// Map<String, Object> configSubstitutions = loadAllConfigSubstitutions(localConfigSubstitutions, prefix);
-// expressionParser = new JexlExpressionParser(configSubstitutions);
-// this.readOnly = readOnly;
-// this.serverInfo = serverInfo;
-// serverOverride = new ServerOverride();
-//
-// log.debug("setting configSubstitutionsFile to: {}", configSubstitutionsFile);
-//
-// infoFactory = newGBeanInfoFactory();
-// }
@Activate
- public void activate(org.osgi.service.cm.Configuration configuration) throws IOException {
- this.configuration = configuration;
- Dictionary dictionary = configuration.getProperties();
- String overrides = (String) dictionary.remove(OVERRIDES_KEY);
- String configSubstitutionsPrefix = (String) dictionary.remove(PREFIX_KEY);
- readOnly = (Boolean) dictionary.get(READ_ONLY_KEY);
- localConfigSubstitutions = loadConfigSubstitutions(dictionary);
+ public void activate(Map<String, Object> properties) throws IOException {
+ readOnly = (Boolean) properties.get(READ_ONLY_KEY);
+ serverName = (String) properties.get(SERVER_NAME_KEY);
+ String configSubstitutionsPrefix = (String) properties.remove(PREFIX_KEY);
+ String servicePid = (String) properties.get(Constants.SERVICE_PID);
+ this.configuration = configurationAdmin.getConfiguration(servicePid);
+
+ Dictionary<Object, Object> d = getConfigurationProperties();
+ String overrides = (String) d.get(OVERRIDES_KEY);
+ localConfigSubstitutions = loadConfigSubstitutions(d);
prefix = System.getProperty(SUBSTITUTION_PREFIX_PREFIX, configSubstitutionsPrefix);
Map<String, Object> configSubstitutions = loadAllConfigSubstitutions(localConfigSubstitutions, prefix);
- expressionParser = new JexlExpressionParser(configSubstitutions);
+ expressionParser.setVariables(configSubstitutions);
load(overrides);
}
+
+ /**
+ * DS modified method. This is called back every time the config admin Configuration is updated, but asynchronously.
+ *
+ * @param properties DS properties (which include configuration properties)
+ * @throws IOException
+ */
+ @Modified
+ public void modified(Map<String, Object> properties) throws IOException {
+// readOnly = (Boolean) properties.get(READ_ONLY_KEY);
+// serverName = (String) properties.get(SERVER_NAME_KEY);
+// String configSubstitutionsPrefix = (String) properties.remove(PREFIX_KEY);
+// String servicePid = (String) properties.get(Constants.SERVICE_PID);
+// this.configuration = configurationAdmin.getConfiguration(servicePid);
+//
+// Dictionary<Object, Object> d = getConfigurationProperties();
+// String overrides = (String) d.get(OVERRIDES_KEY);
+// localConfigSubstitutions = loadConfigSubstitutions(d);
+// prefix = System.getProperty(SUBSTITUTION_PREFIX_PREFIX, configSubstitutionsPrefix);
+// Map<String, Object> configSubstitutions = loadAllConfigSubstitutions(localConfigSubstitutions, prefix);
+// expressionParser.setVariables(configSubstitutions);
+//
+// load(overrides);
+ }
+
+ private Dictionary<Object, Object> getConfigurationProperties() {
+ Dictionary<Object, Object> d = configuration.getProperties();
+ if (d == null) {
+ d = new Hashtable<Object, Object>();
+ }
+ return d;
+ }
+
public boolean isReadOnly() {
return readOnly;
}
@@ -244,7 +253,7 @@ public class LocalAttributeManager imple
return gbean.applyOverrides(data, configName, gbeanName, bundle);
}
- public void setModuleGBeans(Artifact moduleName, List<GbeanType> gbeans, boolean load, String condition) throws InvalidGBeanException {
+ public synchronized void setModuleGBeans(Artifact moduleName, List<GbeanType> gbeans, boolean load, String condition) throws InvalidGBeanException {
if (readOnly) {
return;
}
@@ -271,11 +280,16 @@ public class LocalAttributeManager imple
return expressionParser.parse(in);
}
- public void addConfigSubstitutions(Map<String, String> properties) {
+ @Override
+ public String getServerName() {
+ return serverName;
+ }
+
+ public synchronized void addConfigSubstitutions(Map<String, String> properties) {
localConfigSubstitutions.putAll(properties);
- Map<String, Object> configSubstutions = loadAllConfigSubstitutions(localConfigSubstitutions, prefix);
- storeConfigSubstitutions(configuration, localConfigSubstitutions);
- expressionParser.setVariables(configSubstutions);
+ Map<String, Object> configSubstitutions = loadAllConfigSubstitutions(localConfigSubstitutions, prefix);
+ expressionParser.setVariables(configSubstitutions);
+ attributeChanged();
}
public synchronized void setValue(Artifact configurationName, AbstractName gbeanName, GAttributeInfo attribute, Object value, Bundle bundle) {
@@ -395,49 +409,24 @@ public class LocalAttributeManager imple
if (readOnly) {
return;
}
-// ensureParentDirectory();
-// if (!tempFile.exists() && !tempFile.createNewFile()) {
-// throw new IOException("Unable to create manageable attribute working file for save " + tempFile.getAbsolutePath());
-// }
-// if (!tempFile.canWrite()) {
-// throw new IOException("Unable to write to manageable attribute working file for save " + tempFile.getAbsolutePath());
-// }
// write the new configuration to the temp file
String overrides = saveXml(serverOverride);
if (overrides == null) {
throw new IOException("Could not save serverOverride: " + serverOverride);
}
- Dictionary d = configuration.getProperties();
+ Dictionary<Object, Object> d = getConfigurationProperties();
+ for (Map.Entry<String, String> entry: localConfigSubstitutions.entrySet()) {
+ d.put("." + entry.getKey(), entry.getValue());
+ }
d.put(OVERRIDES_KEY, overrides);
configuration.update(d);
-// // delete the current backup file
-// if (backupFile.exists()) {
-// if (!backupFile.delete()) {
-// throw new IOException("Unable to delete old backup file in order to back up current manageable attribute working file for save");
-// }
-// }
-//
-// // rename the existing configuration file to the backup file
-// if (attributeFile.exists()) {
-// if (!attributeFile.renameTo(backupFile)) {
-// throw new IOException("Unable to rename " + attributeFile.getAbsolutePath() + " to " + backupFile.getAbsolutePath() + " in order to back up manageable attribute save file");
-// }
-// }
-//
-// // rename the temp file the the configuration file
-// if (!tempFile.renameTo(attributeFile)) {
-// throw new IOException(
-// "EXTREMELY CRITICAL! Unable to move manageable attributes working file to proper file name! Configuration will revert to defaults unless this is manually corrected! (could not rename " + tempFile.getAbsolutePath() + " to " + attributeFile.getAbsolutePath() + ")");
-// }
}
void write(Writer writer) throws XMLStreamException, JAXBException,
IOException {
- AttributesType attributes = serverOverride.writeXml();
- AttributesXmlUtil.writeAttributes(attributes, writer);
- writer.flush();
+ write(serverOverride, writer);
}
private static String saveXml(ServerOverride serverOverride) {
@@ -579,24 +568,6 @@ public class LocalAttributeManager imple
} catch (IOException e) {
log.error("could not save serverOverrides", e);
}
-// if (currentTask != null) {
-// currentTask.cancel();
-// }
-// if (timer != null) {
-// currentTask = new TimerTask() {
-//
-// public void run() {
-// try {
-// LocalAttributeManager.this.save();
-// } catch (IOException e) {
-// log.error("IOException occurred while saving attributes", e);
-// } catch (Throwable t) {
-// log.error("Error occurred during execution of attributeChanged TimerTask", t);
-// }
-// }
-// };
-// timer.schedule(currentTask, SAVE_BUFFER_MS);
-// }
}
private static Map<String, Object> loadAllConfigSubstitutions(Map<String, String> configSubstitutions, String prefix) {
@@ -607,56 +578,35 @@ public class LocalAttributeManager imple
addGeronimoSubstitutions(vars, System.getenv(), prefix);
//properties file is least significant
if (configSubstitutions != null) {
- addGeronimoSubstitutions(vars, configSubstitutions, ".");
+ addGeronimoSubstitutions(vars, configSubstitutions, "");
}
ParserUtils.addDefaultVariables(vars);
return vars;
}
-// private static Properties loadConfigSubstitutions(File configSubstitutionsFile) {
-// Properties properties = new Properties();
-// if (configSubstitutionsFile != null) {
-// if (!configSubstitutionsFile.exists()) {
-// //write out empty file with instructions as a hint to users.
-// storeConfigSubstitutions(configSubstitutionsFile, properties);
-// } else {
-// try {
-// FileInputStream in = new FileInputStream(configSubstitutionsFile);
-// try {
-// properties.load(in);
-// } finally {
-// in.close();
-// }
-// } catch (Exception e) {
-// log.error("Caught exception {} trying to read properties file {}", e, configSubstitutionsFile.getAbsolutePath());
-// }
-// }
-// }
-// return properties;
-// }
- private static Map<String, String> loadConfigSubstitutions(Dictionary<?, ?> dictionary) {
+ private static Map<String, String> loadConfigSubstitutions(Dictionary dictionary) {
Map<String, String> properties = new HashMap<String, String>();
- for (Enumeration<?> e = dictionary.keys(); e.hasMoreElements(); ) {
+ for (Enumeration e = dictionary.keys(); e.hasMoreElements();) {
String key = (String) e.nextElement();
- if (key.startsWith(".")) {
- String value = (String) dictionary.get(key);
- properties.put(key.substring(1), value);
+ Object value = dictionary.get(key);
+ if (key.startsWith(".") && !key.equals(OVERRIDES_KEY) && value instanceof String) {
+ properties.put(key.substring(1) , (String) value);
}
}
return properties;
}
- private static void storeConfigSubstitutions(org.osgi.service.cm.Configuration configuration, Map<String, String> properties) {
- Dictionary<Object, Object> d = configuration.getProperties();
- for (Map.Entry<String, String> entry: properties.entrySet()) {
- d.put("." + entry.getKey(), entry.getValue());
- }
- try {
- configuration.update(d);
- } catch (IOException e) {
- log.error("Caught exception {} trying to update Configuration dictionary", e);
- }
- }
+// private synchronized void storeConfigSubstitutions(Map<String, String> properties) {
+// Dictionary<Object, Object> d = getConfigurationProperties();
+// for (Map.Entry<String, String> entry: properties.entrySet()) {
+// d.put("." + entry.getKey(), entry.getValue());
+// }
+// try {
+// configuration.update(d);
+// } catch (IOException e) {
+// log.error("Caught exception {} trying to update Configuration dictionary", e);
+// }
+// }
private static void addGeronimoSubstitutions(Map<String, Object> vars, Map<?, ?> props, String prefix) {
if (prefix != null) {
Modified: geronimo/server/trunk/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/configuration/PluginAttributeStore.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/configuration/PluginAttributeStore.java?rev=1096957&r1=1096956&r2=1096957&view=diff
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/configuration/PluginAttributeStore.java (original)
+++ geronimo/server/trunk/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/configuration/PluginAttributeStore.java Tue Apr 26 23:20:36 2011
@@ -44,4 +44,6 @@ public interface PluginAttributeStore ex
boolean isModuleInstalled(Artifact artifact);
String substitute(final String in);
+
+ String getServerName();
}
Modified: geronimo/server/trunk/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/configuration/WrapperAttributeManager.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/configuration/WrapperAttributeManager.java?rev=1096957&r1=1096956&r2=1096957&view=diff
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/configuration/WrapperAttributeManager.java (original)
+++ geronimo/server/trunk/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/configuration/WrapperAttributeManager.java Tue Apr 26 23:20:36 2011
@@ -74,6 +74,11 @@ public class WrapperAttributeManager ext
return get().substitute(in);
}
+ @Override
+ public String getServerName() {
+ return get().getServerName();
+ }
+
public void addGBean(Artifact configurationName, GBeanData gbeanData, Bundle bundle) {
get().addGBean(configurationName, gbeanData, bundle);
}
Modified: geronimo/server/trunk/framework/modules/geronimo-system/src/test/java/org/apache/geronimo/system/configuration/LocalAttributeManagerTest.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-system/src/test/java/org/apache/geronimo/system/configuration/LocalAttributeManagerTest.java?rev=1096957&r1=1096956&r2=1096957&view=diff
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-system/src/test/java/org/apache/geronimo/system/configuration/LocalAttributeManagerTest.java (original)
+++ geronimo/server/trunk/framework/modules/geronimo-system/src/test/java/org/apache/geronimo/system/configuration/LocalAttributeManagerTest.java Tue Apr 26 23:20:36 2011
@@ -23,6 +23,7 @@ import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Dictionary;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.LinkedHashSet;
@@ -44,15 +45,16 @@ import org.apache.geronimo.kernel.Naming
import org.apache.geronimo.kernel.config.InvalidConfigException;
import org.apache.geronimo.kernel.osgi.MockBundle;
import org.apache.geronimo.kernel.repository.Artifact;
-import org.apache.geronimo.system.serverinfo.BasicServerInfo;
import org.osgi.framework.Bundle;
+import org.osgi.framework.InvalidSyntaxException;
import org.osgi.service.cm.Configuration;
+import org.osgi.service.cm.ConfigurationAdmin;
/**
* @version $Rev$ $Date$
*/
public class LocalAttributeManagerTest extends TestCase {
- private static final String basedir = System.getProperties().getProperty("basedir", ".");
+// private static final String basedir = System.getProperties().getProperty("basedir", ".");
private LocalAttributeManager localAttributeManager;
private Artifact configurationName;
@@ -248,7 +250,10 @@ public class LocalAttributeManagerTest e
protected void setUp() throws Exception {
super.setUp();
localAttributeManager = new LocalAttributeManager();
- Configuration configuration = new Configuration() {
+ final Map<String, Object> props = new HashMap<String, Object>();
+ props.put(LocalAttributeManager.READ_ONLY_KEY, false);
+ props.put(LocalAttributeManager.PREFIX_KEY, "org.apache.geronimo.config.substitution.");
+ final Configuration configuration = new Configuration() {
private Hashtable<String, Object> dictionary = new Hashtable<String, Object>();
@@ -260,9 +265,7 @@ public class LocalAttributeManagerTest e
@Override
public Dictionary getProperties() {
Hashtable<String, Object> d = new Hashtable<String, Object>();
- d.putAll(dictionary);
- d.put(LocalAttributeManager.READ_ONLY_KEY, false);
- d.put(LocalAttributeManager.PREFIX_KEY, "org.apache.geronimo.config.substitution.");
+ d.putAll(props);
return d;
}
@@ -294,7 +297,35 @@ public class LocalAttributeManagerTest e
return null;
}
};
- localAttributeManager.activate(configuration);
+ ConfigurationAdmin ca = new ConfigurationAdmin() {
+
+ @Override
+ public Configuration createFactoryConfiguration(String s) throws IOException {
+ return null;
+ }
+
+ @Override
+ public Configuration createFactoryConfiguration(String s, String s1) throws IOException {
+ return null;
+ }
+
+ @Override
+ public Configuration getConfiguration(String s, String s1) throws IOException {
+ return null;
+ }
+
+ @Override
+ public Configuration getConfiguration(String s) throws IOException {
+ return configuration;
+ }
+
+ @Override
+ public Configuration[] listConfigurations(String s) throws IOException, InvalidSyntaxException {
+ return new Configuration[0];
+ }
+ };
+ localAttributeManager.setConfigurationAdmin(ca);
+ localAttributeManager.activate(props);
configurationName = Artifact.create("configuration/name/1/car");
ObjectName objectName = ObjectName.getInstance(":name=gbean,parent="+configurationName+",foo=bar");
Modified: geronimo/server/trunk/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/pom.xml?rev=1096957&r1=1096956&r2=1096957&view=diff
==============================================================================
--- geronimo/server/trunk/pom.xml (original)
+++ geronimo/server/trunk/pom.xml Tue Apr 26 23:20:36 2011
@@ -456,12 +456,12 @@
<dependency>
<groupId>org.apache.geronimo.components</groupId>
<artifactId>geronimo-jaspi</artifactId>
- <version>1.1.1</version>
+ <version>1.1.2-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.geronimo.components</groupId>
<artifactId>geronimo-jaspi</artifactId>
- <version>1.1.1</version>
+ <version>1.1.2-SNAPSHOT</version>
<classifier>tests</classifier>
</dependency>
@@ -2198,6 +2198,12 @@
</dependencies>
</plugin>
+ <plugin>
+ <groupId>org.apache.karaf.tooling</groupId>
+ <artifactId>karaf-maven-plugin</artifactId>
+ <version>${karaf.version}</version>
+ <extensions>true</extensions>
+ </plugin>
<!-- INTERNAL -->
@@ -2392,6 +2398,10 @@
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
</plugin>
+ <plugin>
+ <groupId>org.apache.karaf.tooling</groupId>
+ <artifactId>karaf-maven-plugin</artifactId>
+ </plugin>
</plugins>
</build>