You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ace.apache.org by br...@apache.org on 2013/08/16 14:37:36 UTC
svn commit: r1514679 - in /ace/trunk/org.apache.ace.agent.launcher: ./
resources/ resources/META-INF/ src/org/apache/ace/agent/launcher/
Author: bramk
Date: Fri Aug 16 12:37:36 2013
New Revision: 1514679
URL: http://svn.apache.org/r1514679
Log:
ACE-347 Split out base and added bundle dir support
Added:
ace/trunk/org.apache.ace.agent.launcher/base.bnd
ace/trunk/org.apache.ace.agent.launcher/felix.bnd
ace/trunk/org.apache.ace.agent.launcher/resources/org.apache.ace.agent.launcher.BundleProvider
- copied, changed from r1514625, ace/trunk/org.apache.ace.agent.launcher/resources/META-INF/services/org.apache.ace.agent.launcher.BundleProvider
ace/trunk/org.apache.ace.agent.launcher/src/org/apache/ace/agent/launcher/BundleDirBundleProvider.java
ace/trunk/org.apache.ace.agent.launcher/src/org/apache/ace/agent/launcher/BundleProvider.java
- copied, changed from r1514625, ace/trunk/org.apache.ace.agent.launcher/src/org/apache/ace/agent/launcher/BundleProvider.java
Removed:
ace/trunk/org.apache.ace.agent.launcher/resources/META-INF/
ace/trunk/org.apache.ace.agent.launcher/resources/felix-defaults.properties
Modified:
ace/trunk/org.apache.ace.agent.launcher/.classpath
ace/trunk/org.apache.ace.agent.launcher/bnd.bnd
ace/trunk/org.apache.ace.agent.launcher/src/org/apache/ace/agent/launcher/AgentBundleProvider.java
ace/trunk/org.apache.ace.agent.launcher/src/org/apache/ace/agent/launcher/Launcher.java
Modified: ace/trunk/org.apache.ace.agent.launcher/.classpath
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.agent.launcher/.classpath?rev=1514679&r1=1514678&r2=1514679&view=diff
==============================================================================
--- ace/trunk/org.apache.ace.agent.launcher/.classpath (original)
+++ ace/trunk/org.apache.ace.agent.launcher/.classpath Fri Aug 16 12:37:36 2013
@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" output="bin" path="src"/>
- <classpathentry kind="src" path="resources"/>
<classpathentry kind="src" output="bin_test" path="test"/>
<classpathentry kind="con" path="aQute.bnd.classpath.container"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
Added: ace/trunk/org.apache.ace.agent.launcher/base.bnd
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.agent.launcher/base.bnd?rev=1514679&view=auto
==============================================================================
--- ace/trunk/org.apache.ace.agent.launcher/base.bnd (added)
+++ ace/trunk/org.apache.ace.agent.launcher/base.bnd Fri Aug 16 12:37:36 2013
@@ -0,0 +1,14 @@
+
+# The Jar Main-Class header
+Main-Class: org.apache.ace.agent.launcher.Launcher
+Bundle-Version: 1.0.0
+Bundle-Name: Apache ACE Agent launcher
+Bundle-Description: Standalone launcher that start an OSGi framework with an embedded ACE Agent
+
+# Include the felix defaults
+Include-Resource: ${repo;org.apache.ace.agent;latest},\
+ META-INF/services/org.apache.ace.agent.launcher.BundleProvider=resources/org.apache.ace.agent.launcher.BundleProvider
+
+Private-Package: org.apache.ace.agent.launcher,\
+ org.apache.commons.cli,\
+ org.apache.ace.agent;-split-package:=merge-first
\ No newline at end of file
Modified: ace/trunk/org.apache.ace.agent.launcher/bnd.bnd
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.agent.launcher/bnd.bnd?rev=1514679&r1=1514678&r2=1514679&view=diff
==============================================================================
--- ace/trunk/org.apache.ace.agent.launcher/bnd.bnd (original)
+++ ace/trunk/org.apache.ace.agent.launcher/bnd.bnd Fri Aug 16 12:37:36 2013
@@ -1,22 +1,9 @@
-# The Jar Main-Class header
-Main-Class: org.apache.ace.agent.launcher.Launcher
-Bundle-Version: 1.0.0
-Bundle-Name: Apache ACE Agent launcher
-Bundle-Description: Standalone laucher that start an Apache Felix framework with an embedded ACE Agent
-
-# Include the felix defaults
-Include-Resource: @${repo;org.apache.felix.framework;4.0.3}!/default.properties,\
- @${repo;org.apache.felix.framework;4.0.3}!/META-INF/services/*,\
- @${repo;org.apache.felix.framework;4.0.3}!/org/*,\
- ${repo;org.apache.ace.agent;latest},\
- resources/META-INF/services/org.apache.ace.agent.launcher.BundleProvider==META-INF/services/org.apache.ace.agent.launcher.BundleProvider
-
-Private-Package: org.apache.ace.agent.launcher,\
- org.apache.commons.cli,\
- org.apache.ace.agent;-split-package:=merge-first
-
-buildpath: osgi.core;version='[4.3,5)',\
org.apache.commons.cli,\
org.apache.ace.agent;version=latest,\
- org.apache.ace.test;version=latest
+ org.apache.ace.test;version=latest,\
+ org.apache.felix.gogo.command,\
+ org.apache.felix.gogo.runtime,\
+ org.apache.felix.gogo.shell
-sources: false
+-sub: *.bnd
Added: ace/trunk/org.apache.ace.agent.launcher/felix.bnd
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.agent.launcher/felix.bnd?rev=1514679&view=auto
==============================================================================
--- ace/trunk/org.apache.ace.agent.launcher/felix.bnd (added)
+++ ace/trunk/org.apache.ace.agent.launcher/felix.bnd Fri Aug 16 12:37:36 2013
@@ -0,0 +1,18 @@
+
+# The Jar Main-Class header
+Main-Class: org.apache.ace.agent.launcher.Launcher
+Bundle-Version: 1.0.0
+Bundle-Name: Apache ACE Agent Felix launcher
+Bundle-Description: Standalone launcher that start a Felix framework with an embedded ACE Agent
+
+# Include the felix defaults
+felix.version=4.0.3
+Include-Resource: @${repo;org.apache.felix.framework;${felix.version}}!/default.properties,\
+ @${repo;org.apache.felix.framework;${felix.version}}!/META-INF/services/*,\
+ @${repo;org.apache.felix.framework;${felix.version}}!/org/*,\
+ ${repo;org.apache.ace.agent;latest},\
+ META-INF/services/org.apache.ace.agent.launcher.BundleProvider=resources/org.apache.ace.agent.launcher.BundleProvider
+
+Private-Package: org.apache.ace.agent.launcher,\
+ org.apache.commons.cli,\
+ org.apache.ace.agent;-split-package:=merge-first
\ No newline at end of file
Copied: ace/trunk/org.apache.ace.agent.launcher/resources/org.apache.ace.agent.launcher.BundleProvider (from r1514625, ace/trunk/org.apache.ace.agent.launcher/resources/META-INF/services/org.apache.ace.agent.launcher.BundleProvider)
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.agent.launcher/resources/org.apache.ace.agent.launcher.BundleProvider?p2=ace/trunk/org.apache.ace.agent.launcher/resources/org.apache.ace.agent.launcher.BundleProvider&p1=ace/trunk/org.apache.ace.agent.launcher/resources/META-INF/services/org.apache.ace.agent.launcher.BundleProvider&r1=1514625&r2=1514679&rev=1514679&view=diff
==============================================================================
--- ace/trunk/org.apache.ace.agent.launcher/resources/META-INF/services/org.apache.ace.agent.launcher.BundleProvider (original)
+++ ace/trunk/org.apache.ace.agent.launcher/resources/org.apache.ace.agent.launcher.BundleProvider Fri Aug 16 12:37:36 2013
@@ -1 +1,2 @@
org.apache.ace.agent.launcher.AgentBundleProvider
+org.apache.ace.agent.launcher.BundleDirBundleProvider
Modified: ace/trunk/org.apache.ace.agent.launcher/src/org/apache/ace/agent/launcher/AgentBundleProvider.java
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.agent.launcher/src/org/apache/ace/agent/launcher/AgentBundleProvider.java?rev=1514679&r1=1514678&r2=1514679&view=diff
==============================================================================
--- ace/trunk/org.apache.ace.agent.launcher/src/org/apache/ace/agent/launcher/AgentBundleProvider.java (original)
+++ ace/trunk/org.apache.ace.agent.launcher/src/org/apache/ace/agent/launcher/AgentBundleProvider.java Fri Aug 16 12:37:36 2013
@@ -29,12 +29,13 @@ import java.io.InputStream;
public class AgentBundleProvider implements BundleProvider {
@Override
- public String getLocation() {
- return "org.apache.ace.agent.jar";
+ public String[] getBundleNames() {
+ return new String[] { "org.apache.ace.agent" };
}
@Override
- public InputStream getInputStream() {
- return getClass().getClassLoader().getResourceAsStream("org.apache.ace.agent.jar");
+ public InputStream getInputStream(String name) {
+ return getClass().getClassLoader().getResourceAsStream(
+ "org.apache.ace.agent.jar");
}
}
Added: ace/trunk/org.apache.ace.agent.launcher/src/org/apache/ace/agent/launcher/BundleDirBundleProvider.java
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.agent.launcher/src/org/apache/ace/agent/launcher/BundleDirBundleProvider.java?rev=1514679&view=auto
==============================================================================
--- ace/trunk/org.apache.ace.agent.launcher/src/org/apache/ace/agent/launcher/BundleDirBundleProvider.java (added)
+++ ace/trunk/org.apache.ace.agent.launcher/src/org/apache/ace/agent/launcher/BundleDirBundleProvider.java Fri Aug 16 12:37:36 2013
@@ -0,0 +1,55 @@
+package org.apache.ace.agent.launcher;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * {@link BundleProvider} that loads bundles from a directory.
+ *
+ * @see META-INF/services/org.apache.ace.agent.launcher.BundleProvider
+ *
+ */
+public class BundleDirBundleProvider implements BundleProvider {
+
+ public static final String BUNDLE_DIR_PROPERTY = "agent.bundles.dir";
+ public static final String BUNDLE_DIR_DEFAULT = "bundles";
+
+ @Override
+ public String[] getBundleNames() {
+ File dir = getDir();
+ if (!dir.exists() || !dir.canRead()) {
+ return new String[] {};
+ }
+
+ File[] bundles = dir.listFiles();
+ List<String> names = new ArrayList<String>();
+ for (File bundle : bundles) {
+ names.add(bundle.getName());
+ }
+ return names.toArray(new String[names.size()]);
+ }
+
+ @Override
+ public InputStream getInputStream(String bundleName) throws IOException {
+ File dir = getDir();
+ if (!dir.exists() || !dir.canRead()) {
+ throw new IOException("No such bundle in dir " + dir.getAbsolutePath());
+ }
+ File bundle = new File(dir, bundleName);
+ if (!bundle.exists() || !bundle.canRead()) {
+ throw new IOException("No such bundle in dir " + dir.getAbsolutePath());
+ }
+ return new FileInputStream(bundle);
+ }
+
+ private File getDir() {
+ String dir = System.getProperty(BUNDLE_DIR_PROPERTY);
+ if (dir != null)
+ return new File(dir);
+ return new File(BUNDLE_DIR_DEFAULT);
+ }
+}
Copied: ace/trunk/org.apache.ace.agent.launcher/src/org/apache/ace/agent/launcher/BundleProvider.java (from r1514625, ace/trunk/org.apache.ace.agent.launcher/src/org/apache/ace/agent/launcher/BundleProvider.java)
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.agent.launcher/src/org/apache/ace/agent/launcher/BundleProvider.java?p2=ace/trunk/org.apache.ace.agent.launcher/src/org/apache/ace/agent/launcher/BundleProvider.java&p1=ace/trunk/org.apache.ace.agent.launcher/src/org/apache/ace/agent/launcher/BundleProvider.java&r1=1514625&r2=1514679&rev=1514679&view=diff
==============================================================================
--- ace/trunk/org.apache.ace.agent.launcher/src/org/apache/ace/agent/launcher/BundleProvider.java (original)
+++ ace/trunk/org.apache.ace.agent.launcher/src/org/apache/ace/agent/launcher/BundleProvider.java Fri Aug 16 12:37:36 2013
@@ -18,6 +18,7 @@
*/
package org.apache.ace.agent.launcher;
+import java.io.IOException;
import java.io.InputStream;
import java.util.ServiceLoader;
@@ -28,16 +29,16 @@ import java.util.ServiceLoader;
public interface BundleProvider {
/**
- * The bundle location.
+ * Return the bundle names.
*
- * @return The location
+ * @return The names
*/
- String getLocation();
+ String[] getBundleNames();
/**
- * The bundle input stream
+ * Return a bundle input stream
*
* @return The input
*/
- InputStream getInputStream();
+ InputStream getInputStream(String bundleName) throws IOException;
}
Modified: ace/trunk/org.apache.ace.agent.launcher/src/org/apache/ace/agent/launcher/Launcher.java
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.agent.launcher/src/org/apache/ace/agent/launcher/Launcher.java?rev=1514679&r1=1514678&r2=1514679&view=diff
==============================================================================
--- ace/trunk/org.apache.ace.agent.launcher/src/org/apache/ace/agent/launcher/Launcher.java (original)
+++ ace/trunk/org.apache.ace.agent.launcher/src/org/apache/ace/agent/launcher/Launcher.java Fri Aug 16 12:37:36 2013
@@ -43,6 +43,7 @@ import org.apache.commons.cli.HelpFormat
import org.apache.commons.cli.Options;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
+import org.osgi.framework.BundleException;
import org.osgi.framework.Constants;
import org.osgi.framework.Version;
import org.osgi.framework.launch.Framework;
@@ -99,7 +100,8 @@ public class Launcher {
// // overwrite with user args
// if (command.hasOption("a")) {
- // configuration.put(CONFIG_IDENTIFICATION_KEY, command.getOptionValue("a"));
+ // configuration.put(CONFIG_IDENTIFICATION_KEY,
+ // command.getOptionValue("a"));
// }
// if (command.hasOption("s")) {
// configuration.put(CONFIG_SERVERURL_KEY, command.getOptionValue("s"));
@@ -124,9 +126,12 @@ public class Launcher {
private static void printHelp(Options options) {
HelpFormatter formatter = new HelpFormatter();
- formatter.printHelp(120, "java -jar org.apache.ace.agent.launcher [options] [configurationfile]",
- "\nApache ACE AgentLauncher\n\n", options,
- "\n\nConfiguration file options\n\nTODO", false);
+ formatter
+ .printHelp(
+ 120,
+ "java -jar org.apache.ace.agent.launcher [options] [configurationfile]",
+ "\nApache ACE AgentLauncher\n\n", options,
+ "\n\nConfiguration file options\n\nTODO", false);
}
private static Properties loadDefaultProperties() throws IOException {
@@ -143,9 +148,11 @@ public class Launcher {
}
}
- private static Properties loadUserProperties(String configFileArgument) throws IOException {
+ private static Properties loadUserProperties(String configFileArgument)
+ throws IOException {
File configFile = new File(configFileArgument);
- if (!configFile.exists() || !configFile.isFile() || !configFile.canRead()) {
+ if (!configFile.exists() || !configFile.isFile()
+ || !configFile.canRead()) {
System.err.println("Can not acces configuration file : " + configFileArgument);
return null;
}
@@ -172,7 +179,8 @@ public class Launcher {
* Main execution logic of the launcher; Start a framework, install bundles and pass configuration to the
* {@link AgentFactory}.
*
- * @throws Exception on failure
+ * @throws Exception
+ * on failure
*/
public void run() throws Exception {
@@ -180,43 +188,18 @@ public class Launcher {
FrameworkFactory frameworkFactory = loadFrameworkFactory();
Map<String, String> frameworkProperties = createFrameworkProperties();
if (m_verbose)
- System.out.println("Launching OSGI framework\n factory\t: " + frameworkFactory.getClass().getName() + "\n properties\t: " + frameworkProperties);
+ System.out.println("Launching OSGI framework\n factory\t: "
+ + frameworkFactory.getClass().getName()
+ + "\n properties\t: " + frameworkProperties);
Framework framework = frameworkFactory.newFramework(frameworkProperties);
BundleContext context = null;
framework.init();
context = framework.getBundleContext();
- BundleProvider[] bundleFactories = loadBundleProviders();
- if (bundleFactories != null) {
- for (BundleProvider bundleFactory : bundleFactories) {
- if (m_verbose)
- System.out.println(" bundle\t: " + bundleFactory.getLocation());
- InputStream inputStream = bundleFactory.getInputStream();
- try {
- Bundle bundle = context.installBundle(bundleFactory.getLocation(), inputStream);
- bundle.start();
- }
- finally {
- inputStream.close();
- }
- }
- }
-
- File[] bundleFiles = loadBundleFiles();
- if (bundleFiles != null) {
- for (File bundleFile : bundleFiles) {
- if (m_verbose)
- System.out.println(" bundle\t: " + bundleFile.getAbsolutePath());
- InputStream inputStream = new FileInputStream(bundleFile);
- try {
- Bundle bundle = context.installBundle(bundleFile.getAbsolutePath(), inputStream);
- bundle.start();
- }
- finally {
- inputStream.close();
- }
- }
+ BundleProvider[] bundleProviders = loadBundleProviders();
+ for (BundleProvider bundleProvider : bundleProviders) {
+ installBundles(context, bundleProvider);
}
framework.start();
@@ -233,11 +216,33 @@ public class Launcher {
System.exit(0);
}
+ private Bundle[] installBundles(BundleContext context, BundleProvider extensionProvider) throws BundleException, IOException {
+ List<Bundle> bundles = new ArrayList<Bundle>();
+ for (String bundleName : extensionProvider.getBundleNames()) {
+ if (m_verbose)
+ System.out.println("Installing bundle\t: " + bundleName);
+ InputStream inputStream = null;
+ try {
+ inputStream = extensionProvider.getInputStream(bundleName);
+ bundles.add(context.installBundle(bundleName, inputStream));
+ }
+ finally {
+ if (inputStream != null)
+ inputStream.close();
+ }
+ }
+ for (Bundle bundle : bundles) {
+ bundle.start();
+ }
+ return bundles.toArray(new Bundle[bundles.size()]);
+ }
+
/**
* Load {@link FrameworkFactory} through the {@link ServiceLoader}.
*
* @return the first factory
- * @throws Exception on failure
+ * @throws Exception
+ * on failure
*/
private FrameworkFactory loadFrameworkFactory() throws Exception {
ServiceLoader<FrameworkFactory> frameworkFactoryLoader = ServiceLoader.load(FrameworkFactory.class);
@@ -249,33 +254,11 @@ public class Launcher {
}
/**
- * Load bundle file specified through configuration.
- *
- * @return list of files
- * @throws Exception on failure
- */
- private File[] loadBundleFiles() throws Exception {
- List<File> bundleFiles = new ArrayList<File>();
- String bundleFileConfig = m_configuration.get("system.bundles");
- if (bundleFileConfig != null && !bundleFileConfig.trim().equals("")) {
- String[] bundleFileNames = bundleFileConfig.trim().split(",");
- int i = 0;
- for (String bundleFileName : bundleFileNames) {
- File bundleFile = new File(bundleFileName);
- if (!bundleFile.exists() || !bundleFile.isFile() || !bundleFile.canRead()) {
- throw new IllegalArgumentException("Can not access configured file: " + bundleFile.getAbsolutePath());
- }
- bundleFiles.add(bundleFile);
- }
- }
- return bundleFiles.toArray(new File[bundleFiles.size()]);
- }
-
- /**
* Load {@link BundleProvider}s through the {@link ServiceLoader}.
*
* @return list of providers
- * @throws Exception on failure
+ * @throws Exception
+ * on failure
*/
private BundleProvider[] loadBundleProviders() throws Exception {
ServiceLoader<BundleProvider> bundleFactoryLoader = ServiceLoader.load(BundleProvider.class);
@@ -291,7 +274,8 @@ public class Launcher {
* Build the framework launch properties.
*
* @return the launch properties
- * @throws Exception on failure
+ * @throws Exception
+ * on failure
*/
private Map<String, String> createFrameworkProperties() throws Exception {
Map<String, String> frameworkProperties = new HashMap<String, String>();
@@ -309,7 +293,6 @@ public class Launcher {
}
else {
frameworkProperties.put(Constants.FRAMEWORK_SYSTEMPACKAGES_EXTRA, extraPackage + "," + getAgentApiPackageSpec());
-
}
return frameworkProperties;
}
@@ -318,10 +301,10 @@ public class Launcher {
* Determines the export clause for the agent API package.
*
* @return the export clause
- * @throws Exception on failure
+ * @throws Exception
+ * on failure
*/
private String getAgentApiPackageSpec() throws IOException {
-
String apiPackage = AgentControl.class.getPackage().getName();
String apiVersion = Version.emptyVersion.toString();
InputStream packageInfoStream = null;