You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by jb...@apache.org on 2011/12/01 15:53:08 UTC
svn commit: r1209110 - in /karaf/trunk:
shell/dev/src/main/java/org/apache/karaf/shell/dev/
shell/dev/src/main/resources/OSGI-INF/blueprint/
system/commands/src/main/java/org/apache/karaf/system/commands/
system/core/src/main/java/org/apache/karaf/syst...
Author: jbonofre
Date: Thu Dec 1 14:53:06 2011
New Revision: 1209110
URL: http://svn.apache.org/viewvc?rev=1209110&view=rev
Log:
[KARAF-1073] Add support of -r (reboot) and -h (halt) options to the system:shutdown.
system:shutdown command replaces the dev:reboot command.
Removed:
karaf/trunk/shell/dev/src/main/java/org/apache/karaf/shell/dev/Restart.java
Modified:
karaf/trunk/shell/dev/src/main/resources/OSGI-INF/blueprint/shell-dev.xml
karaf/trunk/system/commands/src/main/java/org/apache/karaf/system/commands/Shutdown.java
karaf/trunk/system/core/src/main/java/org/apache/karaf/system/SystemService.java
karaf/trunk/system/core/src/main/java/org/apache/karaf/system/internal/SystemServiceImpl.java
karaf/trunk/system/management/src/main/java/org/apache/karaf/system/management/SystemMBean.java
karaf/trunk/system/management/src/main/java/org/apache/karaf/system/management/internal/SystemMBeanImpl.java
Modified: karaf/trunk/shell/dev/src/main/resources/OSGI-INF/blueprint/shell-dev.xml
URL: http://svn.apache.org/viewvc/karaf/trunk/shell/dev/src/main/resources/OSGI-INF/blueprint/shell-dev.xml?rev=1209110&r1=1209109&r2=1209110&view=diff
==============================================================================
--- karaf/trunk/shell/dev/src/main/resources/OSGI-INF/blueprint/shell-dev.xml (original)
+++ karaf/trunk/shell/dev/src/main/resources/OSGI-INF/blueprint/shell-dev.xml Thu Dec 1 14:53:06 2011
@@ -33,9 +33,6 @@
<action class="org.apache.karaf.shell.dev.PrintStackTraces" />
</command>
<command>
- <action class="org.apache.karaf.shell.dev.Restart" />
- </command>
- <command>
<action class="org.apache.karaf.shell.dev.SystemProperty" />
</command>
<command>
Modified: karaf/trunk/system/commands/src/main/java/org/apache/karaf/system/commands/Shutdown.java
URL: http://svn.apache.org/viewvc/karaf/trunk/system/commands/src/main/java/org/apache/karaf/system/commands/Shutdown.java?rev=1209110&r1=1209109&r2=1209110&view=diff
==============================================================================
--- karaf/trunk/system/commands/src/main/java/org/apache/karaf/system/commands/Shutdown.java (original)
+++ karaf/trunk/system/commands/src/main/java/org/apache/karaf/system/commands/Shutdown.java Thu Dec 1 14:53:06 2011
@@ -31,6 +31,15 @@ public class Shutdown extends OsgiComman
@Option(name = "-f", aliases = "--force", description = "Force the shutdown without confirmation message.", required = false, multiValued = false)
boolean force = false;
+ @Option(name = "-r", aliases = "--reboot", description = "Reboot the Karaf container.", required = false, multiValued = false)
+ boolean reboot = false;
+
+ @Option(name = "-h", aliases = "--halt", description = "Halt the Karaf container.", required = false, multiValued = false)
+ boolean halt = false;
+
+ @Option(name = "-c", aliases = "--clean", description = "Clean the Karaf container (working directory) during reboot.", required = false, multiValued = false)
+ boolean clean = false;
+
@Argument(name = "time", index = 0, description = "Shutdown after a specified delay. The time argument can have different" +
" formats. First, it can be an abolute time in the format hh:mm, in which hh is the hour (1 or 2 digits) and mm" +
" is the minute of the hour (in two digits). Second, it can be in the format +m, in which m is the number of minutes" +
@@ -44,15 +53,24 @@ public class Shutdown extends OsgiComman
}
protected Object doExecute() throws Exception {
+
if (force) {
- systemService.shutdown(time);
+ if (reboot) {
+ systemService.reboot(time, clean);
+ } else {
+ systemService.halt(time);
+ }
return null;
}
for (; ; ) {
StringBuffer sb = new StringBuffer();
String karafName = System.getProperty("karaf.name");
- System.err.println(String.format("Confirm: shutdown instance %s (yes/no): ",karafName));
+ if (reboot) {
+ System.err.println(String.format("Confirm: reboot instance %s (yes/no): ",karafName));
+ } else {
+ System.err.println(String.format("Confirm: halt instance %s (yes/no): ",karafName));
+ }
System.err.flush();
for (; ; ) {
int c = session.getKeyboard().read();
@@ -68,7 +86,11 @@ public class Shutdown extends OsgiComman
}
String str = sb.toString();
if (str.equals("yes")) {
- systemService.shutdown(time);
+ if (reboot) {
+ systemService.reboot(time, clean);
+ } else {
+ systemService.halt(time);
+ }
}
return null;
}
Modified: karaf/trunk/system/core/src/main/java/org/apache/karaf/system/SystemService.java
URL: http://svn.apache.org/viewvc/karaf/trunk/system/core/src/main/java/org/apache/karaf/system/SystemService.java?rev=1209110&r1=1209109&r2=1209110&view=diff
==============================================================================
--- karaf/trunk/system/core/src/main/java/org/apache/karaf/system/SystemService.java (original)
+++ karaf/trunk/system/core/src/main/java/org/apache/karaf/system/SystemService.java Thu Dec 1 14:53:06 2011
@@ -22,19 +22,37 @@ package org.apache.karaf.system;
public interface SystemService {
/**
- * Shutdown the Karaf container.
+ * Halt the Karaf container.
*/
- void shutdown() throws Exception;
+ void halt() throws Exception;
/**
- * Shutdown the Karaf container.
+ * Halt the Karaf container.
*
* @param time shutdown delay. The time argument can have different formats.
- * First, it can be an abolute time in the format hh:mm, in which hh is the hour (1 or 2 digits) and mm
+ * First, it can be an absolute time in the format hh:mm, in which hh is the hour (1 or 2 digits) and mm
* is the minute of the hour (in two digits). Second, it can be in the format +m, in which m is the number of minutes
* to wait. The word now is an alias for +0.
*/
- void shutdown(String time) throws Exception;
+ void halt(String time) throws Exception;
+
+ /**
+ * Reboot the Karaf container.
+ *
+ * @throws Exception
+ */
+ void reboot() throws Exception;
+
+ /**
+ * Reboot the Karaf container.
+ *
+ * @param time reboot delay. The time argument can have different formats.
+ * First, it can be an absolute time in the format hh:mm, in which hh is the hour (1 or 2 digits) and mm
+ * is the minute of the hour (in two digits). Second, it can be in the format +m, in which m is the number of minutes
+ * to wait. The word now is an alias for +0.
+ * @param clean Force a clean restart by deleting the working directory.
+ */
+ void reboot(String time, boolean clean) throws Exception;
/**
* Set the system start level.
Modified: karaf/trunk/system/core/src/main/java/org/apache/karaf/system/internal/SystemServiceImpl.java
URL: http://svn.apache.org/viewvc/karaf/trunk/system/core/src/main/java/org/apache/karaf/system/internal/SystemServiceImpl.java?rev=1209110&r1=1209109&r2=1209110&view=diff
==============================================================================
--- karaf/trunk/system/core/src/main/java/org/apache/karaf/system/internal/SystemServiceImpl.java (original)
+++ karaf/trunk/system/core/src/main/java/org/apache/karaf/system/internal/SystemServiceImpl.java Thu Dec 1 14:53:06 2011
@@ -43,38 +43,20 @@ public class SystemServiceImpl implement
return this.bundleContext;
}
- public void shutdown() throws Exception {
- shutdown(null);
+ public void halt() throws Exception {
+ halt(null);
}
- public void shutdown(String time) throws Exception {
- long sleep = 0;
- if (time != null) {
- if (!time.equals("now")) {
- if (time.startsWith("+")) {
- // delay in number of minutes provided
- time = time.substring(1);
- try {
- sleep = Long.parseLong(time) * 60 * 1000;
- } catch (Exception e) {
- throw new IllegalArgumentException("Time " + time + " is not valid");
- }
- } else {
- // try to parse the date in hh:mm
- String[] strings = time.split(":");
- if (strings.length != 2) {
- throw new IllegalArgumentException("Time " + time + " is not valid");
- }
- GregorianCalendar currentDate = new GregorianCalendar();
- GregorianCalendar shutdownDate = new GregorianCalendar(currentDate.get(Calendar.YEAR), currentDate.get(Calendar.MONTH), currentDate.get(Calendar.DATE), Integer.parseInt(strings[0]), Integer.parseInt(strings[1]));
- if (shutdownDate.before(currentDate)) {
- shutdownDate.set(Calendar.DATE, shutdownDate.get(Calendar.DATE) + 1);
- }
- sleep = shutdownDate.getTimeInMillis() - currentDate.getTimeInMillis();
- }
- }
- }
- shutdown(sleep);
+ public void halt(String time) throws Exception {
+ shutdown(timeToSleep(time));
+ }
+
+ public void reboot() throws Exception {
+ reboot(null, false);
+ }
+
+ public void reboot(String time, boolean cleanup) throws Exception {
+ reboot(timeToSleep(time), true);
}
private void shutdown(final long sleep) {
@@ -83,12 +65,32 @@ public class SystemServiceImpl implement
try {
if (sleep > 0) {
LOGGER.info("Shutdown in " + sleep / 1000 / 60 + " minute(s)");
+ System.err.println("Shutdown in " + sleep / 1000 / 60 + " minutes(s)");
}
Thread.sleep(sleep);
Bundle bundle = getBundleContext().getBundle(0);
bundle.stop();
} catch (Exception e) {
- LOGGER.error("Error when shutting down", e);
+ LOGGER.error("Halt error", e);
+ }
+ }
+ }.start();
+ }
+
+ private void reboot(final long sleep, final boolean clean) {
+ new Thread() {
+ public void run() {
+ try {
+ if (sleep > 0) {
+ LOGGER.info("Reboot in " + sleep / 1000 / 60 + " minute(s)");
+ System.err.println("Reboot in " + sleep / 1000 / 60 + " minute(s)");
+ }
+ Thread.sleep(sleep);
+ System.setProperty("karaf.restart", "true");
+ System.setProperty("karaf.restart.clean", Boolean.toString(clean));
+ bundleContext.getBundle(0).stop();
+ } catch (Exception e) {
+ LOGGER.error("Reboot error", e);
}
}
}.start();
@@ -128,4 +130,40 @@ public class SystemServiceImpl implement
}
}
+ /**
+ * Convert a time string to sleep period (in millisecond).
+ *
+ * @param time the time string.
+ * @return the corresponding sleep period in millisecond.
+ */
+ private long timeToSleep(String time) throws Exception {
+ long sleep = 0;
+ if (time != null) {
+ if (!time.equals("now")) {
+ if (time.startsWith("+")) {
+ // delay in number of minutes provided
+ time = time.substring(1);
+ try {
+ sleep = Long.parseLong(time) * 60 * 1000;
+ } catch (Exception e) {
+ throw new IllegalArgumentException("Time " + time + " is not valid");
+ }
+ } else {
+ // try to parse the date in hh:mm
+ String[] strings = time.split(":");
+ if (strings.length != 2) {
+ throw new IllegalArgumentException("Time " + time + " is not valid");
+ }
+ GregorianCalendar currentDate = new GregorianCalendar();
+ GregorianCalendar shutdownDate = new GregorianCalendar(currentDate.get(Calendar.YEAR), currentDate.get(Calendar.MONTH), currentDate.get(Calendar.DATE), Integer.parseInt(strings[0]), Integer.parseInt(strings[1]));
+ if (shutdownDate.before(currentDate)) {
+ shutdownDate.set(Calendar.DATE, shutdownDate.get(Calendar.DATE) + 1);
+ }
+ sleep = shutdownDate.getTimeInMillis() - currentDate.getTimeInMillis();
+ }
+ }
+ }
+ return sleep;
+ }
+
}
Modified: karaf/trunk/system/management/src/main/java/org/apache/karaf/system/management/SystemMBean.java
URL: http://svn.apache.org/viewvc/karaf/trunk/system/management/src/main/java/org/apache/karaf/system/management/SystemMBean.java?rev=1209110&r1=1209109&r2=1209110&view=diff
==============================================================================
--- karaf/trunk/system/management/src/main/java/org/apache/karaf/system/management/SystemMBean.java (original)
+++ karaf/trunk/system/management/src/main/java/org/apache/karaf/system/management/SystemMBean.java Thu Dec 1 14:53:06 2011
@@ -21,8 +21,10 @@ package org.apache.karaf.system.manageme
*/
public interface SystemMBean {
- void shutdown() throws Exception;
- void shutdown(String time) throws Exception;
+ void halt() throws Exception;
+ void halt(String time) throws Exception;
+ void reboot() throws Exception;
+ void reboot(String time, boolean clean) throws Exception;
void setStartLevel(int startLevel) throws Exception;
int getStartLevel() throws Exception;
Modified: karaf/trunk/system/management/src/main/java/org/apache/karaf/system/management/internal/SystemMBeanImpl.java
URL: http://svn.apache.org/viewvc/karaf/trunk/system/management/src/main/java/org/apache/karaf/system/management/internal/SystemMBeanImpl.java?rev=1209110&r1=1209109&r2=1209110&view=diff
==============================================================================
--- karaf/trunk/system/management/src/main/java/org/apache/karaf/system/management/internal/SystemMBeanImpl.java (original)
+++ karaf/trunk/system/management/src/main/java/org/apache/karaf/system/management/internal/SystemMBeanImpl.java Thu Dec 1 14:53:06 2011
@@ -41,12 +41,20 @@ public class SystemMBeanImpl extends Sta
return this.systemService;
}
- public void shutdown() throws Exception {
- systemService.shutdown();
+ public void halt() throws Exception {
+ systemService.halt();
}
- public void shutdown(String time) throws Exception {
- systemService.shutdown(time);
+ public void halt(String time) throws Exception {
+ systemService.halt(time);
+ }
+
+ public void reboot() throws Exception {
+ systemService.reboot();
+ }
+
+ public void reboot(String time, boolean clean) throws Exception {
+ systemService.reboot(time, clean);
}
public void setStartLevel(int startLevel) throws Exception {
Re: svn commit: r1209110 - in /karaf/trunk: shell/dev/src/main/java/org/apache/karaf/shell/dev/
shell/dev/src/main/resources/OSGI-INF/blueprint/ system/commands/src/main/java/org/apache/karaf/system/commands/
system/core/src/main/java/org/apache/karaf/syst...
Posted by Glen Mazza <gm...@talend.com>.
+ @Option(name = "-h", aliases = "--halt", description = "Halt the Karaf container.", required =
I'm not sure what "halt" means in this case. (What is the difference
between system:shutdown and system:shutdown -h?) "Halt" just means
"stop", so it seems vague whether the Karaf process is being terminated
with the -h option, or still running but no longer responsive to
subsequent user input, or ?
@Option(name = "-r", aliases = "--reboot", description = "Reboot the Karaf container."
OK, but Karaf might be better off without a reboot option. For systems
that hold/run applications (Karaf, Tomcat, WebLogic, etc.) an admin IMO
should do a clean shutdown followed by an explicit restart from an
external script, rather than have it done internally by Karaf and risk
the prior shutdown not being completely clean, or the subsequent startup
not being initialized as if you restarted manually. So I'm not sure
many admins would use -reboot. Just my $0.02.
Regards,
Glen
On 12/01/2011 09:53 AM, jbonofre@apache.org wrote:
> Author: jbonofre
> Date: Thu Dec 1 14:53:06 2011
> New Revision: 1209110
>
> URL: http://svn.apache.org/viewvc?rev=1209110&view=rev
> Log:
> [KARAF-1073] Add support of -r (reboot) and -h (halt) options to the system:shutdown.
> system:shutdown command replaces the dev:reboot command.
>
> Removed:
> karaf/trunk/shell/dev/src/main/java/org/apache/karaf/shell/dev/Restart.java
> Modified:
> karaf/trunk/shell/dev/src/main/resources/OSGI-INF/blueprint/shell-dev.xml
> karaf/trunk/system/commands/src/main/java/org/apache/karaf/system/commands/Shutdown.java
> karaf/trunk/system/core/src/main/java/org/apache/karaf/system/SystemService.java
> karaf/trunk/system/core/src/main/java/org/apache/karaf/system/internal/SystemServiceImpl.java
> karaf/trunk/system/management/src/main/java/org/apache/karaf/system/management/SystemMBean.java
> karaf/trunk/system/management/src/main/java/org/apache/karaf/system/management/internal/SystemMBeanImpl.java
>
> Modified: karaf/trunk/shell/dev/src/main/resources/OSGI-INF/blueprint/shell-dev.xml
> URL: http://svn.apache.org/viewvc/karaf/trunk/shell/dev/src/main/resources/OSGI-INF/blueprint/shell-dev.xml?rev=1209110&r1=1209109&r2=1209110&view=diff
> ==============================================================================
> --- karaf/trunk/shell/dev/src/main/resources/OSGI-INF/blueprint/shell-dev.xml (original)
> +++ karaf/trunk/shell/dev/src/main/resources/OSGI-INF/blueprint/shell-dev.xml Thu Dec 1 14:53:06 2011
> @@ -33,9 +33,6 @@
> <action class="org.apache.karaf.shell.dev.PrintStackTraces" />
> </command>
> <command>
> -<action class="org.apache.karaf.shell.dev.Restart" />
> -</command>
> -<command>
> <action class="org.apache.karaf.shell.dev.SystemProperty" />
> </command>
> <command>
>
> Modified: karaf/trunk/system/commands/src/main/java/org/apache/karaf/system/commands/Shutdown.java
> URL: http://svn.apache.org/viewvc/karaf/trunk/system/commands/src/main/java/org/apache/karaf/system/commands/Shutdown.java?rev=1209110&r1=1209109&r2=1209110&view=diff
> ==============================================================================
> --- karaf/trunk/system/commands/src/main/java/org/apache/karaf/system/commands/Shutdown.java (original)
> +++ karaf/trunk/system/commands/src/main/java/org/apache/karaf/system/commands/Shutdown.java Thu Dec 1 14:53:06 2011
> @@ -31,6 +31,15 @@ public class Shutdown extends OsgiComman
> @Option(name = "-f", aliases = "--force", description = "Force the shutdown without confirmation message.", required = false, multiValued = false)
> boolean force = false;
>
> + @Option(name = "-r", aliases = "--reboot", description = "Reboot the Karaf container.", required = false, multiValued = false)
> + boolean reboot = false;
> +
> + @Option(name = "-h", aliases = "--halt", description = "Halt the Karaf container.", required = false, multiValued = false)
> + boolean halt = false;
> +
> + @Option(name = "-c", aliases = "--clean", description = "Clean the Karaf container (working directory) during reboot.", required = false, multiValued = false)
> + boolean clean = false;
> +
> @Argument(name = "time", index = 0, description = "Shutdown after a specified delay. The time argument can have different" +
> " formats. First, it can be an abolute time in the format hh:mm, in which hh is the hour (1 or 2 digits) and mm" +
> " is the minute of the hour (in two digits). Second, it can be in the format +m, in which m is the number of minutes" +
> @@ -44,15 +53,24 @@ public class Shutdown extends OsgiComman
> }
>
> protected Object doExecute() throws Exception {
> +
> if (force) {
> - systemService.shutdown(time);
> + if (reboot) {
> + systemService.reboot(time, clean);
> + } else {
> + systemService.halt(time);
> + }
> return null;
> }
>
> for (; ; ) {
> StringBuffer sb = new StringBuffer();
> String karafName = System.getProperty("karaf.name");
> - System.err.println(String.format("Confirm: shutdown instance %s (yes/no): ",karafName));
> + if (reboot) {
> + System.err.println(String.format("Confirm: reboot instance %s (yes/no): ",karafName));
> + } else {
> + System.err.println(String.format("Confirm: halt instance %s (yes/no): ",karafName));
> + }
> System.err.flush();
> for (; ; ) {
> int c = session.getKeyboard().read();
> @@ -68,7 +86,11 @@ public class Shutdown extends OsgiComman
> }
> String str = sb.toString();
> if (str.equals("yes")) {
> - systemService.shutdown(time);
> + if (reboot) {
> + systemService.reboot(time, clean);
> + } else {
> + systemService.halt(time);
> + }
> }
> return null;
> }
>
> Modified: karaf/trunk/system/core/src/main/java/org/apache/karaf/system/SystemService.java
> URL: http://svn.apache.org/viewvc/karaf/trunk/system/core/src/main/java/org/apache/karaf/system/SystemService.java?rev=1209110&r1=1209109&r2=1209110&view=diff
> ==============================================================================
> --- karaf/trunk/system/core/src/main/java/org/apache/karaf/system/SystemService.java (original)
> +++ karaf/trunk/system/core/src/main/java/org/apache/karaf/system/SystemService.java Thu Dec 1 14:53:06 2011
> @@ -22,19 +22,37 @@ package org.apache.karaf.system;
> public interface SystemService {
>
> /**
> - * Shutdown the Karaf container.
> + * Halt the Karaf container.
> */
> - void shutdown() throws Exception;
> + void halt() throws Exception;
>
> /**
> - * Shutdown the Karaf container.
> + * Halt the Karaf container.
> *
> * @param time shutdown delay. The time argument can have different formats.
> - * First, it can be an abolute time in the format hh:mm, in which hh is the hour (1 or 2 digits) and mm
> + * First, it can be an absolute time in the format hh:mm, in which hh is the hour (1 or 2 digits) and mm
> * is the minute of the hour (in two digits). Second, it can be in the format +m, in which m is the number of minutes
> * to wait. The word now is an alias for +0.
> */
> - void shutdown(String time) throws Exception;
> + void halt(String time) throws Exception;
> +
> + /**
> + * Reboot the Karaf container.
> + *
> + * @throws Exception
> + */
> + void reboot() throws Exception;
> +
> + /**
> + * Reboot the Karaf container.
> + *
> + * @param time reboot delay. The time argument can have different formats.
> + * First, it can be an absolute time in the format hh:mm, in which hh is the hour (1 or 2 digits) and mm
> + * is the minute of the hour (in two digits). Second, it can be in the format +m, in which m is the number of minutes
> + * to wait. The word now is an alias for +0.
> + * @param clean Force a clean restart by deleting the working directory.
> + */
> + void reboot(String time, boolean clean) throws Exception;
>
> /**
> * Set the system start level.
>
> Modified: karaf/trunk/system/core/src/main/java/org/apache/karaf/system/internal/SystemServiceImpl.java
> URL: http://svn.apache.org/viewvc/karaf/trunk/system/core/src/main/java/org/apache/karaf/system/internal/SystemServiceImpl.java?rev=1209110&r1=1209109&r2=1209110&view=diff
> ==============================================================================
> --- karaf/trunk/system/core/src/main/java/org/apache/karaf/system/internal/SystemServiceImpl.java (original)
> +++ karaf/trunk/system/core/src/main/java/org/apache/karaf/system/internal/SystemServiceImpl.java Thu Dec 1 14:53:06 2011
> @@ -43,38 +43,20 @@ public class SystemServiceImpl implement
> return this.bundleContext;
> }
>
> - public void shutdown() throws Exception {
> - shutdown(null);
> + public void halt() throws Exception {
> + halt(null);
> }
>
> - public void shutdown(String time) throws Exception {
> - long sleep = 0;
> - if (time != null) {
> - if (!time.equals("now")) {
> - if (time.startsWith("+")) {
> - // delay in number of minutes provided
> - time = time.substring(1);
> - try {
> - sleep = Long.parseLong(time) * 60 * 1000;
> - } catch (Exception e) {
> - throw new IllegalArgumentException("Time " + time + " is not valid");
> - }
> - } else {
> - // try to parse the date in hh:mm
> - String[] strings = time.split(":");
> - if (strings.length != 2) {
> - throw new IllegalArgumentException("Time " + time + " is not valid");
> - }
> - GregorianCalendar currentDate = new GregorianCalendar();
> - GregorianCalendar shutdownDate = new GregorianCalendar(currentDate.get(Calendar.YEAR), currentDate.get(Calendar.MONTH), currentDate.get(Calendar.DATE), Integer.parseInt(strings[0]), Integer.parseInt(strings[1]));
> - if (shutdownDate.before(currentDate)) {
> - shutdownDate.set(Calendar.DATE, shutdownDate.get(Calendar.DATE) + 1);
> - }
> - sleep = shutdownDate.getTimeInMillis() - currentDate.getTimeInMillis();
> - }
> - }
> - }
> - shutdown(sleep);
> + public void halt(String time) throws Exception {
> + shutdown(timeToSleep(time));
> + }
> +
> + public void reboot() throws Exception {
> + reboot(null, false);
> + }
> +
> + public void reboot(String time, boolean cleanup) throws Exception {
> + reboot(timeToSleep(time), true);
> }
>
> private void shutdown(final long sleep) {
> @@ -83,12 +65,32 @@ public class SystemServiceImpl implement
> try {
> if (sleep> 0) {
> LOGGER.info("Shutdown in " + sleep / 1000 / 60 + " minute(s)");
> + System.err.println("Shutdown in " + sleep / 1000 / 60 + " minutes(s)");
> }
> Thread.sleep(sleep);
> Bundle bundle = getBundleContext().getBundle(0);
> bundle.stop();
> } catch (Exception e) {
> - LOGGER.error("Error when shutting down", e);
> + LOGGER.error("Halt error", e);
> + }
> + }
> + }.start();
> + }
> +
> + private void reboot(final long sleep, final boolean clean) {
> + new Thread() {
> + public void run() {
> + try {
> + if (sleep> 0) {
> + LOGGER.info("Reboot in " + sleep / 1000 / 60 + " minute(s)");
> + System.err.println("Reboot in " + sleep / 1000 / 60 + " minute(s)");
> + }
> + Thread.sleep(sleep);
> + System.setProperty("karaf.restart", "true");
> + System.setProperty("karaf.restart.clean", Boolean.toString(clean));
> + bundleContext.getBundle(0).stop();
> + } catch (Exception e) {
> + LOGGER.error("Reboot error", e);
> }
> }
> }.start();
> @@ -128,4 +130,40 @@ public class SystemServiceImpl implement
> }
> }
>
> + /**
> + * Convert a time string to sleep period (in millisecond).
> + *
> + * @param time the time string.
> + * @return the corresponding sleep period in millisecond.
> + */
> + private long timeToSleep(String time) throws Exception {
> + long sleep = 0;
> + if (time != null) {
> + if (!time.equals("now")) {
> + if (time.startsWith("+")) {
> + // delay in number of minutes provided
> + time = time.substring(1);
> + try {
> + sleep = Long.parseLong(time) * 60 * 1000;
> + } catch (Exception e) {
> + throw new IllegalArgumentException("Time " + time + " is not valid");
> + }
> + } else {
> + // try to parse the date in hh:mm
> + String[] strings = time.split(":");
> + if (strings.length != 2) {
> + throw new IllegalArgumentException("Time " + time + " is not valid");
> + }
> + GregorianCalendar currentDate = new GregorianCalendar();
> + GregorianCalendar shutdownDate = new GregorianCalendar(currentDate.get(Calendar.YEAR), currentDate.get(Calendar.MONTH), currentDate.get(Calendar.DATE), Integer.parseInt(strings[0]), Integer.parseInt(strings[1]));
> + if (shutdownDate.before(currentDate)) {
> + shutdownDate.set(Calendar.DATE, shutdownDate.get(Calendar.DATE) + 1);
> + }
> + sleep = shutdownDate.getTimeInMillis() - currentDate.getTimeInMillis();
> + }
> + }
> + }
> + return sleep;
> + }
> +
> }
>
> Modified: karaf/trunk/system/management/src/main/java/org/apache/karaf/system/management/SystemMBean.java
> URL: http://svn.apache.org/viewvc/karaf/trunk/system/management/src/main/java/org/apache/karaf/system/management/SystemMBean.java?rev=1209110&r1=1209109&r2=1209110&view=diff
> ==============================================================================
> --- karaf/trunk/system/management/src/main/java/org/apache/karaf/system/management/SystemMBean.java (original)
> +++ karaf/trunk/system/management/src/main/java/org/apache/karaf/system/management/SystemMBean.java Thu Dec 1 14:53:06 2011
> @@ -21,8 +21,10 @@ package org.apache.karaf.system.manageme
> */
> public interface SystemMBean {
>
> - void shutdown() throws Exception;
> - void shutdown(String time) throws Exception;
> + void halt() throws Exception;
> + void halt(String time) throws Exception;
> + void reboot() throws Exception;
> + void reboot(String time, boolean clean) throws Exception;
>
> void setStartLevel(int startLevel) throws Exception;
> int getStartLevel() throws Exception;
>
> Modified: karaf/trunk/system/management/src/main/java/org/apache/karaf/system/management/internal/SystemMBeanImpl.java
> URL: http://svn.apache.org/viewvc/karaf/trunk/system/management/src/main/java/org/apache/karaf/system/management/internal/SystemMBeanImpl.java?rev=1209110&r1=1209109&r2=1209110&view=diff
> ==============================================================================
> --- karaf/trunk/system/management/src/main/java/org/apache/karaf/system/management/internal/SystemMBeanImpl.java (original)
> +++ karaf/trunk/system/management/src/main/java/org/apache/karaf/system/management/internal/SystemMBeanImpl.java Thu Dec 1 14:53:06 2011
> @@ -41,12 +41,20 @@ public class SystemMBeanImpl extends Sta
> return this.systemService;
> }
>
> - public void shutdown() throws Exception {
> - systemService.shutdown();
> + public void halt() throws Exception {
> + systemService.halt();
> }
>
> - public void shutdown(String time) throws Exception {
> - systemService.shutdown(time);
> + public void halt(String time) throws Exception {
> + systemService.halt(time);
> + }
> +
> + public void reboot() throws Exception {
> + systemService.reboot();
> + }
> +
> + public void reboot(String time, boolean clean) throws Exception {
> + systemService.reboot(time, clean);
> }
>
> public void setStartLevel(int startLevel) throws Exception {
>
>
--
Glen Mazza
Talend Community Coders
http://coders.talend.com
blog: http://www.jroller.com/gmazza