[jboss-cvs] JBossAS SVN: r79974 - projects/test/trunk/src/main/java/org/jboss/ant/taskdefs/server.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Thu Oct 23 08:56:56 EDT 2008
Author: akostadinov
Date: 2008-10-23 08:56:55 -0400 (Thu, 23 Oct 2008)
New Revision: 79974
Modified:
projects/test/trunk/src/main/java/org/jboss/ant/taskdefs/server/ConfigManagerTask.java
projects/test/trunk/src/main/java/org/jboss/ant/taskdefs/server/StartServerTask.java
projects/test/trunk/src/main/java/org/jboss/ant/taskdefs/server/StopServerTask.java
Log:
JBASM-3 - set thread context classloader because of the server manager changes
Modified: projects/test/trunk/src/main/java/org/jboss/ant/taskdefs/server/ConfigManagerTask.java
===================================================================
--- projects/test/trunk/src/main/java/org/jboss/ant/taskdefs/server/ConfigManagerTask.java 2008-10-23 12:23:03 UTC (rev 79973)
+++ projects/test/trunk/src/main/java/org/jboss/ant/taskdefs/server/ConfigManagerTask.java 2008-10-23 12:56:55 UTC (rev 79974)
@@ -22,9 +22,12 @@
package org.jboss.ant.taskdefs.server;
import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Project;
import org.apache.tools.ant.Task;
+
import org.jboss.jbossas.servermanager.Server;
import org.jboss.jbossas.servermanager.ServerManager;
+
/**
* A ConfigManagerTask. Delegates to the Server manager.
*
@@ -47,7 +50,24 @@
{
if (ConfigManagerTask.manager == null)
{
- ConfigManagerTask.manager = new ServerManager();
+ // set TCL and save the original TCL to restore it later
+ Thread curThread = Thread.currentThread();
+ ClassLoader orgCl = curThread.getContextClassLoader();
+ curThread.setContextClassLoader(getClassLoader());
+
+ /*
+ Create ServerManager with the appropriate TCL, otherwise
+ the clean-up thread wouldn't be able to shutdown servers
+ cleanly. Then reset the context classloader.
+ */
+ try
+ {
+ ConfigManagerTask.manager = new ServerManager();
+ }
+ finally
+ {
+ curThread.setContextClassLoader(orgCl);
+ }
}
}
@@ -63,6 +83,29 @@
}
/**
+ * Get Project's server manager.
+ *
+ * @return the server manager
+ */
+ protected static ServerManager getServerManager(Project project)
+ {
+ ServerManager manager = (ServerManager) project.getReference(MANAGER_REF);
+ if ( manager == null ) throw new BuildException("Can't find reference to server manager. Consider context you execute server tasks.");
+
+ return manager;
+ }
+
+ /**
+ * Get Server Manager's ClassLoader.
+ *
+ * @return the class loader aware of server manager dependencies
+ */
+ protected static ClassLoader getClassLoader()
+ {
+ return ServerManager.class.getClassLoader();
+ }
+
+ /**
* Add a server.
*
* @param server the server
@@ -109,4 +152,4 @@
{
ConfigManagerTask.manager.setUdpGroup(udpGroup);
}
-}
\ No newline at end of file
+}
Modified: projects/test/trunk/src/main/java/org/jboss/ant/taskdefs/server/StartServerTask.java
===================================================================
--- projects/test/trunk/src/main/java/org/jboss/ant/taskdefs/server/StartServerTask.java 2008-10-23 12:23:03 UTC (rev 79973)
+++ projects/test/trunk/src/main/java/org/jboss/ant/taskdefs/server/StartServerTask.java 2008-10-23 12:56:55 UTC (rev 79974)
@@ -45,10 +45,30 @@
public void execute() throws BuildException
{
- ServerManager manager = (ServerManager) getProject().getReference(ConfigManagerTask.MANAGER_REF);
- if ( manager == null ) throw new BuildException("Can't find reference to server manager. Consider context you execute server tasks.");
+ // set TCL and save the original TCL to restore it later
+ Thread curThread = Thread.currentThread();
+ ClassLoader orgCl = curThread.getContextClassLoader();
+ curThread.setContextClassLoader(ConfigManagerTask.getClassLoader());
+
+ /*
+ Start server with the correct TCL.
+ Not yet needed but to avoid future confusion.
+ */
try
{
+ startServer();
+ }
+ finally
+ {
+ curThread.setContextClassLoader(orgCl);
+ }
+ }
+
+ public void startServer() throws BuildException
+ {
+ ServerManager manager = ConfigManagerTask.getServerManager(getProject());
+ try
+ {
manager.startServer(name);
}
catch (IOException e)
@@ -66,4 +86,4 @@
{
this.name = name;
}
-}
\ No newline at end of file
+}
Modified: projects/test/trunk/src/main/java/org/jboss/ant/taskdefs/server/StopServerTask.java
===================================================================
--- projects/test/trunk/src/main/java/org/jboss/ant/taskdefs/server/StopServerTask.java 2008-10-23 12:23:03 UTC (rev 79973)
+++ projects/test/trunk/src/main/java/org/jboss/ant/taskdefs/server/StopServerTask.java 2008-10-23 12:56:55 UTC (rev 79974)
@@ -49,10 +49,27 @@
public void execute() throws BuildException
{
- ServerManager manager = (ServerManager) getProject().getReference(ConfigManagerTask.MANAGER_REF);
- if ( manager == null ) throw new BuildException("Can't find reference to server manager. Consider context you execute server tasks.");
+ // set TCL and save the original TCL to restore it later
+ Thread curThread = Thread.currentThread();
+ ClassLoader orgCl = curThread.getContextClassLoader();
+ curThread.setContextClassLoader(ConfigManagerTask.getClassLoader());
+
+ // Stop server with the correct TCL.
try
{
+ stopServer();
+ }
+ finally
+ {
+ curThread.setContextClassLoader(orgCl);
+ }
+ }
+
+ public void stopServer() throws BuildException
+ {
+ ServerManager manager = ConfigManagerTask.getServerManager(getProject());
+ try
+ {
manager.stopServer(name);
}
catch (IOException e)
@@ -87,4 +104,4 @@
{
this.failonerror = flag;
}
-}
\ No newline at end of file
+}
More information about the jboss-cvs-commits
mailing list