Would it be possible to be a bit more careful (especially when adding
new code to core classes such as AxisConfiguration) and to
* avoid typos in public method names (see getFaultyServicsDuetoModules);
* add a minimum of Javadoc (a method with a signature like
HashMap<String, HashMap<String, FaultyServiceData>>
getFaultyServicsDuetoModules() is probably not self-explaining for
most people);
* avoid using concrete collection classes and prefer interfaces when
appropriate (Map instead of HashMap)?

Andreas

On Fri, Mar 27, 2009 at 07:35,  <ami...@apache.org> wrote:
> Author: amilas
> Date: Fri Mar 27 06:34:58 2009
> New Revision: 759032
>
> URL: http://svn.apache.org/viewvc?rev=759032&view=rev
> Log:
> commiting the patch for faulty service handling refer AXIS2-4286 and 
> AXIS2-4281
>
> Added:
>    
> webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/util/FaultyServiceData.java
>    
> webservices/axis2/trunk/java/modules/kernel/test-resources/deployment/faultyServiceshandling/
>    
> webservices/axis2/trunk/java/modules/kernel/test-resources/deployment/faultyServiceshandling/repo/
>    
> webservices/axis2/trunk/java/modules/kernel/test-resources/deployment/faultyServiceshandling/repo/axis2.xml
>    
> webservices/axis2/trunk/java/modules/kernel/test-resources/deployment/faultyServiceshandling/repo/services/
>    
> webservices/axis2/trunk/java/modules/kernel/test-resources/deployment/faultyServiceshandling/repo/services/echo2/
>    
> webservices/axis2/trunk/java/modules/kernel/test-resources/deployment/faultyServiceshandling/repo/services/echo2/META-INF/
>    
> webservices/axis2/trunk/java/modules/kernel/test-resources/deployment/faultyServiceshandling/repo/services/echo2/META-INF/services.xml
>    
> webservices/axis2/trunk/java/modules/kernel/test-resources/deployment/faultyServiceshandling/sample-logging/
>    
> webservices/axis2/trunk/java/modules/kernel/test-resources/deployment/faultyServiceshandling/sample-logging/META-INF/
>    
> webservices/axis2/trunk/java/modules/kernel/test-resources/deployment/faultyServiceshandling/sample-logging/META-INF/module.xml
>    
> webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/deployment/FaultyServicesDueToModuleTest.java
>    
> webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/sample/module/
>    
> webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/sample/module/LogginModule.java
> Modified:
>    
> webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/DeploymentEngine.java
>    
> webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/DescriptionBuilder.java
>    
> webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/ServiceBuilder.java
>    
> webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/ServiceDeployer.java
>    
> webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/ServiceGroupBuilder.java
>    
> webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/engine/AxisConfiguration.java
>
> Modified: 
> webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/DeploymentEngine.java
> URL: 
> http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/DeploymentEngine.java?rev=759032&r1=759031&r2=759032&view=diff
> ==============================================================================
> --- 
> webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/DeploymentEngine.java
>  (original)
> +++ 
> webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/DeploymentEngine.java
>  Fri Mar 27 06:34:58 2009
> @@ -47,6 +47,7 @@
>  import org.apache.axis2.engine.MessageReceiver;
>  import org.apache.axis2.i18n.Messages;
>  import org.apache.axis2.util.JavaUtils;
> +import org.apache.axis2.util.FaultyServiceData;
>  import org.apache.commons.logging.Log;
>  import org.apache.commons.logging.LogFactory;
>
> @@ -555,6 +556,30 @@
>
>         axisConfiguration.addModule(modulemetadata);
>         log.debug(Messages.getMessage(DeploymentErrorMsgs.ADDING_NEW_MODULE));
> +
> +        synchronized (axisConfiguration.getFaultyServicsDuetoModules()) {
> +
> +            //Check whether there are faulty services due to this module
> +            HashMap<String, FaultyServiceData> faultyServices = 
> axisConfiguration.getFaultyServicesDuetoModule(
> +                    modulemetadata.getName());
> +            faultyServices = (HashMap<String, 
> FaultyServiceData>)faultyServices.clone();
> +
> +            // Here iterating a cloned hashmap and modifying the original 
> hashmap.
> +            // To avoid the ConcurrentModificationException.
> +            for (Iterator<FaultyServiceData> itr = 
> faultyServices.values().iterator(); itr.hasNext();) {
> +
> +                FaultyServiceData faultyServiceData = itr.next();
> +                
> axisConfiguration.removeFaultyServiceDuetoModule(modulemetadata.getName(),
> +                        
> faultyServiceData.getServiceGroup().getServiceGroupName());
> +
> +                //Recover the faulty serviceGroup.
> +                addServiceGroup(faultyServiceData.getServiceGroup(),
> +                        faultyServiceData.getServiceList(),
> +                        faultyServiceData.getServiceLocation(),
> +                        faultyServiceData.getCurrentDeploymentFile(),
> +                        axisConfiguration);
> +            }
> +        }
>     }
>
>     public static void addServiceGroup(AxisServiceGroup serviceGroup,
> @@ -562,12 +587,104 @@
>                                        URL serviceLocation,
>                                        DeploymentFileData 
> currentDeploymentFile,
>                                        AxisConfiguration axisConfiguration) 
> throws AxisFault {
> -        fillServiceGroup(serviceGroup, serviceList, serviceLocation, 
> axisConfiguration);
> -        axisConfiguration.addServiceGroup(serviceGroup);
> -        if (currentDeploymentFile != null) {
> -            addAsWebResources(currentDeploymentFile.getFile(),
> -                              serviceGroup.getServiceGroupName(), 
> serviceGroup);
> +
> +        if (isServiceGroupReadyToDeploy(serviceGroup, serviceList, 
> serviceLocation,
> +                currentDeploymentFile, axisConfiguration)) {
> +
> +            fillServiceGroup(serviceGroup, serviceList, serviceLocation, 
> axisConfiguration);
> +            axisConfiguration.addServiceGroup(serviceGroup);
> +
> +            if (currentDeploymentFile != null) {
> +                addAsWebResources(currentDeploymentFile.getFile(),
> +                        serviceGroup.getServiceGroupName(), serviceGroup);
> +                
> log.info(Messages.getMessage(DeploymentErrorMsgs.DEPLOYING_WS,
> +                                         currentDeploymentFile.getName(),
> +                                         serviceLocation.toString()));
> +            } else {
> +                
> log.info(Messages.getMessage(DeploymentErrorMsgs.DEPLOYING_WS,
> +                                         
> serviceGroup.getServiceGroupName()));
> +            }
> +
> +        }
> +    }
> +
> +    /**
> +     * Performs a check routine, in order to identify whether all the 
> serviceGroup, service and operation level
> +     * modules are available. If a referenced module is not deployed yet, 
> the serviceGroup is added as a faulty service.
> +     * @param serviceGroup
> +     * @param serviceList
> +     * @param serviceLocation
> +     * @param currentDeploymentFile
> +     * @param axisConfig
> +     * @return boolean
> +     * @throws AxisFault
> +     */
> +    protected static boolean isServiceGroupReadyToDeploy(AxisServiceGroup 
> serviceGroup,
> +                                                         ArrayList 
> serviceList,
> +                                                         URL serviceLocation,
> +                                                         DeploymentFileData 
> currentDeploymentFile,
> +                                                         AxisConfiguration 
> axisConfig) throws AxisFault {
> +        synchronized (axisConfig.getFaultyServicsDuetoModules()) {
> +            String moduleName;
> +            ArrayList groupModules = serviceGroup.getModuleRefs();
> +            for (int i = 0; i < groupModules.size(); i++) {
> +                moduleName = (String) groupModules.get(i);
> +                AxisModule module = axisConfig.getModule(moduleName);
> +
> +                if (module == null) {
> +                    axisConfig.addFaultyServiceDuetoModule(moduleName, new 
> FaultyServiceData(serviceGroup, serviceList,
> +                            serviceLocation, currentDeploymentFile));
> +                    if (log.isDebugEnabled()) {
> +                                log.debug("Service: " + 
> serviceGroup.getServiceGroupName() +
> +                                        " becomes faulty due to Module: " + 
> moduleName);
> +                            }
> +                    return false;
> +                }
> +            }
> +
> +            for (Object aServiceList : serviceList) {
> +                AxisService axisService = (AxisService) aServiceList;
> +
> +                // modules from <service>
> +                ArrayList list = axisService.getModules();
> +
> +                for (int i = 0; i < list.size(); i++) {
> +                    moduleName = (String) list.get(i);
> +                    AxisModule module = axisConfig.getModule(moduleName);
> +
> +                    if (module == null) {
> +                        axisConfig.addFaultyServiceDuetoModule(moduleName, 
> new FaultyServiceData(serviceGroup, serviceList,
> +                                serviceLocation, currentDeploymentFile));
> +                        if (log.isDebugEnabled()) {
> +                                log.debug("Service: " + 
> serviceGroup.getServiceGroupName() +
> +                                        " becomes faulty due to Module: " + 
> moduleName);
> +                            }
> +                        return false;
> +                    }
> +                }
> +
> +                for (Iterator iterator = axisService.getOperations(); 
> iterator.hasNext();) {
> +                    AxisOperation opDesc = (AxisOperation) iterator.next();
> +                    ArrayList modules = opDesc.getModuleRefs();
> +
> +                    for (int i = 0; i < modules.size(); i++) {
> +                        moduleName = (String) modules.get(i);
> +                        AxisModule module = axisConfig.getModule(moduleName);
> +
> +                        if (module == null) {
> +                            
> axisConfig.addFaultyServiceDuetoModule(moduleName, new 
> FaultyServiceData(serviceGroup,
> +                                    serviceList, serviceLocation, 
> currentDeploymentFile));
> +                            if (log.isDebugEnabled()) {
> +                                log.debug("Service: " + 
> serviceGroup.getServiceGroupName() +
> +                                        " becomes faulty due to Module: " + 
> moduleName);
> +                            }
> +                            return false;
> +                        }
> +                    }
> +                }
> +            }
>         }
> +        return true;
>     }
>
>     protected static void fillServiceGroup(AxisServiceGroup serviceGroup,
>
> Modified: 
> webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/DescriptionBuilder.java
> URL: 
> http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/DescriptionBuilder.java?rev=759032&r1=759031&r2=759032&view=diff
> ==============================================================================
> --- 
> webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/DescriptionBuilder.java
>  (original)
> +++ 
> webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/DescriptionBuilder.java
>  Fri Mar 27 06:34:58 2009
> @@ -476,7 +476,7 @@
>
>     protected void processOperationModuleRefs(Iterator moduleRefs,
>                                               AxisOperation operation) throws 
> DeploymentException {
> -        try {
> +//        try {
>             while (moduleRefs.hasNext()) {
>                 OMElement moduleref = (OMElement) moduleRefs.next();
>                 OMAttribute moduleRefAttribute = moduleref
> @@ -484,20 +484,21 @@
>
>                 if (moduleRefAttribute != null) {
>                     String refName = moduleRefAttribute.getAttributeValue();
> +                    operation.addModule(refName);
>
> -                    if (axisConfig.getModule(refName) == null) {
> -                        throw new DeploymentException(Messages.getMessage(
> -                                DeploymentErrorMsgs.MODULE_NOT_FOUND, 
> refName));
> -                    } else {
> -                        operation.addModule(refName);
> -                    }
> +//                    if (axisConfig.getModule(refName) == null) {
> +//                        throw new DeploymentException(Messages.getMessage(
> +//                                DeploymentErrorMsgs.MODULE_NOT_FOUND, 
> refName));
> +//                    } else {
> +//                        operation.addModule(refName);
> +//                    }
>                 }
>             }
> -        } catch (AxisFault axisFault) {
> -            throw new DeploymentException(Messages.getMessage(
> -                    DeploymentErrorMsgs.MODULE_NOT_FOUND, axisFault
> -                    .getMessage()), axisFault);
> -        }
> +//        } catch (AxisFault axisFault) {
> +//            throw new DeploymentException(Messages.getMessage(
> +//                    DeploymentErrorMsgs.MODULE_NOT_FOUND, axisFault
> +//                    .getMessage()), axisFault);
> +//        }
>     }
>
>     /**
>
> Modified: 
> webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/ServiceBuilder.java
> URL: 
> http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/ServiceBuilder.java?rev=759032&r1=759031&r2=759032&view=diff
> ==============================================================================
> --- 
> webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/ServiceBuilder.java
>  (original)
> +++ 
> webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/ServiceBuilder.java
>  Fri Mar 27 06:34:58 2009
> @@ -657,7 +657,7 @@
>         */
>        protected void processModuleRefs(Iterator moduleRefs)
>                        throws DeploymentException {
> -               try {
> +//             try {
>                        while (moduleRefs.hasNext()) {
>                                OMElement moduleref = (OMElement) 
> moduleRefs.next();
>                                OMAttribute moduleRefAttribute = moduleref
> @@ -665,18 +665,18 @@
>
>                                if (moduleRefAttribute != null) {
>                                        String refName = 
> moduleRefAttribute.getAttributeValue();
> -
> -                                       if (axisConfig.getModule(refName) == 
> null) {
> -                                               throw new 
> DeploymentException(Messages.getMessage(
> -                                                               
> DeploymentErrorMsgs.MODULE_NOT_FOUND, refName));
> -                                       } else {
> -                                               service.addModuleref(refName);
> -                                       }
> +                    service.addModuleref(refName);
> +//                                     if (axisConfig.getModule(refName) == 
> null) {
> +//                                             throw new 
> DeploymentException(Messages.getMessage(
> +//                                                             
> DeploymentErrorMsgs.MODULE_NOT_FOUND, refName));
> +//                                     } else {
> +//                                             service.addModuleref(refName);
> +//                                     }
>                                }
>                        }
> -               } catch (AxisFault axisFault) {
> -                       throw new DeploymentException(axisFault);
> -               }
> +//             } catch (AxisFault axisFault) {
> +//                     throw new DeploymentException(axisFault);
> +//             }
>        }
>
>        protected void processOperationModuleConfig(Iterator moduleConfigs,
>
> Modified: 
> webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/ServiceDeployer.java
> URL: 
> http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/ServiceDeployer.java?rev=759032&r1=759031&r2=759032&view=diff
> ==============================================================================
> --- 
> webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/ServiceDeployer.java
>  (original)
> +++ 
> webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/ServiceDeployer.java
>  Fri Mar 27 06:34:58 2009
> @@ -88,9 +88,7 @@
>                                              location,
>                                              deploymentFileData,
>                                              axisConfig);
> -            log.info(Messages.getMessage(DeploymentErrorMsgs.DEPLOYING_WS,
> -                                         deploymentFileData.getName(),
> -                                         location.toString()));
> +
>         } catch (DeploymentException de) {
>             de.printStackTrace();
>             log.error(Messages.getMessage(DeploymentErrorMsgs.INVALID_SERVICE,
>
> Modified: 
> webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/ServiceGroupBuilder.java
> URL: 
> http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/ServiceGroupBuilder.java?rev=759032&r1=759031&r2=759032&view=diff
> ==============================================================================
> --- 
> webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/ServiceGroupBuilder.java
>  (original)
> +++ 
> webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/ServiceGroupBuilder.java
>  Fri Mar 27 06:34:58 2009
> @@ -117,25 +117,26 @@
>      */
>     protected void processModuleRefs(Iterator moduleRefs, AxisServiceGroup 
> axisServiceGroup)
>             throws DeploymentException {
> -        try {
> +//        try {
>             while (moduleRefs.hasNext()) {
>                 OMElement moduleref = (OMElement) moduleRefs.next();
>                 OMAttribute moduleRefAttribute = moduleref.getAttribute(new 
> QName(TAG_REFERENCE));
>
>                 if (moduleRefAttribute != null) {
>                     String refName = moduleRefAttribute.getAttributeValue();
> +                    axisServiceGroup.addModuleref(refName);
>
> -                    if (axisConfig.getModule(refName) == null) {
> -                        throw new DeploymentException(
> -                                
> Messages.getMessage(DeploymentErrorMsgs.MODULE_NOT_FOUND, refName));
> -                    } else {
> -                        axisServiceGroup.addModuleref(refName);
> -                    }
> +//                    if (axisConfig.getModule(refName) == null) {
> +//                        throw new DeploymentException(
> +//                                
> Messages.getMessage(DeploymentErrorMsgs.MODULE_NOT_FOUND, refName));
> +//                    } else {
> +//                        axisServiceGroup.addModuleref(refName);
> +//                    }
>                 }
>             }
> -        } catch (AxisFault axisFault) {
> -            throw new DeploymentException(axisFault);
> -        }
> +//        } catch (AxisFault axisFault) {
> +//            throw new DeploymentException(axisFault);
> +//        }
>     }
>
>     protected void processServiceModuleConfig(Iterator moduleConfigs, 
> ParameterInclude parent,
>
> Modified: 
> webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/engine/AxisConfiguration.java
> URL: 
> http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/engine/AxisConfiguration.java?rev=759032&r1=759031&r2=759032&view=diff
> ==============================================================================
> --- 
> webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/engine/AxisConfiguration.java
>  (original)
> +++ 
> webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/engine/AxisConfiguration.java
>  Fri Mar 27 06:34:58 2009
> @@ -61,6 +61,7 @@
>  import org.apache.axis2.transport.MessageFormatter;
>  import org.apache.axis2.util.TargetResolver;
>  import org.apache.axis2.util.Utils;
> +import org.apache.axis2.util.FaultyServiceData;
>  import org.apache.commons.logging.Log;
>  import org.apache.commons.logging.LogFactory;
>
> @@ -116,6 +117,10 @@
>      */
>     private Hashtable<String, String> faultyServices;
>
> +    private final HashMap<String, HashMap<String, FaultyServiceData>> 
> faultyServicesDueToModules = new HashMap<String,
> +            HashMap<String, FaultyServiceData>>();
> +
> +
>     private List<Phase> inFaultPhases;
>
>     private List<Phase> inPhasesUptoAndIncludingPostDispatch;
> @@ -642,6 +647,54 @@
>         return faultyServices;
>     }
>
> +    /**
> +     * Updates the map that keeps track of faulty services due to modules
> +     * @param moduleName This service has become faulty due this module.
> +     * @param faultyServiceData  Data that are required when recovering the 
> faulty service.
> +     */
> +    public void addFaultyServiceDuetoModule(String moduleName, 
> FaultyServiceData faultyServiceData) {
> +        HashMap<String, FaultyServiceData> faultyServicesMap;
> +
> +        synchronized (faultyServicesDueToModules) {
> +
> +            if (faultyServicesDueToModules.containsKey(moduleName)) {
> +                faultyServicesMap = 
> faultyServicesDueToModules.get(moduleName);
> +                
> faultyServicesMap.put(faultyServiceData.getServiceGroupName(), 
> faultyServiceData);
> +
> +            } else {
> +                faultyServicesMap = new HashMap<String, FaultyServiceData>();
> +                
> faultyServicesMap.put(faultyServiceData.getServiceGroupName(), 
> faultyServiceData);
> +                faultyServicesDueToModules.put(moduleName, 
> faultyServicesMap);
> +            }
> +        }
> +    }
> +
> +    public HashMap<String, FaultyServiceData> 
> getFaultyServicesDuetoModule(String moduleName) {
> +        if (faultyServicesDueToModules.containsKey(moduleName)) {
> +            return faultyServicesDueToModules.get(moduleName);
> +
> +        }
> +        return new HashMap<String, FaultyServiceData>(1);
> +    }
> +
> +    public HashMap<String, HashMap<String, FaultyServiceData>> 
> getFaultyServicsDuetoModules(){
> +        return faultyServicesDueToModules;
> +    }
> +
> +    public void removeFaultyServiceDuetoModule(String moduleName, String 
> serviceGroupName) {
> +        synchronized (faultyServicesDueToModules) {
> +            HashMap<String, FaultyServiceData> faultyServices = 
> faultyServicesDueToModules.get(moduleName);
> +
> +            if(faultyServices != null){
> +                faultyServices.remove(serviceGroupName);
> +
> +                if(faultyServices.isEmpty()){
> +                    faultyServicesDueToModules.remove(moduleName);
> +                }
> +            }
> +        }
> +    }
> +
>     public void removeFaultyService(String key) {
>         Iterator<String> itr = faultyServices.keySet().iterator();
>         while (itr.hasNext()) {
>
> Added: 
> webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/util/FaultyServiceData.java
> URL: 
> http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/util/FaultyServiceData.java?rev=759032&view=auto
> ==============================================================================
> --- 
> webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/util/FaultyServiceData.java
>  (added)
> +++ 
> webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/util/FaultyServiceData.java
>  Fri Mar 27 06:34:58 2009
> @@ -0,0 +1,67 @@
> +/*
> + * Licensed to the Apache Software Foundation (ASF) under one
> + * or more contributor license agreements. See the NOTICE file
> + * distributed with this work for additional information
> + * regarding copyright ownership. The ASF licenses this file
> + * to you under the Apache License, Version 2.0 (the
> + * "License"); you may not use this file except in compliance
> + * with the License. You may obtain a copy of the License at
> + *
> + * http://www.apache.org/licenses/LICENSE-2.0
> + *
> + * Unless required by applicable law or agreed to in writing,
> + * software distributed under the License is distributed on an
> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> + * KIND, either express or implied. See the License for the
> + * specific language governing permissions and limitations
> + * under the License.
> + */
> +
> +package org.apache.axis2.util;
> +
> +import org.apache.axis2.description.AxisServiceGroup;
> +import org.apache.axis2.deployment.repository.util.DeploymentFileData;
> +
> +import java.util.ArrayList;
> +import java.net.URL;
> +
> +public class FaultyServiceData {
> +
> +    private String serviceGroupName;
> +    private AxisServiceGroup serviceGroup;
> +    private ArrayList serviceList;
> +    private DeploymentFileData currentDeploymentFile;
> +    private URL serviceLocation;
> +
> +    public FaultyServiceData(AxisServiceGroup serviceGroup,
> +                             ArrayList serviceList,
> +                             URL serviceLocation,
> +                             DeploymentFileData currentDeploymentFile) {
> +        serviceGroupName = serviceGroup.getServiceGroupName();
> +        this.serviceGroup = serviceGroup;
> +        this.serviceList = serviceList;
> +        this.currentDeploymentFile = currentDeploymentFile;
> +        this.serviceLocation = serviceLocation;
> +
> +    }
> +
> +    public AxisServiceGroup getServiceGroup() {
> +        return serviceGroup;
> +    }
> +
> +    public DeploymentFileData getCurrentDeploymentFile() {
> +        return currentDeploymentFile;
> +    }
> +
> +    public ArrayList getServiceList() {
> +        return serviceList;
> +    }
> +
> +    public URL getServiceLocation() {
> +        return serviceLocation;
> +    }
> +
> +    public String getServiceGroupName() {
> +        return serviceGroupName;
> +    }
> +}
>
> Added: 
> webservices/axis2/trunk/java/modules/kernel/test-resources/deployment/faultyServiceshandling/repo/axis2.xml
> URL: 
> http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/test-resources/deployment/faultyServiceshandling/repo/axis2.xml?rev=759032&view=auto
> ==============================================================================
> --- 
> webservices/axis2/trunk/java/modules/kernel/test-resources/deployment/faultyServiceshandling/repo/axis2.xml
>  (added)
> +++ 
> webservices/axis2/trunk/java/modules/kernel/test-resources/deployment/faultyServiceshandling/repo/axis2.xml
>  Fri Mar 27 06:34:58 2009
> @@ -0,0 +1,102 @@
> +<!--
> +  ~ Licensed to the Apache Software Foundation (ASF) under one
> +  ~ or more contributor license agreements. See the NOTICE file
> +  ~ distributed with this work for additional information
> +  ~ regarding copyright ownership. The ASF licenses this file
> +  ~ to you under the Apache License, Version 2.0 (the
> +  ~ "License"); you may not use this file except in compliance
> +  ~ with the License. You may obtain a copy of the License at
> +  ~
> +  ~ http://www.apache.org/licenses/LICENSE-2.0
> +  ~
> +  ~ Unless required by applicable law or agreed to in writing,
> +  ~ software distributed under the License is distributed on an
> +  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> +  ~ KIND, either express or implied. See the License for the
> +  ~ specific language governing permissions and limitations
> +  ~ under the License.
> +  -->
> +
> +<axisconfig name="AxisJava2.0">
> +    <!-- ================================================= -->
> +    <!-- Parameters -->
> +    <!-- ================================================= -->
> +    <parameter name="hotdeployment">true</parameter>
> +    <parameter name="hotupdate">false</parameter>
> +    <parameter name="enableMTOM">true</parameter>
> +
> +    <parameter name="userName">admin</parameter>
> +    <parameter name="password">axis2</parameter>
> +
> +    <parameter name="seralizeLocation">./target</parameter>
> +
> +
> +    <!-- ================================================= -->
> +    <!-- Message Receivers -->
> +    <!-- ================================================= -->
> +    <!-- This is the Deafult Message Receiver for the Request Response style 
> Operations -->
> +    <messageReceiver mep="INOUT" 
> class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
> +
> +    <!-- ================================================= -->
> +    <!-- Transport Ins -->
> +    <!-- ================================================= -->
> +
> +    <phaseOrder type="InFlow">
> +        <!--  System pre defined phases       -->
> +         <phase name="Transport">
> +            <handler name="RequestURIBasedDispatcher"
> +                     
> class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
> +            <handler name="SOAPActionBasedDispatcher"
> +                     
> class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
> +        </phase>
> +        <phase name="Security"/>
> +        <phase name="PreDispatch"/>
> +        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
> +            <handler name="AddressingBasedDispatcher"
> +                     
> class="org.apache.axis2.dispatchers.AddressingBasedDispatcher"/>
> +
> +            <handler name="SOAPMessageBodyBasedDispatcher"
> +                     
> class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
> +        </phase>
> +        <!--  System pre defined phases       -->
> +        <!--   After Postdispatch phase module author or or service author 
> can add any phase he want      -->
> +        <phase name="OperationInPhase"/>
> +       <phase name="loggingPhase"/>
> +    </phaseOrder>
> +    <phaseOrder type="OutFlow">
> +        <!--      user can add his own phases to this area  -->
> +        <phase name="OperationOutPhase"/>
> +       <phase name="loggingPhase"/>
> +        <!--system predefined phase-->
> +        <!--these phase will run irrespective of the service-->
> +        <phase name="PolicyDetermination"/>
> +        <phase name="MessageOut"/>
> +    </phaseOrder>
> +    <phaseOrder type="InFaultFlow">
> +        <phase name="PreDispatch"/>
> +        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
> +            <handler name="RequestURIBasedDispatcher"
> +                     
> class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
> +
> +            <handler name="SOAPActionBasedDispatcher"
> +                     
> class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
> +
> +            <handler name="AddressingBasedDispatcher"
> +                     
> class="org.apache.axis2.dispatchers.AddressingBasedDispatcher"/>
> +
> +            <handler name="SOAPMessageBodyBasedDispatcher"
> +                     
> class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
> +        </phase>
> +        <!--      user can add his own phases to this area  -->
> +        <phase name="OperationInFaultPhase"/>
> +       <phase name="loggingPhase"/>
> +    </phaseOrder>
> +    <phaseOrder type="OutFaultFlow">
> +        <!--      user can add his own phases to this area  -->
> +       <phase name="loggingPhase"/>
> +        <phase name="OperationOutFaultPhase"/>
> +        <phase name="PolicyDetermination"/>
> +        <phase name="MessageOut"/>
> +    </phaseOrder>
> +</axisconfig>
> +
>
> Added: 
> webservices/axis2/trunk/java/modules/kernel/test-resources/deployment/faultyServiceshandling/repo/services/echo2/META-INF/services.xml
> URL: 
> http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/test-resources/deployment/faultyServiceshandling/repo/services/echo2/META-INF/services.xml?rev=759032&view=auto
> ==============================================================================
> --- 
> webservices/axis2/trunk/java/modules/kernel/test-resources/deployment/faultyServiceshandling/repo/services/echo2/META-INF/services.xml
>  (added)
> +++ 
> webservices/axis2/trunk/java/modules/kernel/test-resources/deployment/faultyServiceshandling/repo/services/echo2/META-INF/services.xml
>  Fri Mar 27 06:34:58 2009
> @@ -0,0 +1,6 @@
> +<serviceGroup>
> +    <service name="echo2">
> +       <module ref="sample-logging"/>
> +       <parameter name="ServiceClass">org.apache.axis2.Echo2</parameter>
> +    </service>
> +</serviceGroup>
>
> Added: 
> webservices/axis2/trunk/java/modules/kernel/test-resources/deployment/faultyServiceshandling/sample-logging/META-INF/module.xml
> URL: 
> http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/test-resources/deployment/faultyServiceshandling/sample-logging/META-INF/module.xml?rev=759032&view=auto
> ==============================================================================
> --- 
> webservices/axis2/trunk/java/modules/kernel/test-resources/deployment/faultyServiceshandling/sample-logging/META-INF/module.xml
>  (added)
> +++ 
> webservices/axis2/trunk/java/modules/kernel/test-resources/deployment/faultyServiceshandling/sample-logging/META-INF/module.xml
>  Fri Mar 27 06:34:58 2009
> @@ -0,0 +1,44 @@
> +<!--
> +  ~ Licensed to the Apache Software Foundation (ASF) under one
> +  ~ or more contributor license agreements. See the NOTICE file
> +  ~ distributed with this work for additional information
> +  ~ regarding copyright ownership. The ASF licenses this file
> +  ~ to you under the Apache License, Version 2.0 (the
> +  ~ "License"); you may not use this file except in compliance
> +  ~ with the License. You may obtain a copy of the License at
> +  ~
> +  ~ http://www.apache.org/licenses/LICENSE-2.0
> +  ~
> +  ~ Unless required by applicable law or agreed to in writing,
> +  ~ software distributed under the License is distributed on an
> +  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> +  ~ KIND, either express or implied. See the License for the
> +  ~ specific language governing permissions and limitations
> +  ~ under the License.
> +  -->
> +
> +<module name="sample-logging" 
> class="org.apache.axis2.sample.module.LogginModule">
> +    <InFlow>
> +        <handler name="InFlowLogHandler" 
> class="org.apache.axis2.sample.handlers.LoggingHandler">
> +            <order phase="loggingPhase"/>
> +        </handler>
> +    </InFlow>
> +
> +    <OutFlow>
> +        <handler name="OutFlowLogHandler" 
> class="org.apache.axis2.sample.handlers.LoggingHandler">
> +            <order phase="loggingPhase"/>
> +        </handler>
> +    </OutFlow>
> +
> +    <OutFaultFlow>
> +        <handler name="FaultOutFlowLogHandler" 
> class="org.apache.axis2.sample.handlers.LoggingHandler">
> +            <order phase="loggingPhase"/>
> +        </handler>
> +    </OutFaultFlow>
> +
> +    <InFaultFlow>
> +        <handler name="FaultInFlowLogHandler" 
> class="org.apache.axis2.sample.handlers.LoggingHandler">
> +            <order phase="loggingPhase"/>
> +        </handler>
> +    </InFaultFlow>
> +</module>
>
> Added: 
> webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/deployment/FaultyServicesDueToModuleTest.java
> URL: 
> http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/deployment/FaultyServicesDueToModuleTest.java?rev=759032&view=auto
> ==============================================================================
> --- 
> webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/deployment/FaultyServicesDueToModuleTest.java
>  (added)
> +++ 
> webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/deployment/FaultyServicesDueToModuleTest.java
>  Fri Mar 27 06:34:58 2009
> @@ -0,0 +1,68 @@
> +/*
> + * Licensed to the Apache Software Foundation (ASF) under one
> + * or more contributor license agreements. See the NOTICE file
> + * distributed with this work for additional information
> + * regarding copyright ownership. The ASF licenses this file
> + * to you under the Apache License, Version 2.0 (the
> + * "License"); you may not use this file except in compliance
> + * with the License. You may obtain a copy of the License at
> + *
> + * http://www.apache.org/licenses/LICENSE-2.0
> + *
> + * Unless required by applicable law or agreed to in writing,
> + * software distributed under the License is distributed on an
> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> + * KIND, either express or implied. See the License for the
> + * specific language governing permissions and limitations
> + * under the License.
> + */
> +
> +package org.apache.axis2.deployment;
> +
> +import junit.framework.TestCase;
> +import org.apache.axis2.engine.AxisConfiguration;
> +import org.apache.axis2.AbstractTestCase;
> +import org.apache.axis2.AxisFault;
> +import org.apache.axis2.deployment.repository.util.DeploymentFileData;
> +import org.apache.axis2.util.FaultyServiceData;
> +import org.apache.axis2.description.AxisService;
> +import org.apache.axis2.context.ConfigurationContextFactory;
> +
> +import java.util.HashMap;
> +import java.io.File;
> +
> +public class FaultyServicesDueToModuleTest extends TestCase {
> +
> +    AxisConfiguration axisConfig;
> +    String repo = AbstractTestCase.basedir + 
> "/test-resources/deployment/faultyServiceshandling/repo";
> +
> +    protected void setUp() throws Exception {
> +        axisConfig = 
> ConfigurationContextFactory.createConfigurationContextFromFileSystem(repo, 
> repo + "/axis2.xml")
> +                .getAxisConfiguration();
> +    }
> +
> +    public void testFaultyServiceDueToModuleLogging() throws AxisFault {
> +        AxisService axisService = axisConfig.getService("echo2");
> +        assertNull(axisService);
> +
> +        HashMap<String, FaultyServiceData> faultyServicesMap = 
> axisConfig.getFaultyServicesDuetoModule(
> +                "sample-logging");
> +        FaultyServiceData faultyServiceData = faultyServicesMap.get("echo2");
> +        assertNotNull(faultyServiceData);
> +    }
> +
> +    public void testFaultyServicesRecovery() throws AxisFault{
> +        File moduleFile = new File(AbstractTestCase.basedir +
> +                
> "/test-resources/deployment/faultyServiceshandling/sample-logging");
> +        DeploymentFileData deploymentFileData = new 
> DeploymentFileData(moduleFile, new ModuleDeployer(axisConfig));
> +        deploymentFileData.deploy();
> +
> +        AxisService axisService = axisConfig.getService("echo2");
> +        assertNotNull(axisService);
> +
> +        HashMap<String, FaultyServiceData> faultyServicesMap = 
> axisConfig.getFaultyServicesDuetoModule(
> +                "sample-logging");
> +        FaultyServiceData faultyServiceData = faultyServicesMap.get("echo2");
> +        assertNull(faultyServiceData);
> +    }
> +}
>
> Added: 
> webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/sample/module/LogginModule.java
> URL: 
> http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/sample/module/LogginModule.java?rev=759032&view=auto
> ==============================================================================
> --- 
> webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/sample/module/LogginModule.java
>  (added)
> +++ 
> webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/sample/module/LogginModule.java
>  Fri Mar 27 06:34:58 2009
> @@ -0,0 +1,50 @@
> +/*
> + * Licensed to the Apache Software Foundation (ASF) under one
> + * or more contributor license agreements. See the NOTICE file
> + * distributed with this work for additional information
> + * regarding copyright ownership. The ASF licenses this file
> + * to you under the Apache License, Version 2.0 (the
> + * "License"); you may not use this file except in compliance
> + * with the License. You may obtain a copy of the License at
> + *
> + * http://www.apache.org/licenses/LICENSE-2.0
> + *
> + * Unless required by applicable law or agreed to in writing,
> + * software distributed under the License is distributed on an
> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> + * KIND, either express or implied. See the License for the
> + * specific language governing permissions and limitations
> + * under the License.
> + */
> +
> +package org.apache.axis2.sample.module;
> +
> +import org.apache.axis2.description.AxisModule;
> +import org.apache.axis2.description.AxisDescription;
> +import org.apache.axis2.modules.Module;
> +import org.apache.axis2.context.ConfigurationContext;
> +import org.apache.axis2.AxisFault;
> +import org.apache.neethi.Assertion;
> +import org.apache.neethi.Policy;
> +
> +public class LogginModule implements Module {
> +    // initialize the module
> +    public void init(ConfigurationContext configContext, AxisModule module) 
> throws AxisFault {
> +
> +    }
> +
> +    public void engageNotify(AxisDescription axisDescription) throws 
> AxisFault {
> +        //To change body of implemented methods use File | Settings | File 
> Templates.
> +    }
> +
> +    public boolean canSupportAssertion(Assertion assertion) {
> +        return false;  //To change body of implemented methods use File | 
> Settings | File Templates.
> +    }
> +
> +    public void applyPolicy(Policy policy, AxisDescription axisDescription) 
> throws AxisFault {
> +        //To change body of implemented methods use File | Settings | File 
> Templates.
> +    }// shutdown the module
> +    public void shutdown(ConfigurationContext configurationContext) throws 
> AxisFault {
> +        //To change body of implemented methods use File | Settings | File 
> Templates.
> +    }
> +}
>
>
>

Reply via email to