You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by cs...@apache.org on 2011/07/07 15:19:36 UTC
svn commit: r1143811 - in
/karaf/trunk/main/src/main/java/org/apache/karaf/main:
InstanceInfoManager.java LifecycleManager.java Main.java util/Utils.java
Author: cschneider
Date: Thu Jul 7 13:19:36 2011
New Revision: 1143811
URL: http://svn.apache.org/viewvc?rev=1143811&view=rev
Log:
KARAF-713 Moving handling of instance informations to a separate class, moving some util methods out of Main
Added:
karaf/trunk/main/src/main/java/org/apache/karaf/main/InstanceInfoManager.java
Modified:
karaf/trunk/main/src/main/java/org/apache/karaf/main/LifecycleManager.java
karaf/trunk/main/src/main/java/org/apache/karaf/main/Main.java
karaf/trunk/main/src/main/java/org/apache/karaf/main/util/Utils.java
Added: karaf/trunk/main/src/main/java/org/apache/karaf/main/InstanceInfoManager.java
URL: http://svn.apache.org/viewvc/karaf/trunk/main/src/main/java/org/apache/karaf/main/InstanceInfoManager.java?rev=1143811&view=auto
==============================================================================
--- karaf/trunk/main/src/main/java/org/apache/karaf/main/InstanceInfoManager.java (added)
+++ karaf/trunk/main/src/main/java/org/apache/karaf/main/InstanceInfoManager.java Thu Jul 7 13:19:36 2011
@@ -0,0 +1,95 @@
+package org.apache.karaf.main;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
+import java.lang.management.ManagementFactory;
+import java.util.Properties;
+
+public class InstanceInfoManager {
+
+ static void writePid(String pidFile) {
+ try {
+ if (pidFile != null) {
+ String pid = getMyPid();
+ Writer w = new OutputStreamWriter(new FileOutputStream(pidFile));
+ w.write(pid);
+ w.close();
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ static void updateInstanceInfo(File karafHome, File karafBase) {
+ try {
+ String instanceName = System.getProperty("karaf.name");
+ String pid = getMyPid();
+
+ boolean isRoot = karafHome.equals(karafBase);
+
+ if (instanceName != null) {
+ String storage = System.getProperty("karaf.instances");
+ if (storage == null) {
+ throw new Exception(
+ "System property 'karaf.instances' is not set. \n"
+ + "This property needs to be set to the full path of the instance.properties file.");
+ }
+ File storageFile = new File(storage);
+ File propertiesFile = new File(storageFile,
+ "instance.properties");
+ Properties props = new Properties();
+ if (propertiesFile.exists()) {
+ FileInputStream fis = new FileInputStream(propertiesFile);
+ props.load(fis);
+ int count = Integer.parseInt(props.getProperty("count"));
+ for (int i = 0; i < count; i++) {
+ String name = props.getProperty("item." + i + ".name");
+ if (name.equals(instanceName)) {
+ props.setProperty("item." + i + ".pid", pid);
+ writeProperties(propertiesFile, props);
+ fis.close();
+ return;
+ }
+ }
+ fis.close();
+ if (!isRoot) {
+ throw new Exception("Instance " + instanceName
+ + " not found");
+ }
+ } else if (isRoot) {
+ propertiesFile.getParentFile().mkdirs();
+ props.setProperty("count", "1");
+ props.setProperty("item.0.name", instanceName);
+ props.setProperty("item.0.loc", karafHome.getAbsolutePath());
+ props.setProperty("item.0.pid", pid);
+ props.setProperty("item.0.root", "true");
+ writeProperties(propertiesFile, props);
+ }
+ }
+ } catch (Exception e) {
+ System.err.println("Unable to update instance pid: "
+ + e.getMessage());
+ }
+ }
+
+ private static String getMyPid() {
+ String pid = ManagementFactory.getRuntimeMXBean().getName();
+ if (pid.indexOf('@') > 0) {
+ pid = pid.substring(0, pid.indexOf('@'));
+ }
+ return pid;
+ }
+
+ private static void writeProperties(File propertiesFile, Properties props)
+ throws FileNotFoundException, IOException {
+ FileOutputStream fos = new FileOutputStream(
+ propertiesFile);
+ props.store(fos, null);
+ fos.close();
+ }
+}
Modified: karaf/trunk/main/src/main/java/org/apache/karaf/main/LifecycleManager.java
URL: http://svn.apache.org/viewvc/karaf/trunk/main/src/main/java/org/apache/karaf/main/LifecycleManager.java?rev=1143811&r1=1143810&r2=1143811&view=diff
==============================================================================
--- karaf/trunk/main/src/main/java/org/apache/karaf/main/LifecycleManager.java (original)
+++ karaf/trunk/main/src/main/java/org/apache/karaf/main/LifecycleManager.java Thu Jul 7 13:19:36 2011
@@ -7,15 +7,11 @@ import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Writer;
-import java.lang.management.ManagementFactory;
-import java.lang.management.RuntimeMXBean;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Properties;
import java.util.logging.Logger;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
import org.apache.karaf.main.lock.Lock;
import org.apache.karaf.main.lock.LockFactory;
@@ -76,7 +72,7 @@ public class LifecycleManager extends Th
protected void setupShutdown() {
String pidFile = props.getProperty(KARAF_SHUTDOWN_PID_FILE);
- writePid(pidFile);
+ InstanceInfoManager.writePid(pidFile);
try {
int port = Integer.parseInt(props.getProperty(KARAF_SHUTDOWN_PORT, "0"));
String host = props.getProperty(KARAF_SHUTDOWN_HOST, "localhost");
@@ -100,25 +96,6 @@ public class LifecycleManager extends Th
e.printStackTrace();
}
}
-
- private void writePid(String pidFile) {
- try {
- if (pidFile != null) {
- RuntimeMXBean rtb = ManagementFactory.getRuntimeMXBean();
- String processName = rtb.getName();
- Pattern pattern = Pattern.compile("^([0-9]+)@.+$", Pattern.CASE_INSENSITIVE);
- Matcher matcher = pattern.matcher(processName);
- if (matcher.matches()) {
- int pid = Integer.parseInt(matcher.group(1));
- Writer w = new OutputStreamWriter(new FileOutputStream(pidFile));
- w.write(Integer.toString(pid));
- w.close();
- }
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
public boolean destroyKaraf() throws Exception {
if (framework == null) {
Modified: karaf/trunk/main/src/main/java/org/apache/karaf/main/Main.java
URL: http://svn.apache.org/viewvc/karaf/trunk/main/src/main/java/org/apache/karaf/main/Main.java?rev=1143811&r1=1143810&r2=1143811&view=diff
==============================================================================
--- karaf/trunk/main/src/main/java/org/apache/karaf/main/Main.java (original)
+++ karaf/trunk/main/src/main/java/org/apache/karaf/main/Main.java Thu Jul 7 13:19:36 2011
@@ -20,13 +20,10 @@ package org.apache.karaf.main;
import java.io.BufferedReader;
import java.io.File;
-import java.io.FileInputStream;
import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
-import java.lang.management.ManagementFactory;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
@@ -41,8 +38,6 @@ import java.util.Properties;
import java.util.StringTokenizer;
import java.util.TreeMap;
import java.util.logging.Logger;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
import org.apache.karaf.main.util.BootstrapLogManager;
import org.apache.karaf.main.util.PropertiesHelper;
@@ -199,7 +194,7 @@ public class Main {
Properties sysProps = PropertiesHelper.loadPropertiesFile(etcFolder,
SYSTEM_PROPERTIES_FILE_NAME, false);
PropertiesHelper.updateSystemProperties(sysProps);
- updateInstancePid();
+ InstanceInfoManager.updateInstanceInfo(karafHome, karafBase);
configProps = PropertiesHelper.loadPropertiesFile(etcFolder,
CONFIG_PROPERTIES_FILE_NAME, false);
@@ -325,7 +320,7 @@ public class Main {
// We should start all the bundles in the system dir.
for (File bundleDir : bundleDirs) {
- findJars(bundleDir, jars);
+ Utils.findJars(bundleDir, jars);
}
StringBuffer sb = new StringBuffer();
@@ -349,7 +344,7 @@ public class Main {
HashMap<Integer, StringBuffer> levels = new HashMap<Integer, StringBuffer>();
for (Object o : startupProps.keySet()) {
String name = (String) o;
- File file = findFile(bundleDirs, name);
+ File file = Utils.findFile(bundleDirs, name);
if (file != null) {
Integer level;
@@ -527,72 +522,6 @@ public class Main {
}
}
- private void updateInstancePid() {
- try {
- String instanceName = System.getProperty("karaf.name");
- String pid = ManagementFactory.getRuntimeMXBean().getName();
- if (pid.indexOf('@') > 0) {
- pid = pid.substring(0, pid.indexOf('@'));
- }
-
- boolean isRoot = karafHome.equals(karafBase);
-
- if (instanceName != null) {
- String storage = System.getProperty("karaf.instances");
- if (storage == null) {
- throw new Exception(
- "System property 'karaf.instances' is not set. \n"
- + "This property needs to be set to the full path of the instance.properties file.");
- }
- File storageFile = new File(storage);
- File propertiesFile = new File(storageFile,
- "instance.properties");
- Properties props = new Properties();
- if (propertiesFile.exists()) {
- FileInputStream fis = new FileInputStream(propertiesFile);
- props.load(fis);
- int count = Integer.parseInt(props.getProperty("count"));
- for (int i = 0; i < count; i++) {
- String name = props.getProperty("item." + i + ".name");
- if (name.equals(instanceName)) {
- props.setProperty("item." + i + ".pid", pid);
- FileOutputStream fos = new FileOutputStream(
- propertiesFile);
- props.store(fos, null);
- fis.close();
- fos.close();
- return;
- }
- }
- fis.close();
- if (!isRoot) {
- throw new Exception("Instance " + instanceName
- + " not found");
- }
- } else if (isRoot) {
- if (!propertiesFile.getParentFile().exists()) {
- try {
- propertiesFile.getParentFile().mkdirs();
- } catch (SecurityException se) {
- throw new Exception(se.getMessage());
- }
- }
- props.setProperty("count", "1");
- props.setProperty("item.0.name", instanceName);
- props.setProperty("item.0.loc", karafHome.getAbsolutePath());
- props.setProperty("item.0.pid", pid);
- props.setProperty("item.0.root", "true");
- FileOutputStream fos = new FileOutputStream(propertiesFile);
- props.store(fos, null);
- fos.close();
- }
- }
- } catch (Exception e) {
- System.err.println("Unable to update instance pid: "
- + e.getMessage());
- }
- }
-
/**
* <p/>
* Processes the auto-install and auto-start properties from the specified
@@ -681,7 +610,7 @@ public class Main {
location = PropertiesHelper.nextLocation(st);
if (location != null) {
try {
- String[] parts = convertToMavenUrlsIfNeeded(
+ String[] parts = Utils.convertToMavenUrlsIfNeeded(
location, convertToMavenUrls);
Bundle b = context.installBundle(parts[0], new URL(
parts[1]).openStream());
@@ -718,57 +647,6 @@ public class Main {
}
}
- private static String[] convertToMavenUrlsIfNeeded(String location,
- boolean convertToMavenUrls) {
- String[] parts = location.split("\\|");
- if (convertToMavenUrls) {
- String[] p = parts[1].split("/");
- if (p.length >= 4
- && p[p.length - 1].startsWith(p[p.length - 3] + "-"
- + p[p.length - 2])) {
- String artifactId = p[p.length - 3];
- String version = p[p.length - 2];
- String classifier;
- String type;
- String artifactIdVersion = artifactId + "-" + version;
- StringBuffer sb = new StringBuffer();
- if (p[p.length - 1].charAt(artifactIdVersion.length()) == '-') {
- classifier = p[p.length - 1].substring(
- artifactIdVersion.length() + 1,
- p[p.length - 1].lastIndexOf('.'));
- } else {
- classifier = null;
- }
- type = p[p.length - 1].substring(p[p.length - 1]
- .lastIndexOf('.') + 1);
- sb.append("mvn:");
- for (int j = 0; j < p.length - 3; j++) {
- if (j > 0) {
- sb.append('.');
- }
- sb.append(p[j]);
- }
- sb.append('/').append(artifactId).append('/').append(version);
- if (!"jar".equals(type) || classifier != null) {
- sb.append('/');
- if (!"jar".equals(type)) {
- sb.append(type);
- }
- if (classifier != null) {
- sb.append('/').append(classifier);
- }
- }
- parts[1] = parts[0];
- parts[0] = sb.toString();
- } else {
- parts[1] = parts[0];
- }
- } else {
- parts[1] = parts[0];
- }
- return parts;
- }
-
private ClassLoader createClassLoader(Properties configProps)
throws Exception {
String framework = configProps.getProperty(KARAF_FRAMEWORK);
@@ -807,89 +685,6 @@ public class Main {
Main.class.getClassLoader());
}
- private static File findFile(List<File> bundleDirs, String name) {
- for (File bundleDir : bundleDirs) {
- File file = findFile(bundleDir, name);
- if (file != null) {
- return file;
- }
- }
- return null;
- }
-
- private static File findFile(File dir, String name) {
- name = fromMaven(name);
- File theFile = new File(dir, name);
-
- if (theFile.exists() && !theFile.isDirectory()) {
- return theFile;
- }
- return null;
- }
-
- private static final Pattern mvnPattern = Pattern
- .compile("mvn:([^/ ]+)/([^/ ]+)/([^/ ]*)(/([^/ ]+)(/([^/ ]+))?)?");
-
- /**
- * Returns a path for an srtifact. Input: path (no ':') returns path Input:
- * mvn:<groupId>/<artifactId>/<version>/<type>/<classifier> converts to
- * default repo location path // * Input:
- * <groupId>:<artifactId>:<version>:<type>:<classifier> converts to default
- * repo location path type and classifier are optional.
- *
- *
- * @param name
- * input artifact info
- * @return path as supplied or a default maven repo path
- */
- static String fromMaven(String name) {
- Matcher m = mvnPattern.matcher(name);
- if (!m.matches()) {
- return name;
- }
- StringBuilder b = new StringBuilder();
- b.append(m.group(1));
- for (int i = 0; i < b.length(); i++) {
- if (b.charAt(i) == '.') {
- b.setCharAt(i, '/');
- }
- }
- b.append("/");// groupId
- String artifactId = m.group(2);
- String version = m.group(3);
- String extension = m.group(5);
- String classifier = m.group(7);
- b.append(artifactId).append("/");// artifactId
- b.append(version).append("/");// version
- b.append(artifactId).append("-").append(version);
- if (present(classifier)) {
- b.append("-").append(classifier);
- } else {
- if (present(extension)) {
- b.append(".").append(extension);
- } else {
- b.append(".jar");
- }
- }
- return b.toString();
- }
-
- private static boolean present(String part) {
- return part != null && !part.isEmpty();
- }
-
- private static void findJars(File dir, ArrayList<File> jars) {
- for (File file : dir.listFiles()) {
- if (file.isDirectory()) {
- findJars(file, jars);
- } else {
- if (file.toString().endsWith(".jar")) {
- jars.add(file);
- }
- }
- }
- }
-
/**
* Retrieve the arguments used when launching Karaf
*
Modified: karaf/trunk/main/src/main/java/org/apache/karaf/main/util/Utils.java
URL: http://svn.apache.org/viewvc/karaf/trunk/main/src/main/java/org/apache/karaf/main/util/Utils.java?rev=1143811&r1=1143810&r2=1143811&view=diff
==============================================================================
--- karaf/trunk/main/src/main/java/org/apache/karaf/main/util/Utils.java (original)
+++ karaf/trunk/main/src/main/java/org/apache/karaf/main/util/Utils.java Thu Jul 7 13:19:36 2011
@@ -24,8 +24,15 @@ import java.io.IOException;
import java.net.JarURLConnection;
import java.net.URI;
import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
public class Utils {
+ public static final Pattern mvnPattern = Pattern
+ .compile("mvn:([^/ ]+)/([^/ ]+)/([^/ ]*)(/([^/ ]+)(/([^/ ]+))?)?");
public static File getKarafHome(Class<?> mainClass, String karafHomeProperty, String karafHomeEnv) throws IOException {
File rc = null;
@@ -205,4 +212,137 @@ public class Utils {
}
}
+ /**
+ * Returns a path for an srtifact. Input: path (no ':') returns path Input:
+ * mvn:<groupId>/<artifactId>/<version>/<type>/<classifier> converts to
+ * default repo location path // * Input:
+ * <groupId>:<artifactId>:<version>:<type>:<classifier> converts to default
+ * repo location path type and classifier are optional.
+ *
+ *
+ * @param name
+ * input artifact info
+ * @return path as supplied or a default maven repo path
+ */
+ private static String fromMaven(String name) {
+ Matcher m = mvnPattern.matcher(name);
+ if (!m.matches()) {
+ return name;
+ }
+ StringBuilder b = new StringBuilder();
+ b.append(m.group(1));
+ for (int i = 0; i < b.length(); i++) {
+ if (b.charAt(i) == '.') {
+ b.setCharAt(i, '/');
+ }
+ }
+ b.append("/");// groupId
+ String artifactId = m.group(2);
+ String version = m.group(3);
+ String extension = m.group(5);
+ String classifier = m.group(7);
+ b.append(artifactId).append("/");// artifactId
+ b.append(version).append("/");// version
+ b.append(artifactId).append("-").append(version);
+ if (present(classifier)) {
+ b.append("-").append(classifier);
+ } else {
+ if (present(extension)) {
+ b.append(".").append(extension);
+ } else {
+ b.append(".jar");
+ }
+ }
+ return b.toString();
+ }
+
+ public static boolean present(String part) {
+ return part != null && !part.isEmpty();
+ }
+
+ public static File findFile(List<File> bundleDirs, String name) {
+ for (File bundleDir : bundleDirs) {
+ File file = Utils.findFile(bundleDir, name);
+ if (file != null) {
+ return file;
+ }
+ }
+ return null;
+ }
+
+ public static File findFile(File dir, String name) {
+ name = fromMaven(name);
+ File theFile = new File(dir, name);
+
+ if (theFile.exists() && !theFile.isDirectory()) {
+ return theFile;
+ }
+ return null;
+ }
+
+ public static void findJars(File dir, ArrayList<File> jars) {
+ for (File file : dir.listFiles()) {
+ if (file.isDirectory()) {
+ findJars(file, jars);
+ } else {
+ if (file.toString().endsWith(".jar")) {
+ jars.add(file);
+ }
+ }
+ }
+ }
+
+ public static String[] convertToMavenUrlsIfNeeded(String location,
+ boolean convertToMavenUrls) {
+ String[] parts = location.split("\\|");
+ if (convertToMavenUrls) {
+ String[] p = parts[1].split("/");
+ if (p.length >= 4
+ && p[p.length - 1].startsWith(p[p.length - 3] + "-"
+ + p[p.length - 2])) {
+ String artifactId = p[p.length - 3];
+ String version = p[p.length - 2];
+ String classifier;
+ String type;
+ String artifactIdVersion = artifactId + "-" + version;
+ StringBuffer sb = new StringBuffer();
+ if (p[p.length - 1].charAt(artifactIdVersion.length()) == '-') {
+ classifier = p[p.length - 1].substring(
+ artifactIdVersion.length() + 1,
+ p[p.length - 1].lastIndexOf('.'));
+ } else {
+ classifier = null;
+ }
+ type = p[p.length - 1].substring(p[p.length - 1]
+ .lastIndexOf('.') + 1);
+ sb.append("mvn:");
+ for (int j = 0; j < p.length - 3; j++) {
+ if (j > 0) {
+ sb.append('.');
+ }
+ sb.append(p[j]);
+ }
+ sb.append('/').append(artifactId).append('/').append(version);
+ if (!"jar".equals(type) || classifier != null) {
+ sb.append('/');
+ if (!"jar".equals(type)) {
+ sb.append(type);
+ }
+ if (classifier != null) {
+ sb.append('/').append(classifier);
+ }
+ }
+ parts[1] = parts[0];
+ parts[0] = sb.toString();
+ } else {
+ parts[1] = parts[0];
+ }
+ } else {
+ parts[1] = parts[0];
+ }
+ return parts;
+ }
+
+
+
}