You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ace.apache.org by ja...@apache.org on 2012/08/07 13:30:20 UTC
svn commit: r1370188 - in /ace/sandbox/marrs/org.apache.ace.launcher:
.settings/org.eclipse.jdt.core.prefs src/org/apache/ace/launcher/Main.java
Author: jawi
Date: Tue Aug 7 11:30:20 2012
New Revision: 1370188
URL: http://svn.apache.org/viewvc?rev=1370188&view=rev
Log:
Some code cleanups & simplifications.
Modified:
ace/sandbox/marrs/org.apache.ace.launcher/.settings/org.eclipse.jdt.core.prefs
ace/sandbox/marrs/org.apache.ace.launcher/src/org/apache/ace/launcher/Main.java
Modified: ace/sandbox/marrs/org.apache.ace.launcher/.settings/org.eclipse.jdt.core.prefs
URL: http://svn.apache.org/viewvc/ace/sandbox/marrs/org.apache.ace.launcher/.settings/org.eclipse.jdt.core.prefs?rev=1370188&r1=1370187&r2=1370188&view=diff
==============================================================================
--- ace/sandbox/marrs/org.apache.ace.launcher/.settings/org.eclipse.jdt.core.prefs (original)
+++ ace/sandbox/marrs/org.apache.ace.launcher/.settings/org.eclipse.jdt.core.prefs Tue Aug 7 11:30:20 2012
@@ -1,4 +1,9 @@
eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
+org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
@@ -8,10 +13,11 @@ org.eclipse.jdt.core.compiler.problem.de
org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore
org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
@@ -21,7 +27,9 @@ org.eclipse.jdt.core.compiler.problem.in
org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
@@ -30,12 +38,17 @@ org.eclipse.jdt.core.compiler.problem.mi
org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
+org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
@@ -48,7 +61,8 @@ org.eclipse.jdt.core.compiler.problem.su
org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=ignore
+org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
Modified: ace/sandbox/marrs/org.apache.ace.launcher/src/org/apache/ace/launcher/Main.java
URL: http://svn.apache.org/viewvc/ace/sandbox/marrs/org.apache.ace.launcher/src/org/apache/ace/launcher/Main.java?rev=1370188&r1=1370187&r2=1370188&view=diff
==============================================================================
--- ace/sandbox/marrs/org.apache.ace.launcher/src/org/apache/ace/launcher/Main.java (original)
+++ ace/sandbox/marrs/org.apache.ace.launcher/src/org/apache/ace/launcher/Main.java Tue Aug 7 11:30:20 2012
@@ -19,17 +19,22 @@
package org.apache.ace.launcher;
+import java.io.IOException;
+import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
+import java.util.jar.Manifest;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import org.apache.ace.managementagent.Activator;
+import org.apache.felix.framework.util.FelixConstants;
import org.osgi.framework.Constants;
+import org.osgi.framework.launch.Framework;
import org.osgi.framework.launch.FrameworkFactory;
/**
@@ -37,150 +42,180 @@ import org.osgi.framework.launch.Framewo
*/
public class Main {
- private final boolean m_quiet = Boolean.parseBoolean(System.getProperty("quiet", "false"));
- private final List m_additionalBundleActivators = new ArrayList();
-
- private Argument m_identification = new KeyValueArgument() {
- public void handle(String key, String value) {
- if ("identification".equals(key)) {
- System.setProperty("identification", value);
- }
- }
-
- public String getDescription() {
- return "identification: sets the target ID to use";
- }
- };
-
- private Argument m_discovery = new KeyValueArgument() {
- public void handle(String key, String value) {
- if ("discovery".equals(key)) {
- System.setProperty("discovery", value);
- }
- }
+ private static class AdditionalBundlesOption extends KeyValueArgument {
+ private final List<String> m_additionalBundleActivators;
+
+ public AdditionalBundlesOption() {
+ super("bundle");
+
+ m_additionalBundleActivators = new ArrayList<String>();
+ }
+
+ /**
+ * @return the additionalBundleActivators
+ */
+ public List<String> getAdditionalBundleActivators() {
+ return new ArrayList<String>(m_additionalBundleActivators);
+ }
+
+ @Override
+ public String getDescription() {
+ return "bundle: adds an additional bundle to be started with this management agent: bundle=my.fully.qualified.BundleActivator";
+ }
+
+ @Override
+ protected void doHandle(String value) {
+ if (!"".equals(value.trim()) && !m_additionalBundleActivators.contains(value)) {
+ m_additionalBundleActivators.add(value);
+ }
+ }
+ }
+ private interface Argument {
+ String getDescription();
+ void handle(String argument);
+ }
+
+ private static class FrameworkOption extends KeyValueArgument {
+ private Properties m_properties = new Properties();
+
+ public FrameworkOption() {
+ super("fwOption");
+ }
+
public String getDescription() {
- return "discovery: sets the ACE server to connect to";
+ return "fwOption: sets framework options for the OSGi framework to be created. This argument may be repeated";
}
- };
- private Argument m_agents = new KeyValueArgument() {
- public void handle(String key, String value) {
- if ("agents".equals(key)) {
- System.setProperty("agents", value);
- }
+ public Properties getProperties() {
+ return m_properties;
}
- public String getDescription() {
- return "agents: configures multiple management agents: agent-id,identification,discovery[;agent-id,identification,discovery]*";
- }
- };
-
- private Argument m_auth = new KeyValueArgument() {
@Override
- protected void handle(String key, String value) {
- if ("auth".equals(key)) {
- System.setProperty("auth", value);
+ protected void doHandle(String value) {
+ Pattern pattern = Pattern.compile("([^=]*)=(.*)");
+ Matcher m = pattern.matcher(value);
+ if (!m.matches()) {
+ throw new IllegalArgumentException(value + " is not a valid framework option.");
}
+ m_properties.put(m.group(1), m.group(2));
}
-
- public String getDescription() {
- return "auth: point to the properties file containing the authentication credentials for a certain subsystem: <dir/file/url>";
- }
- };
+ }
- private Argument m_help = new Argument() {
+ private static abstract class KeyValueArgument implements Argument {
+ protected final String m_key;
+
+ public KeyValueArgument(String key) {
+ m_key = key;
+ }
+
public void handle(String argument) {
- if ("help".equals(argument)) {
- showHelp();
- System.exit(0);
+ Pattern pattern = Pattern.compile(m_key + "=(.*)");
+ Matcher m = pattern.matcher(argument);
+ if (m.matches()) {
+ doHandle(m.group(1));
}
}
- public String getDescription() {
- return "help: prints this help message";
- }
- };
+ protected abstract void doHandle(String value);
+ }
- private Argument m_additionalBundles = new KeyValueArgument() {
- public void handle(String key, String value) {
- if ("bundle".equals(key)) {
- try {
- Class clazz = Class.forName(value);
- if (!m_quiet) {
- System.out.println("Adding additional bundle activator: " + clazz.getName());
- }
- m_additionalBundleActivators.add(clazz.newInstance());
- }
- catch (Exception e) {
- System.err.println("Bundle (" + value + ") not added! Details: " + e.getMessage());
- }
- }
- }
+ private static class SystemPropertyArgument extends KeyValueArgument {
+ private final String m_description;
+
+ public SystemPropertyArgument(String key, String description) {
+ super(key);
+ m_description = description;
+ }
+
+ @Override
+ public String getDescription() {
+ return m_key + ": " + m_description;
+ }
+
+ @Override
+ protected void doHandle(String value) {
+ System.setProperty(m_key, value);
+ }
+ }
- public String getDescription() {
- return "bundle: adds an additional bundle to be started with this management agent: bundle=my.fully.qualified.BundleActivator";
- }
- };
-
- private FrameworkOption m_fwOptionHandler = new FrameworkOption();
-
- private final List<Argument> m_arguments = Arrays.asList(
- m_auth,
- m_additionalBundles,
- m_identification,
- m_discovery,
- m_agents,
- m_fwOptionHandler,
- m_help);
+ private static final boolean m_quiet = Boolean.parseBoolean(System.getProperty("quiet", "false"));
+ /**
+ * MAIN ENTRY POINT
+ *
+ * @param args the command line arguments, never <code>null</code>.
+ * @throws Exception in case of errors.
+ */
public static void main(String[] args) throws Exception {
new Main(args).run();
}
+
+ private final FrameworkOption m_fwOptionHandler;
+ private final AdditionalBundlesOption m_additionalBundleHandler;
+ /**
+ * Creates a new {@link Main} instance.
+ *
+ * @param args the command line arguments, never <code>null</code>.
+ */
public Main(String[] args) {
+ m_additionalBundleHandler = new AdditionalBundlesOption();
+ m_fwOptionHandler = new FrameworkOption();
+
+ final List<Argument> arguments = new ArrayList<Argument>();
+
+ Argument agents = new SystemPropertyArgument("agents", "configures multiple management agents: agent-id,identification,discovery[;agent-id,identification,discovery]*");
+ Argument auth = new SystemPropertyArgument("auth", "point to the properties file containing the authentication credentials for a certain subsystem: <dir/file/url>");
+ Argument discovery = new SystemPropertyArgument("discovery", "sets the ACE server to connect to");
+ Argument identification = new SystemPropertyArgument("id(?:entification)?", "sets the target ID to use") {
+ @Override
+ protected void doHandle(String value) {
+ System.setProperty("identification", value);
+ }
+ };
+ Argument help = new Argument() {
+ public String getDescription() {
+ return "help: prints this help message";
+ }
+
+ public void handle(String argument) {
+ if ("help".equals(argument)) {
+ showHelp(arguments);
+ System.exit(0);
+ }
+ }
+ };
+
+ arguments.addAll(Arrays.asList(agents, auth, discovery, identification, m_additionalBundleHandler, m_fwOptionHandler, help));
+
for (String arg : args) {
- for (Argument argument : m_arguments) {
+ for (Argument argument : arguments) {
argument.handle(arg);
}
}
}
-
+
public void run() throws Exception {
- FrameworkFactory factory = (FrameworkFactory) Class.forName("org.apache.felix.framework.FrameworkFactory").newInstance();
-
- List activators = new ArrayList();
- activators.add(new Activator());
- activators.addAll(m_additionalBundleActivators);
-
- String[] extraSystemPackageArray = {
- "org.osgi.service.deploymentadmin;version=\"1.0\"",
- "org.osgi.service.deploymentadmin.spi;version=\"1.0\"",
- "org.osgi.service.cm;version=\"1.3\"",
- "org.osgi.service.event;version=\"1.2\"",
- "org.osgi.service.log;version=\"1.3\"",
- "org.osgi.service.metatype;version=\"1.1\"",
- "org.apache.felix.dm;version=\"3.0\"",
- "org.apache.felix.dm.tracker;version=\"3.0\"",
- "org.apache.ace.log;version=\"0.8.1.SNAPSHOT\"",
- "org.apache.ace.deployment.service;version=\"0.8.1.SNAPSHOT\""
- };
+ Map frameworkProperties = createFrameworkProperties();
+ FrameworkFactory factory = createFrameworkFactory();
- String extraSystemPackages = createExtraSystemPackages(extraSystemPackageArray);
+ Framework framework = factory.newFramework(frameworkProperties);
- Map frameworkProperties = new HashMap();
- frameworkProperties.put("felix.systembundle.activators", activators);
- frameworkProperties.put(Constants.FRAMEWORK_SYSTEMPACKAGES_EXTRA, extraSystemPackages);
- frameworkProperties.putAll(m_fwOptionHandler.getProperties());
+ framework.start();
- factory.newFramework(frameworkProperties).start();
+ try {
+ framework.waitForStop(0);
+ } finally {
+ System.exit(0);
+ }
}
-
+
/**
* @param extraSystemPackages
* @return
*/
- private String createExtraSystemPackages(String[] extraSystemPackages) {
+ private String getExtraSystemPackages(String[] extraSystemPackages) {
String isolateMA = System.getProperty("isolateMA", "managementagent");
StringBuilder sb = new StringBuilder();
@@ -196,58 +231,109 @@ public class Main {
return sb.toString();
}
- private void showHelp() {
- System.out.println("Apache ACE Launcher\n"
- + "Usage:\n"
- + " java -jar ace-launcher.jar [identification=<id>] [discovery=<ace-server>] [options...]");
+ /**
+ * @return
+ */
+ private FrameworkFactory createFrameworkFactory() {
+ try {
+ Class<?> clazz = Class.forName("org.apache.felix.framework.FrameworkFactory");
+ return (FrameworkFactory) clazz.newInstance();
+ } catch (Exception e) {
+ throw new RuntimeException("Failed to create framework factory?!", e);
+ }
+ }
- System.out.println("All known options are,");
- for (Argument argument : m_arguments) {
- System.out.println(" " + argument.getDescription());
- }
+ /**
+ * @return
+ * @throws Exception
+ */
+ private Map createFrameworkProperties() throws Exception {
+ String[] extraSystemPackageArray = {
+ "org.osgi.service.deploymentadmin;version=\"1.0\"",
+ "org.osgi.service.deploymentadmin.spi;version=\"1.0\"",
+ "org.osgi.service.cm;version=\"1.3\"",
+ "org.osgi.service.event;version=\"1.2\"",
+ "org.osgi.service.log;version=\"1.3\"",
+ "org.osgi.service.metatype;version=\"1.1\"",
+ "org.apache.felix.dm;version=\"3.0\"",
+ "org.apache.felix.dm.tracker;version=\"3.0\"",
+ "org.apache.ace.log;version=\"0.8\"",
+ "org.apache.ace.deployment.service;version=\"0.8\""
+ };
- System.out.println("Example:\n"
- + " java -jar ace-launcher.jar identification=MyTarget discovery=http://provisioning.company.com:8080 "
- + "fwOption=org.osgi.framework.system.packages.extra=sun.misc,com.sun.management");
- }
+ Map frameworkProperties = new HashMap();
+ frameworkProperties.put(FelixConstants.SYSTEMBUNDLE_ACTIVATORS_PROP, getSystemBundleActivators());
+ frameworkProperties.put(Constants.FRAMEWORK_SYSTEMPACKAGES_EXTRA, getExtraSystemPackages(extraSystemPackageArray));
+ frameworkProperties.putAll(m_fwOptionHandler.getProperties());
- private interface Argument {
- void handle(String argument);
- String getDescription();
- }
+ return frameworkProperties;
+ }
+
+ /**
+ * @return
+ * @throws IOException
+ */
+ private List<String> getAdditionalBundleActivators() throws IOException {
+ List<String> bundleActivators = m_additionalBundleHandler.getAdditionalBundleActivators();
+
+ // The actual management agent itself...
+ bundleActivators.add(0, "org.apache.ace.managementagent.Activator");
+
+ // Pull in all the additional mentioned bundles on the classpath...
+ ClassLoader cl = Thread.currentThread().getContextClassLoader();
+ Enumeration<URL> resources = cl.getResources("META-INF/MANIFEST.MF");
+ while (resources.hasMoreElements()) {
+ URL resource = resources.nextElement();
+ try {
+ Manifest mf = new Manifest(resource.openStream());
+ String bundleActivator = mf.getMainAttributes().getValue(Constants.BUNDLE_ACTIVATOR);
+ if (bundleActivator != null) {
+ bundleActivators.add(bundleActivator);
+ }
+ } catch (Exception e) {
+ System.err.println("Failed to read resource: " + resource + "!\nPossible reason: " + e);
+ }
+ }
+ return bundleActivators;
+ }
+
+ /**
+ * @return
+ * @throws Exception
+ */
+ private List<Object> getSystemBundleActivators() throws Exception {
+ ClassLoader cl = Thread.currentThread().getContextClassLoader();
- private static abstract class KeyValueArgument implements Argument {
- public void handle(String argument) {
- Pattern pattern = Pattern.compile("(\\w*)=(.*)");
- Matcher m = pattern.matcher(argument);
- if (m.matches()) {
- handle(m.group(1), m.group(2));
- }
- }
+ List<Object> result = new ArrayList<Object>();
- protected abstract void handle(String key, String value);
+ List<String> bundleActivators = getAdditionalBundleActivators();
+ for (String bundleActivator : bundleActivators) {
+ try {
+ Object instance = cl.loadClass(bundleActivator).newInstance();
+ if (!m_quiet) {
+ System.out.println("Adding additional bundle activator: " + bundleActivator);
+ }
+ result.add(instance);
+ } catch (Exception e) {
+ System.err.println("Failed to add bundle activator: " + bundleActivator + "!\nPossible reason: " + e);
+ }
+ }
+
+ return result;
}
- private static class FrameworkOption extends KeyValueArgument {
- private Properties m_properties = new Properties();
- @Override
- protected void handle(String key, String value) {
- if (key.equals("fwOption")) {
- Pattern pattern = Pattern.compile("([^=]*)=(.*)");
- Matcher m = pattern.matcher(value);
- if (!m.matches()) {
- throw new IllegalArgumentException(value + " is not a valid framework option.");
- }
- m_properties.put(m.group(1), m.group(2));
- }
- }
+ private void showHelp(List<Argument> arguments) {
+ System.out.println("Apache ACE Launcher\n"
+ + "Usage:\n"
+ + " java -jar ace-launcher.jar [identification=<id>] [discovery=<ace-server>] [options...]");
- public String getDescription() {
- return "fwOption: sets framework options for the OSGi framework to be created. This argument may be repeated";
+ System.out.println("All known options are:");
+ for (Argument argument : arguments) {
+ System.out.println(" " + argument.getDescription());
}
- public Properties getProperties() {
- return m_properties;
- }
+ System.out.println("Example:\n"
+ + " java -jar ace-launcher.jar identification=MyTarget discovery=http://provisioning.company.com:8080 "
+ + "fwOption=org.osgi.framework.system.packages.extra=sun.misc,com.sun.management");
}
}