in plugins/org.apache.geronimo.st.v30.core/src/main/java/org/apache/geronimo/st/v30/core/GeronimoServerBehaviourDelegate.java [484:568]
private void publishEBAModule(int kind, MultiStatus multi, IProgressMonitor monitor, ModuleDeltaList moduleList) {
Trace.traceEntry(Activator.traceCore, "GeronimoServerBehaviourDelegate.publishEBAModule", Arrays.toString(moduleList.getRootModule()));
Map<IModule[], IStatus> statusMap = new HashMap<IModule[], IStatus>();
if (getServerDelegate().isNoRedeploy() && !isRemote()) {
if (moduleList.hasChangedChildModulesOnly(true)) {
List<ModuleInfo> childModules = moduleList.getChildModules();
for (ModuleInfo module : childModules) {
if (module.delta == CHANGED) {
// changed module - try to do replacement
IModuleResourceDelta[] delta = getPublishedResourceDelta(module.module);
IModuleResourceDelta[] nonClassDelta = FilteredClassResourceDelta.getChangedClassExcludeDelta(delta);
if (Activator.getDefault().isDebugging()) {
Trace.trace(Trace.INFO, "Non-modified class delta for " + module, Activator.traceCore);
traceModuleResourceDelta(nonClassDelta, " ");
}
IStatus status = tryFileReplace(module.module, nonClassDelta);
if (status == null) {
// replace not performed - must redeploy bundle or entire application
} else if (status.isOK()) {
boolean containsModifiedClasses = DeploymentUtils.containsChangedClassResources(delta);
if (containsModifiedClasses) {
// replace performed but we have modified classes to deploy
// set remaining resource delta to process
IModuleResourceDelta[] classDelta = FilteredClassResourceDelta.getChangedClassIncludeDelta(delta);
if (Activator.getDefault().isDebugging()) {
Trace.trace(Trace.INFO, "Modified class delta for " + module, Activator.traceCore);
traceModuleResourceDelta(classDelta, " ");
}
module.resourceDelta = classDelta;
} else {
// replace performed and was successful
statusMap.put(module.module, status);
}
} else {
// replace performed but failed
statusMap.put(module.module, status);
}
} else {
// non-changed module
statusMap.put(module.module, Status.OK_STATUS);
}
}
if (statusMap.size() == childModules.size()) {
// replacement was possible for all changed child modules - we're done
for (Map.Entry<IModule[], IStatus> entry : statusMap.entrySet()) {
setStatus(entry.getKey(), entry.getValue(), multi);
}
setStatus(moduleList.getRootModule(), Status.OK_STATUS, multi);
Trace.traceExit(Activator.traceCore, "GeronimoServerBehaviourDelegate.publishEBAModule", "File replace");
return;
}
// fall-through: replacement was not possible for at least one child module or more work to do
}
}
boolean refreshOSGiBundle = getServerDelegate().isRefreshOSGiBundle();
if (refreshOSGiBundle && moduleList.hasChangedChildModulesOnly(false)) {
AbstractName ebaName = getApplicationGBeanName(moduleList.getRootModule()[0]);
if (ebaName != null) {
for (ModuleInfo module : moduleList.getChildModules()) {
IStatus status = statusMap.get(module.module);
if (status == null) {
if (module.delta == CHANGED) {
status = refreshBundle(ebaName, module);
} else {
status = Status.OK_STATUS;
}
}
setStatus(module.module, status, multi);
}
setStatus(moduleList.getRootModule(), Status.OK_STATUS, multi);
Trace.traceExit(Activator.traceCore, "GeronimoServerBehaviourDelegate.publishEBAModule", "Bundle update");
return;
}
}
// deploy the entire module
publishEntireModule(kind, multi, monitor, moduleList);
Trace.traceExit(Activator.traceCore, "GeronimoServerBehaviourDelegate.publishEBAModule");
}