deploymentengine.java
来自「开源的axis2框架的源码。用于开发WEBSERVER」· Java 代码 · 共 1,118 行 · 第 1/4 页
JAVA
1,118 行
/*
* 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 org.apache.axiom.om.OMElement;
import org.apache.axis2.AxisFault;
import org.apache.axis2.Constants;
import org.apache.axis2.context.ConfigurationContext;
import org.apache.axis2.deployment.repository.util.ArchiveReader;
import org.apache.axis2.deployment.repository.util.DeploymentFileData;
import org.apache.axis2.deployment.repository.util.WSInfo;
import org.apache.axis2.deployment.scheduler.DeploymentIterator;
import org.apache.axis2.deployment.scheduler.Scheduler;
import org.apache.axis2.deployment.scheduler.SchedulerTask;
import org.apache.axis2.deployment.util.Utils;
import org.apache.axis2.deployment.resolver.AARBasedWSDLLocator;
import org.apache.axis2.deployment.resolver.AARFileBasedURIResolver;
import org.apache.axis2.description.*;
import org.apache.axis2.engine.AxisConfiguration;
import org.apache.axis2.engine.MessageReceiver;
import org.apache.axis2.i18n.Messages;
import org.apache.axis2.util.JavaUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import javax.xml.namespace.QName;
import javax.xml.stream.XMLStreamException;
import java.io.*;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
public abstract class DeploymentEngine implements DeploymentConstants {
private static final Log log = LogFactory.getLog(DeploymentEngine.class);
//to keep the web resource location if any
protected static String webLocationString = null;
protected Scheduler scheduler;
public static void setWebLocationString(String webLocationString) {
DeploymentEngine.webLocationString = webLocationString;
}
/**
* Support for hot update is controlled by this flag
*/
protected boolean hotUpdate = true;
/**
* Support for hot deployment is controlled by this flag
*/
protected boolean hotDeployment = true;
/**
* Stores all the web Services to deploy.
*/
protected List wsToDeploy = new ArrayList();
/**
* Stores all the web Services to undeploy.
*/
protected List wsToUnDeploy = new ArrayList();
/**
* to keep a ref to engine register
* this ref will pass to engine when it call start()
* method
*/
protected AxisConfiguration axisConfig;
protected ConfigurationContext configContext;
protected RepositoryListener repoListener;
protected String servicesPath = null;
protected File servicesDir = null;
protected String modulesPath = null;
protected File modulesDir = null;
private File repositoryDir = null;
//to deploy service (both aar and expanded)
protected ServiceDeployer serviceDeployer;
//To deploy modules (both mar and expanded)
protected ModuleDeployer moduleDeployer;
//To keep the mapping that which directory will contain which type ,
// for exmaple directory services will contains .aar
private HashMap directoryToExtensionMappingMap = new HashMap();
//to keep map of which deployer can process which file extension ,
// for example ServiceDeployer will process .aar file
private HashMap extensionToDeployerMappingMap = new HashMap();
public void loadServices() {
repoListener.checkServices();
if (hotDeployment) {
startSearch(repoListener);
}
}
public void loadRepository(String repoDir) throws DeploymentException {
File axisRepo = new File(repoDir);
if (!axisRepo.exists()) {
throw new DeploymentException(
Messages.getMessage("cannotfindrepo", repoDir));
}
setDeploymentFeatures();
prepareRepository(repoDir);
// setting the CLs
setClassLoaders(repoDir);
repoListener = new RepositoryListener(this, false);
org.apache.axis2.util.Utils
.calculateDefaultModuleVersion(axisConfig.getModules(), axisConfig);
try {
try {
axisConfig.setRepository(axisRepo.toURL());
} catch (MalformedURLException e) {
log.info(e.getMessage());
}
axisConfig.validateSystemPredefinedPhases();
} catch (AxisFault axisFault) {
throw new DeploymentException(axisFault);
}
}
public void loadFromClassPath() throws DeploymentException {
//loading modules from the classpath
new RepositoryListener(this, true);
org.apache.axis2.util.Utils.calculateDefaultModuleVersion(
axisConfig.getModules(), axisConfig);
axisConfig.validateSystemPredefinedPhases();
try {
engageModules();
} catch (AxisFault axisFault) {
log.info(Messages.getMessage(DeploymentErrorMsgs.MODULE_VALIDATION_FAILED,
axisFault.getMessage()));
throw new DeploymentException(axisFault);
}
}
public void loadServicesFromUrl(URL repoURL) {
try {
String path = servicesPath == null ? DeploymentConstants.SERVICE_PATH : servicesPath;
if (!path.endsWith("/")) {
path += "/";
}
String repoPath = repoURL.getPath();
if (!repoPath.endsWith("/")) {
repoPath += "/";
repoURL = new URL(repoURL.getProtocol() + "://" + repoPath);
}
URL servicesDir = new URL(repoURL, path);
URL filelisturl = new URL(servicesDir, "services.list");
ArrayList files = getFileList(filelisturl);
for (Iterator fileIterator = files.iterator();
fileIterator.hasNext();) {
String fileUrl = (String) fileIterator.next();
if (fileUrl.endsWith(".aar")) {
AxisServiceGroup serviceGroup = new AxisServiceGroup();
URL servicesURL = new URL(servicesDir, fileUrl);
ArrayList servicelist =
populateService(serviceGroup,
servicesURL,
fileUrl.substring(0, fileUrl.indexOf(".aar")));
addServiceGroup(serviceGroup, servicelist, servicesURL, null, axisConfig);
log.info(Messages.getMessage(DeploymentErrorMsgs.DEPLOYING_WS,
org.apache.axis2.util.Utils.getModuleName(serviceGroup.getServiceGroupName())));
}
}
} catch (MalformedURLException e) {
log.error(e.getMessage(), e);
} catch (IOException e) {
log.error(e.getMessage(), e);
}
}
public void loadRepositoryFromURL(URL repoURL) throws DeploymentException {
try {
String path = modulesPath == null ? DeploymentConstants.MODULE_PATH : modulesPath;
if (!path.endsWith("/")) {
path = path + "/";
}
String repoPath = repoURL.getPath();
if (!repoPath.endsWith("/")) {
repoPath += "/";
repoURL = new URL(repoURL.getProtocol() + "://" + repoPath);
}
URL moduleDir = new URL(repoURL, path);
URL filelisturl = new URL(moduleDir, "modules.list");
ArrayList files = getFileList(filelisturl);
Iterator fileIterator = files.iterator();
while (fileIterator.hasNext()) {
String fileUrl = (String) fileIterator.next();
if (fileUrl.endsWith(".mar")) {
URL moduleurl = new URL(moduleDir, fileUrl);
ClassLoader deploymentClassLoader =
Utils.createClassLoader(
new URL[]{moduleurl},
axisConfig.getModuleClassLoader(),
true,
(File) axisConfig.getParameterValue(Constants.Configuration.ARTIFACTS_TEMP_DIR));
AxisModule module = new AxisModule();
module.setModuleClassLoader(deploymentClassLoader);
module.setParent(axisConfig);
String moduleFile = fileUrl.substring(0, fileUrl.indexOf(".mar"));
if (module.getName() == null) {
module.setName(org.apache.axis2.util.Utils.getModuleName(moduleFile));
module.setVersion(org.apache.axis2.util.Utils.getModuleVersion(moduleFile));
}
populateModule(module, moduleurl);
module.setFileName(moduleurl);
addNewModule(module, axisConfig);
log.info(Messages.getMessage(DeploymentErrorMsgs.DEPLOYING_MODULE,
org.apache.axis2.util.Utils.getModuleName(module.getName(),
module.getVersion())));
}
}
org.apache.axis2.util.Utils.
calculateDefaultModuleVersion(axisConfig.getModules(), axisConfig);
axisConfig.validateSystemPredefinedPhases();
} catch (MalformedURLException e) {
throw new DeploymentException(e);
} catch (IOException e) {
throw new DeploymentException(e);
}
}
private void populateModule(AxisModule module, URL moduleUrl) throws DeploymentException {
try {
ClassLoader classLoader = module.getModuleClassLoader();
InputStream moduleStream = classLoader.getResourceAsStream("META-INF/module.xml");
if (moduleStream == null) {
moduleStream = classLoader.getResourceAsStream("meta-inf/module.xml");
}
if (moduleStream == null) {
throw new DeploymentException(
Messages.getMessage(
DeploymentErrorMsgs.MODULE_XML_MISSING, moduleUrl.toString()));
}
ModuleBuilder moduleBuilder = new ModuleBuilder(moduleStream, module, axisConfig);
moduleBuilder.populateModule();
} catch (IOException e) {
throw new DeploymentException(e);
}
}
protected ArrayList populateService(AxisServiceGroup serviceGroup,
URL servicesURL,
String serviceName) throws DeploymentException {
try {
serviceGroup.setServiceGroupName(serviceName);
ClassLoader serviceClassLoader = Utils.createClassLoader(
new URL[]{servicesURL},
axisConfig.getServiceClassLoader(),
true,
(File) axisConfig.getParameterValue(Constants.Configuration.ARTIFACTS_TEMP_DIR));
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?