[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