admin@glassfish.java.net

GlassFish process exit

From: Tom Mueller <tom.mueller_at_oracle.com>
Date: Fri, 29 Oct 2010 08:37:20 -0500

  Byron,
I'd like to discuss this commit at the next admin iteam meeting on Tuesday.
http://wikis.sun.com/display/GlassFish/AdminIteam
Specifically, what we now expect for fixing other related bugs.

What this is saying is that the GlassFish process will never exit by
returning from the main thread. It will always either do a
System.exit() or be killed. This effects several other issues:

13780 - for getting all threads to be daemons (Tom) - dup of 13957
13957 - Non-daemon threads prevent clean shutdown (Byron)
13593 - logging is terminated too early during appserver shutdown (Naman)
13592 - asadmin stop-local-instance does not stop instance with
outstanding ejb invocation (Marina)

Your comment in issue 13951 about not having control over apps creating
non-daemon threads seems to be the important issue here.

Tom

On 10/28/2010 7:12 PM, bnevins_at_dev.java.net wrote:
> Author: bnevins
> Date: 2010-10-29 00:12:29+0000
> New Revision: 42283
>
> Modified:
> trunk/v3/core/kernel/src/main/java/com/sun/enterprise/v3/admin/StopDomainCommand.java
> trunk/v3/core/kernel/src/main/java/com/sun/enterprise/v3/admin/StopServer.java
>
> Log:
> --IT 13951
> --force is now false by default for stop-domain and stop-instance
> If it is false then we call Syste.exit()
> If it is true we do an OS-level call to kill on our pid
>
>
>
> Modified: trunk/v3/core/kernel/src/main/java/com/sun/enterprise/v3/admin/StopDomainCommand.java
> Url: https://glassfish-svn.dev.java.net/source/browse/glassfish-svn/trunk/v3/core/kernel/src/main/java/com/sun/enterprise/v3/admin/StopDomainCommand.java?view=diff&rev=42283&p1=trunk/v3/core/kernel/src/main/java/com/sun/enterprise/v3/admin/StopDomainCommand.java&p2=trunk/v3/core/kernel/src/main/java/com/sun/enterprise/v3/admin/StopDomainCommand.java&r1=42282&r2=42283
> ==============================================================================
> --- trunk/v3/core/kernel/src/main/java/com/sun/enterprise/v3/admin/StopDomainCommand.java (original)
> +++ trunk/v3/core/kernel/src/main/java/com/sun/enterprise/v3/admin/StopDomainCommand.java 2010-10-29 00:12:29+0000
> @@ -77,7 +77,7 @@
> @Inject
> ServerEnvironment env;
>
> - @Param(optional=true, defaultValue="true")
> + @Param(optional=true, defaultValue="false")
> Boolean force;
>
>
>
> Modified: trunk/v3/core/kernel/src/main/java/com/sun/enterprise/v3/admin/StopServer.java
> Url: https://glassfish-svn.dev.java.net/source/browse/glassfish-svn/trunk/v3/core/kernel/src/main/java/com/sun/enterprise/v3/admin/StopServer.java?view=diff&rev=42283&p1=trunk/v3/core/kernel/src/main/java/com/sun/enterprise/v3/admin/StopServer.java&p2=trunk/v3/core/kernel/src/main/java/com/sun/enterprise/v3/admin/StopServer.java&r1=42282&r2=42283
> ==============================================================================
> --- trunk/v3/core/kernel/src/main/java/com/sun/enterprise/v3/admin/StopServer.java (original)
> +++ trunk/v3/core/kernel/src/main/java/com/sun/enterprise/v3/admin/StopServer.java 2010-10-29 00:12:29+0000
> @@ -41,7 +41,12 @@
>
> import com.sun.enterprise.module.ModulesRegistry;
> import com.sun.enterprise.module.Module;
> +import com.sun.enterprise.universal.process.ProcessManager;
> +import com.sun.enterprise.universal.process.ProcessManagerException;
> +import com.sun.enterprise.universal.process.ProcessUtils;
> import com.sun.enterprise.util.LocalStringManagerImpl;
> +import com.sun.enterprise.util.OS;
> +import java.util.logging.Level;
> import java.util.logging.Logger;
>
> import java.util.Collection;
> @@ -60,7 +65,6 @@
> */
> protected final void doExecute(ModulesRegistry registry, Logger logger, boolean force) {
> logger.info(localStrings.getLocalString("stop.domain.init", "Server shutdown initiated"));
> - boolean noSysExit = Boolean.parseBoolean(System.getenv("AS_NO_SYSTEM_EXIT"));
>
> Collection<Module> modules = registry.getModules(
> "org.glassfish.core.glassfish");
> @@ -72,9 +76,32 @@
> logger.warning(modules.size() + " no of primordial modules found");
> }
>
> - if (!noSysExit&& force) {
> + if(force)
> + kill();
> + else
> System.exit(0);
> - }
> }
> +
> private final static LocalStringManagerImpl localStrings = new LocalStringManagerImpl(StopServer.class);
> +
> + /*
> + * No more Mr. Nice Guy!!
> + * we should NOT return from here!
> + *
> + */
> + private void kill() {
> + int pid = ProcessUtils.getPid();
> + ProcessManager pm = null;
> + try {
> + if (OS.isWindowsForSure())
> + pm = new ProcessManager("taskkill", "/pid", "" + pid);
> + else
> + pm = new ProcessManager("kill", "-9", "" + pid);
> +
> + pm.execute();
> + }
> + catch (ProcessManagerException ex) {
> + // ignore
> + }
> + }
> }
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: commits-unsubscribe_at_glassfish-svn.dev.java.net
> For additional commands, e-mail: commits-help_at_glassfish-svn.dev.java.net
>