You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by de...@apache.org on 2005/11/04 11:47:54 UTC

svn commit: r330790 - in /webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/deployment: ./ repository/util/

Author: deepal
Date: Fri Nov  4 02:47:43 2005
New Revision: 330790

URL: http://svn.apache.org/viewcvs?rev=330790&view=rev
Log:
revert back to my original classloader hierarchy 

Modified:
    webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/deployment/DeploymentEngine.java
    webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/deployment/ModuleBuilder.java
    webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/deployment/ServiceBuilder.java
    webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/deployment/ServiceGroupBuilder.java
    webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/deployment/repository/util/ArchiveFileData.java
    webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/deployment/repository/util/ArchiveReader.java

Modified: webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/deployment/DeploymentEngine.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/deployment/DeploymentEngine.java?rev=330790&r1=330789&r2=330790&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/deployment/DeploymentEngine.java (original)
+++ webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/deployment/DeploymentEngine.java Fri Nov  4 02:47:43 2005
@@ -25,13 +25,8 @@
 import org.apache.axis2.deployment.scheduler.Scheduler;
 import org.apache.axis2.deployment.scheduler.SchedulerTask;
 import org.apache.axis2.deployment.util.PhasesInfo;
-import org.apache.axis2.description.AxisOperation;
-import org.apache.axis2.description.AxisService;
-import org.apache.axis2.description.AxisServiceGroup;
-import org.apache.axis2.description.Flow;
-import org.apache.axis2.description.HandlerDescription;
-import org.apache.axis2.description.ModuleDescription;
-import org.apache.axis2.description.Parameter;
+import org.apache.axis2.deployment.util.Utils;
+import org.apache.axis2.description.*;
 import org.apache.axis2.engine.AxisConfiguration;
 import org.apache.axis2.engine.AxisConfigurationImpl;
 import org.apache.axis2.engine.Handler;
@@ -43,19 +38,8 @@
 
 import javax.xml.namespace.QName;
 import javax.xml.stream.XMLStreamException;
-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.PrintWriter;
-import java.io.StringWriter;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
+import java.io.*;
+import java.util.*;
 
 
 public class DeploymentEngine implements DeploymentConstants {
@@ -90,6 +74,7 @@
      */
 
     private String folderName;
+    private File repository;
 
     private String engineConfigName;
 
@@ -133,7 +118,7 @@
         }
         this.folderName = repositoryName;
         axis2repository = repositoryName;
