All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.axis2.deployment.repository.util.WSInfoList Maven / Gradle / Ivy

Go to download

Core Parts of Axis2. This includes Axis2 engine, Client API, Addressing support, etc.,

There is a newer version: 1.8.2
Show newest version
/*
 * 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.repository.util;

import org.apache.axis2.deployment.Deployer;
import org.apache.axis2.deployment.DeploymentConstants;
import org.apache.axis2.deployment.DeploymentEngine;

import java.io.File;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

public class WSInfoList implements DeploymentConstants {

    /**
     * This is to store all the jar files in a specified folder (WEB_INF)
     */
    private List jarList = new ArrayList();

    /**
     * All the currently updated jars
     */
    public Map currentJars = new HashMap();

    /**
     * Reference to DeploymentEngine to make update
     */

    private boolean locked = false;
    private final DeploymentEngine deploymentEngine;

    public WSInfoList(DeploymentEngine deploy_engine) {
        deploymentEngine = deploy_engine;
    }

    /**
     * First checks whether the file is already available by the
     * system call fileExists. If it is not deployed yet then adds to the jarList
     * and to the deployment engine as a new service or module.
     * While adding new item to jarList, first creates the WSInfo object and
     * then adds to the jarlist and actual jar file is added to DeploymentEngine.
     * 

* If the files already exists, then checks whether it has been updated * then changes the last update date of the wsInfo and adds two entries to * DeploymentEngine - one for new deployment and other for undeployment. * * @param file actual jar files for either Module or service */ public synchronized void addWSInfoItem(File file, Deployer deployer , int type) { WSInfo info = (WSInfo) currentJars.get(file.getAbsolutePath()); if (info != null) { if (deploymentEngine.isHotUpdate() && isModified(file, info)) { WSInfo wsInfo = new WSInfo(info.getFileName(), info.getLastModifiedDate(), deployer,type); deploymentEngine.addWSToUndeploy(wsInfo); // add entry to undeploy list DeploymentFileData deploymentFileData = new DeploymentFileData(file, deployer); deploymentEngine.addWSToDeploy(deploymentFileData); // add entry to deploylist } } else { info = getFileItem(file, deployer, type); setLastModifiedDate(file, info); } jarList.add(info.getFileName()); } public synchronized void addWSInfoItem(URL url, Deployer deployer, int type) { // There is no way to set hot-update. // Here file.getAbsolutePath() = info.getFileName() WSInfo info = (WSInfo) currentJars.get(url.getPath()); if (info != null) { if (deploymentEngine.isHotUpdate()) { WSInfo wsInfo = new WSInfo(info.getFileName(), info.getLastModifiedDate(), deployer, type); deploymentEngine.addWSToUndeploy(wsInfo); // add entry to undeploy list DeploymentFileData deploymentFileData = new DeploymentFileData(url, deployer, null); deploymentEngine.addWSToDeploy(deploymentFileData); // add entry to deploylist } } else { info = getFileItem(url, deployer, type); } jarList.add(info.getFileName()); } /** * Checks undeployed Services. Checks old jars files and current jars. * If name of the old jar file does not exist in the current jar * list then it is assumed that the jar file has been removed * and that is hot undeployment. */ private synchronized void checkForUndeployedServices() { if(!locked) { locked = true; } else{ return; } Iterator infoItems = currentJars.keySet().iterator(); List tobeRemoved = new ArrayList(); while (infoItems.hasNext()) { String fileName = (String) infoItems.next(); WSInfo infoItem = (WSInfo) currentJars.get(fileName); if (infoItem.getType() == WSInfo.TYPE_MODULE) { continue; } //seems like someone has deleted the file , so need to undeploy boolean found = false; for (int i = 0; i < jarList.size(); i++) { String s = (String) jarList.get(i); if(fileName.equals(s)){ found = true; } } if(!found){ tobeRemoved.add(fileName); deploymentEngine.addWSToUndeploy(infoItem); } } for (int i = 0; i < tobeRemoved.size(); i++) { String fileName = (String) tobeRemoved.get(i); currentJars.remove(fileName); } tobeRemoved.clear(); jarList.clear(); locked = false; } /** * Clears the jarlist. */ public void init() { jarList.clear(); } /** * */ public void update() { synchronized (deploymentEngine) { checkForUndeployedServices(); deploymentEngine.unDeploy(); deploymentEngine.doDeploy(); } } /** * Gets the WSInfo object related to a file if it exists, null otherwise. * */ private WSInfo getFileItem(File file , Deployer deployer , int type) { String fileName = file.getName(); WSInfo info = (WSInfo) currentJars.get(fileName); if(info==null){ info = new WSInfo(file.getAbsolutePath(), file.lastModified(), deployer ,type); currentJars.put(file.getAbsolutePath(), info); DeploymentFileData fileData = new DeploymentFileData(file, deployer); deploymentEngine.addWSToDeploy(fileData); } return info; } /** * Gets the WSInfo object related to a file if it exists, null otherwise. * */ private WSInfo getFileItem(URL url, Deployer deployer, int type) { WSInfo info = (WSInfo) currentJars.get(url.getPath()); if (info == null) { info = new WSInfo(url.getPath(), 0, deployer, type); currentJars.put(url.getPath(), info); DeploymentFileData fileData = new DeploymentFileData(url, deployer, null); deploymentEngine.addWSToDeploy(fileData); } return info; } /** * Checks if a file has been modified by comparing the last update date of * both files and WSInfo. If they are different, the file is assumed to have * been modified. * * @param file * @param wsInfo */ private boolean isModified(File file, WSInfo wsInfo) { long currentTimeStamp = wsInfo.getLastModifiedDate(); setLastModifiedDate(file, wsInfo); return (currentTimeStamp != wsInfo.getLastModifiedDate()); } /** * Obtains the newest (as compared with timestamp stored in wsInfo) * timestamp and stores it in WSInfo. */ private void setLastModifiedDate(File file, WSInfo wsInfo) { if (file.isDirectory()) { File files [] = file.listFiles(); for (int i = 0; i < files.length; i++) { File fileItem = files[i]; if (fileItem.isDirectory()) { setLastModifiedDate(fileItem, wsInfo); } else if(wsInfo.getLastModifiedDate() < fileItem.lastModified()) { wsInfo.setLastModifiedDate(fileItem.lastModified()); } } } else if(wsInfo.getLastModifiedDate() < file.lastModified()) { wsInfo.setLastModifiedDate(file.lastModified()); } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy