deploymentengine.java
来自「开源的axis2框架的源码。用于开发WEBSERVER」· Java 代码 · 共 1,118 行 · 第 1/4 页
JAVA
1,118 行
public void addWSToUndeploy(WSInfo file) {
wsToUnDeploy.add(file);
}
public void doDeploy() {
try {
if (wsToDeploy.size() > 0) {
for (int i = 0; i < wsToDeploy.size(); i++) {
DeploymentFileData fileToDeploy = (DeploymentFileData) wsToDeploy.get(i);
try {
fileToDeploy.deploy();
} catch (DeploymentException e) {
// TODO : This probably isn't sufficient. Maybe provide an option to stop?
log.info(e);
}
}
}
} finally {
wsToDeploy.clear();
}
}
/**
* Checks if the modules, referred by server.xml, exist or that they are deployed.
*
* @throws org.apache.axis2.AxisFault : If smt goes wrong
*/
public void engageModules() throws AxisFault {
axisConfig.engageGlobalModules();
}
/**
* To get AxisConfiguration for a given inputStream this method can be used.
* The inputstream should be a valid axis2.xml , else you will be getting
* DeploymentExceptions.
* <p/>
* First creat a AxisConfiguration using given inputSream , and then it will
* try to find the repository location parameter from AxisConfiguration, so
* if user has add a parameter with the name "repository" , then the value
* specified by that parameter will be the repository and system will try to
* load modules and services from that repository location if it a valid
* location. hot deployment and hot update will work as usual in this case.
* <p/>
* You will be getting AxisConfiguration corresponding to given inputstream
* if it is valid , if something goes wrong you will be getting
* DeploymentException
*
* @param in : InputStream to axis2.xml
* @return a populated AxisConfiguration
* @throws DeploymentException : If something goes wrong
*/
public AxisConfiguration populateAxisConfiguration(InputStream in) throws DeploymentException {
axisConfig = new AxisConfiguration();
AxisConfigBuilder builder = new AxisConfigBuilder(in, axisConfig, this);
builder.populateConfig();
try {
if (in != null) {
in.close();
}
} catch (IOException e) {
log.info("error in closing input stream");
}
moduleDeployer = new ModuleDeployer(axisConfig);
return axisConfig;
}
/**
* Starts the Deployment engine to perform Hot deployment and so on.
*
* @param listener : RepositoryListener
*/
protected void startSearch(RepositoryListener listener) {
scheduler = new Scheduler();
scheduler.schedule(new SchedulerTask(listener), new DeploymentIterator());
}
public void unDeploy() {
try {
if (wsToUnDeploy.size() > 0) {
for (int i = 0; i < wsToUnDeploy.size(); i++) {
WSInfo wsInfo = (WSInfo) wsToUnDeploy.get(i);
if (wsInfo.getType() == WSInfo.TYPE_SERVICE) {
//No matter what we need to undeploy the service
// if user has deleted the file from the repository
serviceDeployer.unDeploy(wsInfo.getFileName());
} else {
//We need to undeploy the service whether we have enable hotUpdate or not ,
// o.w what happen if someone delete the service from the repo
Deployer deployer = wsInfo.getDeployer();
if (deployer != null) {
deployer.unDeploy(wsInfo.getFileName());
}
}
}
}
} catch (Exception e) {
log.info(e);
}
wsToUnDeploy.clear();
}
/**
* Gets AxisConfiguration.
*
* @return AxisConfiguration <code>AxisConfiguration</code>
*/
public AxisConfiguration getAxisConfig() {
return axisConfig;
}
/**
* Retrieves service name from the archive file name.
* If the archive file name is service1.aar , then axis2 service name would be service1
*
* @param fileName the archive file name
* @return Returns String.
*/
public static String getAxisServiceName(String fileName) {
char seperator = '.';
String value;
int index = fileName.lastIndexOf(seperator);
if (index > 0) {
value = fileName.substring(0, index);
return value;
}
return fileName;
}
public AxisModule getModule(String moduleName) throws AxisFault {
return axisConfig.getModule(moduleName);
}
public boolean isHotUpdate() {
return hotUpdate;
}
private static void addAsWebResources(File in,
String serviceFileName,
AxisServiceGroup serviceGroup) {
try {
if (webLocationString == null) {
return;
}
if (in.isDirectory()) {
return;
}
File webLocation = new File(webLocationString);
File out = new File(webLocation, serviceFileName);
int BUFFER = 1024;
byte data[] = new byte[BUFFER];
FileInputStream fin = new FileInputStream(in);
ZipInputStream zin = new ZipInputStream(
fin);
ZipEntry entry;
while ((entry = zin.getNextEntry()) != null) {
ZipEntry zip = new ZipEntry(entry);
if (zip.getName().toUpperCase().startsWith("WWW")) {
String fileName = zip.getName();
fileName = fileName.substring("WWW/".length(),
fileName.length());
if (zip.isDirectory()) {
new File(out, fileName).mkdirs();
} else {
FileOutputStream tempOut = new FileOutputStream(new File(out, fileName));
int count;
while ((count = zin.read(data, 0, BUFFER)) != -1) {
tempOut.write(data, 0, count);
}
tempOut.close();
tempOut.flush();
}
serviceGroup.setFoundWebResources(true);
}
}
zin.close();
fin.close();
} catch (IOException e) {
log.info(e.getMessage());
}
}
public String getWebLocationString() {
return webLocationString;
}
/**
* To set the all the classLoader hierarchy this method can be used , the top most parent is
* CCL then SCL(system Class Loader)
* CCL
* :
* SCL
* : :
* MCCL SCCL
* : :
* MCL SCL
* <p/>
* <p/>
* MCCL : module common class loader
* SCCL : Service common class loader
* MCL : module class loader
* SCL : Service class loader
*
* @param axis2repoURI : The repository folder of Axis2
* @throws DeploymentException if there's a problem
*/
protected void setClassLoaders(String axis2repoURI) throws DeploymentException {
ClassLoader sysClassLoader =
Utils.getClassLoader(Thread.currentThread().getContextClassLoader(), axis2repoURI);
axisConfig.setSystemClassLoader(sysClassLoader);
if (servicesDir.exists()) {
axisConfig.setServiceClassLoader(
Utils.getClassLoader(axisConfig.getSystemClassLoader(), servicesDir));
} else {
axisConfig.setServiceClassLoader(axisConfig.getSystemClassLoader());
}
if (modulesDir.exists()) {
axisConfig.setModuleClassLoader(Utils.getClassLoader(axisConfig.getSystemClassLoader(),
modulesDir));
} else {
axisConfig.setModuleClassLoader(axisConfig.getSystemClassLoader());
}
}
/**
* Sets hotDeployment and hot update.
*/
protected void setDeploymentFeatures() {
Parameter hotDeployment = axisConfig.getParameter(TAG_HOT_DEPLOYMENT);
Parameter hotUpdate = axisConfig.getParameter(TAG_HOT_UPDATE);
if (hotDeployment != null) {
this.hotDeployment = JavaUtils.isTrue(hotDeployment.getValue(), true);
}
if (hotUpdate != null) {
this.hotUpdate = JavaUtils.isTrue(hotUpdate.getValue(), true);
}
String serviceDirPara = (String)
axisConfig.getParameterValue(DeploymentConstants.SERVICE_DIR_PATH);
if (serviceDirPara != null) {
servicesPath = serviceDirPara;
}
String moduleDirPara = (String)
axisConfig.getParameterValue(DeploymentConstants.MODULE_DRI_PATH);
if (moduleDirPara != null) {
modulesPath = moduleDirPara;
}
}
/**
* Creates directories for modules/services, copies configuration xml from class loader if necessary
*
* @param repositoryName the pathname of the repository
*/
protected void prepareRepository(String repositoryName) {
repositoryDir = new File(repositoryName);
if (servicesPath != null) {
servicesDir = new File(servicesPath);
if (!servicesDir.exists()) {
servicesDir = new File(repositoryDir, servicesPath);
}
} else {
servicesDir = new File(repositoryDir, DeploymentConstants.SERVICE_PATH);
}
if (!servicesDir.exists()) {
log.info(Messages.getMessage("noservicedirfound", getRepositoryPath(repositoryDir)));
}
if (modulesPath != null) {
modulesDir = new File(modulesPath);
if (!modulesDir.exists()) {
modulesDir = new File(repositoryDir, modulesPath);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?