-        File repository = new File(repositoryName);
+        repository = new File(repositoryName);
         if (!repository.exists()) {
             repository.mkdirs();
             File services = new File(repository, "services");
@@ -161,7 +146,7 @@
                 } catch (IOException e) {
                     throw new DeploymentException(e);
                 } finally {
-                    if( out!=null) {
+                    if (out != null) {
                         try {
                             out.close();
                         } catch (IOException e) {
@@ -224,8 +209,10 @@
         try {
             InputStream in = new FileInputStream(tempfile);
             axisConfig = createEngineConfig();
-            AxisConfigBuilder builder =new AxisConfigBuilder(in,this,axisConfig);
+            AxisConfigBuilder builder = new AxisConfigBuilder(in, this, axisConfig);
             builder.populateConfig();
+            //setting the CLs
+            setClassLoaders(repository);
         } catch (FileNotFoundException e) {
             throw new DeploymentException(e);
         }
@@ -267,11 +254,13 @@
                     cl.getResourceAsStream(AXIS2_CONFIGURATION_RESOURCE);
         }
         axisConfig = createEngineConfig();
-        AxisConfigBuilder builder =new AxisConfigBuilder(in,this,axisConfig);
+        AxisConfigBuilder builder = new AxisConfigBuilder(in, this, axisConfig);
         builder.populateConfig();
         if (isRepositoryExist) {
             hotDeployment = false;
             hotUpdate = false;
+            //setting CLs
+            setClassLoaders(repository);
             new RepositoryListenerImpl(folderName, this);
         }
         try {
@@ -289,7 +278,7 @@
     private void checkClientHome(String clientHome) throws DeploymentException {
         String clientXML = SERVER_XML_FILE;
         this.folderName = clientHome;
-        File repository = new File(clientHome);
+        repository = new File(clientHome);
         if (!repository.exists()) {
             repository.mkdirs();
             File services = new File(repository, "services");
@@ -377,9 +366,9 @@
     }
 
 
-    private void addNewService(AxisServiceGroup axisServiceMetaData) throws AxisFault {
+    private void addnewService(AxisServiceGroup axisServiceMetaData) throws AxisFault {
 //        Iterator services = currentArchiveFile.getService().values().iterator();
-        Iterator services = currentArchiveFile.getDeployableServices().iterator();
+        Iterator services = currentArchiveFile.getDeploybleServices().iterator();
         while (services.hasNext()) {
             AxisService axisService = (AxisService) services.next();
             loadServiceProperties(axisService);
@@ -466,7 +455,7 @@
 
 
     private void loadModuleClass(ModuleDescription module) throws AxisFault {
-        Class moduleClass ;
+        Class moduleClass;
         try {
             String readInClass = currentArchiveFile.getModuleClass();
             if (readInClass != null && !"".equals(readInClass)) {
@@ -488,7 +477,7 @@
         ClassLoader loader1 = currentArchiveFile.getClassLoader();
         for (int j = 0; j < count; j++) {
             HandlerDescription handlermd = flow.getHandler(j);
-            Class handlerClass ;
+            Class handlerClass;
             Handler handler;
             handlerClass = getHandlerClass(handlermd.getClassName(), loader1);
             try {
@@ -507,7 +496,7 @@
 
 
     public Class getHandlerClass(String className, ClassLoader loader1) throws AxisFault {
-        Class handlerClass ;
+        Class handlerClass;
         try {
             handlerClass = Class.forName(className, true, loader1);
         } catch (ClassNotFoundException e) {
@@ -568,41 +557,38 @@
                     StringWriter errorWriter = new StringWriter();
                     switch (type) {
                         case SERVICE:
-                            currentArchiveFile.setClassLoader(explodedDir);
+                            currentArchiveFile.setClassLoader(explodedDir,axisConfig.getServiceClassLoader());
                             archiveReader = new ArchiveReader();
                             String serviceStatus = "";
                             try {
-                                archiveReader.processWSDLs(currentArchiveFile,this);
+                                archiveReader.processWSDLs(currentArchiveFile, this);
                                 // AxisService service = archiveReader.createService(currentArchiveFile.getAbsolutePath());
                                 AxisServiceGroup sericeGroup =
                                         new AxisServiceGroup(axisConfig);
                                 archiveReader.processServiceGroup(currentArchiveFile.getAbsolutePath(),
                                         this,
-                                        sericeGroup,explodedDir);
-                                addNewService(sericeGroup);
+                                        sericeGroup, explodedDir);
+                                addnewService(sericeGroup);
                                 log.info(Messages.getMessage(
                                         DeploymentErrorMsgs.DEPLOYING_WS, currentArchiveFile.getName()));
                             } catch (DeploymentException de) {
                                 log.info(Messages.getMessage(DeploymentErrorMsgs.IN_VALID_SERVICE,
-                                        currentArchiveFile.getName(),de.getMessage()));
+                                        currentArchiveFile.getName(), de.getMessage()));
                                 PrintWriter error_ptintWriter = new PrintWriter(errorWriter);
                                 de.printStackTrace(error_ptintWriter);
                                 serviceStatus = "Error:\n" +
                                         errorWriter.toString();
-                                de.printStackTrace();
-
                             } catch (AxisFault axisFault) {
                                 log.info(Messages.getMessage(DeploymentErrorMsgs.IN_VALID_SERVICE,
-                                        currentArchiveFile.getName(),axisFault.getMessage()));
+                                        currentArchiveFile.getName(), axisFault.getMessage()));
                                 PrintWriter error_ptintWriter = new PrintWriter(errorWriter);
                                 axisFault.printStackTrace(error_ptintWriter);
                                 serviceStatus = "Error:\n" +
                                         errorWriter.toString();
 
-                                axisFault.printStackTrace();
                             } catch (Exception e) {
                                 log.info(Messages.getMessage(DeploymentErrorMsgs.IN_VALID_SERVICE,
-                                        currentArchiveFile.getName(),e.getMessage()));
+                                        currentArchiveFile.getName(), e.getMessage()));
                                 PrintWriter error_ptintWriter = new PrintWriter(errorWriter);
                                 e.printStackTrace(error_ptintWriter);
                                 serviceStatus = "Error:\n" +
@@ -616,7 +602,7 @@
                             }
                             break;
                         case MODULE:
-                            currentArchiveFile.setClassLoader(explodedDir);
+                            currentArchiveFile.setClassLoader(explodedDir,axisConfig.getModuleClassLoader());
                             archiveReader = new ArchiveReader();
                             String moduleStatus = "";
                             try {
@@ -624,7 +610,7 @@
                                 metaData.setParent(axisConfig);
                                 archiveReader.readModuleArchive(currentArchiveFile.getAbsolutePath(),
                                         this,
-                                        metaData,explodedDir);
+                                        metaData, explodedDir);
                                 addNewModule(metaData);
                                 log.info(Messages.getMessage(DeploymentErrorMsgs.DEPLOYING_MODULE,
                                         metaData.getName().getLocalPart()));
@@ -696,7 +682,7 @@
      */
     private String getAxisServiceName(String fileName) {
         char seperator = '.';
-        String value ;
+        String value;
         int index = fileName.indexOf(seperator);
         if (index > 0) {
             value = fileName.substring(0, index);
@@ -756,16 +742,16 @@
      * @throws DeploymentException
      */
     public AxisService buildService(AxisService axisService,
-                                           InputStream serviceInputStream,
-                                           ClassLoader classLoader) throws DeploymentException {
+                                    InputStream serviceInputStream,
+                                    ClassLoader classLoader) throws DeploymentException {
         try {
             currentArchiveFile = new ArchiveFileData(SERVICE, "");
             currentArchiveFile.setClassLoader(classLoader);
 
-            ServiceBuilder builder = new ServiceBuilder(serviceInputStream,this,axisService);
+            ServiceBuilder builder = new ServiceBuilder(serviceInputStream, this, axisService);
             builder.populateService(builder.buildOM());
             loadServiceProperties(axisService);
-        }  catch (AxisFault axisFault) {
+        } catch (AxisFault axisFault) {
             throw new DeploymentException(axisFault);
         } catch (XMLStreamException e) {
             throw new DeploymentException(e);
@@ -784,12 +770,12 @@
     public ModuleDescription buildModule(File modulearchive, AxisConfiguration config) throws DeploymentException {
         ModuleDescription axismodule;
         try {
-            this.setPhasesinfo(((AxisConfigurationImpl)config).getPhasesinfo());
+            this.setPhasesinfo(((AxisConfigurationImpl) config).getPhasesinfo());
             currentArchiveFile = new ArchiveFileData(modulearchive, MODULE);
             axismodule = new ModuleDescription();
             ArchiveReader archiveReader = new ArchiveReader();
-            currentArchiveFile.setClassLoader(false);
-            archiveReader.readModuleArchive(currentArchiveFile.getAbsolutePath(), this, axismodule,false);
+            currentArchiveFile.setClassLoader(false,config.getModuleClassLoader());
+            archiveReader.readModuleArchive(currentArchiveFile.getAbsolutePath(), this, axismodule, false);
             Flow inflow = axismodule.getInFlow();
             if (inflow != null) {
                 addFlowHandlers(inflow);
@@ -815,4 +801,44 @@
         return axismodule;
     }
 
+    /**
+     * To set the all the classLoader hierarchy this method can be used , the top most parenet is
+     * CCL then SCL(system Class Loader)
+     * CCL
+     * :
+     * SCL
+     * :  :
+     * MCCL  SCCL
+     * :      :
+     * MCL    SCL
+     * <p/>
+     * <p/>
+     * MCCL :  module common class loader
+     * SCCL : Service commin class loader
+     * MCL : module class loader
+     * SCL  : Service class loader
+     *
+     * @param axis2repo : The repository folder of Axis2
+     * @throws DeploymentException
+     */
+    private void setClassLoaders(File axis2repo) throws DeploymentException {
+        ClassLoader sysClassLoader = Utils.getClassLoader(
+                Thread.currentThread().getContextClassLoader(), axis2repo);
+        axisConfig.setSystemClassLoader(sysClassLoader);
+
+        File services = new File(axis2repo, "services");
+        if (services.exists()) {
+            axisConfig.setServiceClassLoader(Utils.getClassLoader(
+                    axisConfig.getSystemClassLoader(), services));
+        } else {
+            axisConfig.setServiceClassLoader(axisConfig.getSystemClassLoader());
+        }
+        File modules = new File(axis2repo, "modules");
+        if (modules.exists()) {
+            axisConfig.setModuleClassLoader(Utils.getClassLoader(
+                    axisConfig.getSystemClassLoader(), modules));
+        } else {
+            axisConfig.setModuleClassLoader(axisConfig.getSystemClassLoader());
+        }
+    }
 }

Modified: webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/deployment/ModuleBuilder.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/deployment/ModuleBuilder.java?rev=330790&r1=330789&r2=330790&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/deployment/ModuleBuilder.java (original)
+++ webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/deployment/ModuleBuilder.java Fri Nov  4 02:47:43 2005
@@ -115,9 +115,9 @@
 
             //processing Operations
             Iterator op_itr = moduleElement.getChildrenWithName(new QName(OPRATIONST));
-            ArrayList opeartions = processOperations(op_itr);
-            for (int i = 0; i < opeartions.size(); i++) {
-                AxisOperation opeartion = (AxisOperation) opeartions.get(i);
+            ArrayList operations = processOperations(op_itr);
+            for (int i = 0; i < operations.size(); i++) {
+                AxisOperation opeartion = (AxisOperation) operations.get(i);
                 module.addOperation(opeartion);
             }
 

Modified: webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/deployment/ServiceBuilder.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/deployment/ServiceBuilder.java?rev=330790&r1=330789&r2=330790&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/deployment/ServiceBuilder.java (original)
+++ webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/deployment/ServiceBuilder.java Fri Nov  4 02:47:43 2005
@@ -213,7 +213,7 @@
                 op_descrip.setMessageReceiver(messageReceiver);
             }  else {
                 //setting default message reciver
-                MessageReceiver msgReceiver = loadDefaultMessageReceiver();
+                MessageReceiver msgReceiver =loadDefaultMessageReceiver();
                 op_descrip.setMessageReceiver(msgReceiver);
             }
 

Modified: webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/deployment/ServiceGroupBuilder.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/deployment/ServiceGroupBuilder.java?rev=330790&r1=330789&r2=330790&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/deployment/ServiceGroupBuilder.java (original)
+++ webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/deployment/ServiceGroupBuilder.java Fri Nov  4 02:47:43 2005
@@ -70,7 +70,7 @@
                         axisService.setName(new QName(serviceName));
                     }
                     // the service that has to be deploy
-                    engine.getCurrentFileItem().getDeployableServices().add(axisService);
+                    engine.getCurrentFileItem().getDeploybleServices().add(axisService);
                     axisService.setParent(axisServiceGroup);
                     axisService.setClassLoader(engine.getCurrentFileItem().getClassLoader());
                     ServiceBuilder serviceBuilder = new ServiceBuilder(engine,axisService);

Modified: webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/deployment/repository/util/ArchiveFileData.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/deployment/repository/util/ArchiveFileData.java?rev=330790&r1=330789&r2=330790&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/deployment/repository/util/ArchiveFileData.java (original)
+++ webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/deployment/repository/util/ArchiveFileData.java Fri Nov  4 02:47:43 2005
@@ -19,13 +19,12 @@
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.deployment.DeploymentClassLoader;
 import org.apache.axis2.deployment.DeploymentErrorMsgs;
+import org.apache.axis2.deployment.util.Utils;
 import org.apache.axis2.description.AxisService;
 import org.apache.axis2.i18n.Messages;
 
 import java.io.File;
-import java.net.MalformedURLException;
 import java.net.URL;
-import java.net.URLClassLoader;
 import java.util.ArrayList;
 import java.util.HashMap;
 
@@ -38,7 +37,7 @@
     private ClassLoader classLoader;
     private File file = null;
     private int type;
-    private String messageReceiver;
+    private String messgeReceiver;
     private String moduleClass;
     private String name;
 
@@ -48,19 +47,19 @@
     //in this table
     private HashMap service = new HashMap();
 
-    private ArrayList deployableServices = new ArrayList();
+    private ArrayList deploybleServices = new ArrayList();
 
     public ArchiveFileData(int type, String name) {
         this.type = type;
         this.name = name;
     }
 
-    public String getMessageReceiver() {
-        return messageReceiver;
+    public String getMessgeReceiver() {
+        return messgeReceiver;
     }
 
-    public void setMessageReceiver(String messageReceiver) {
-        this.messageReceiver = messageReceiver;
+    public void setMessgeReceiver(String messgeReceiver) {
+        this.messgeReceiver = messgeReceiver;
     }
 
     public ArchiveFileData(File file, int type) {
@@ -107,8 +106,8 @@
         this.moduleClass = moduleClass;
     }
 
-    public void setClassLoader(boolean extarctArichive) throws AxisFault {
-        ClassLoader parent = Thread.currentThread().getContextClassLoader();
+    public void setClassLoader(boolean extarctArichive, ClassLoader parent) throws AxisFault {
+//        ClassLoader parent = Thread.currentThread().getContextClassLoader();
         if (! extarctArichive) {
             // has to be craeted taking that file to the account
             if (file != null) {
@@ -120,59 +119,17 @@
                     urlsToLoadFrom = new URL[]{file.toURL()};
                     classLoader =
                             new DeploymentClassLoader(urlsToLoadFrom, parent);
-                    //                classLoader = new URLClassLoader(urlsToLoadFrom, parent);
                 } catch (Exception e) {
                     throw new AxisFault(e);
                 }
             }
         } else {
             if (file != null) {
-                try {
-                    ArrayList urls = new ArrayList();
-                    urls.add(file.toURL());
-
-                    //if lib is simple
-                    File libfiles = new File(file, "lib");
-                    if(libfiles.exists()){
-                        urls.add(libfiles.toURL());
-                        File jarfiles [] = libfiles.listFiles();
-                        for (int i = 0; i < jarfiles.length; i++) {
-                            File jarfile = jarfiles[i];
-                            if(jarfile.getName().endsWith(".jar")){
-                                urls.add(jarfile.toURL());
-                            }
-                        }
-                    }
-
-                    //if lib is capital
-                    libfiles = new File(file, "Lib");
-                    if(libfiles.exists()){
-                        urls.add(libfiles.toURL());
-                        File jarfiles [] = libfiles.listFiles();
-                        for (int i = 0; i < jarfiles.length; i++) {
-                            File jarfile = jarfiles[i];
-                            if(jarfile.getName().endsWith(".jar")){
-                                urls.add(jarfile.toURL());
-                            }
-                        }
-                    }
-
-                    URL urllist [] = new URL[urls.size()];
-                    for (int i = 0; i < urls.size(); i++) {
-                        urllist[i] = (URL) urls.get(i);
-                    }
-                    classLoader = new URLClassLoader(urllist,parent);
-
-
-                } catch (MalformedURLException e) {
-                    throw new AxisFault(e);
-                }
-
+                classLoader = Utils.getClassLoader(parent,file);
             }
         }
 
     }
-
     /**
      * to check whthere a given file is  a  jar file
      *
@@ -200,11 +157,11 @@
         return service;
     }
 
-    public ArrayList getDeployableServices() {
-        return deployableServices;
+    public ArrayList getDeploybleServices() {
+        return deploybleServices;
     }
 
-    public void setDeployableServices(ArrayList deployableServices) {
-        this.deployableServices = deployableServices;
+    public void setDeploybleServices(ArrayList deploybleServices) {
+        this.deploybleServices = deploybleServices;
     }
 }

Modified: webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/deployment/repository/util/ArchiveReader.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/deployment/repository/util/ArchiveReader.java?rev=330790&r1=330789&r2=330790&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/deployment/repository/util/ArchiveReader.java (original)
+++ webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/deployment/repository/util/ArchiveReader.java Fri Nov  4 02:47:43 2005
@@ -115,7 +115,6 @@
                 bindings.remove(o) ;
 
             }
-
             Iterator iterator = womDescription.getServices().keySet()
                     .iterator();
             if (iterator.hasNext()) {
@@ -159,6 +158,7 @@
                                 log.info(e);
                             }
                         }
+
                     }
                 } else {
                     throw new DeploymentException(Messages.getMessage(
@@ -285,7 +285,7 @@
             axisService.setClassLoader(engine.getCurrentFileItem().getClassLoader());
             ServiceBuilder serviceBuilder = new ServiceBuilder(engine,axisService);
             serviceBuilder.populateService(services);
-            engine.getCurrentFileItem().getDeployableServices().add(axisService);
+            engine.getCurrentFileItem().getDeploybleServices().add(axisService);
         } else if(SERVICE_GROUP_ELEMENT.equals(rootelementName)){
             ServiceGroupBuilder groupBuilder = new ServiceGroupBuilder(services,engine);
             groupBuilder.populateServiceGroup(axisServiceGroup);