DescriptorArchivistpublic class DescriptorArchivist extends Object This class is responsible for writing deployment descriptors
after a deployment action has occured to a abstract archive instance. |
Constructors Summary |
---|
public DescriptorArchivist()Creates a new instance of DescriptorArchivist
|
Methods Summary |
---|
public void | write(com.sun.enterprise.deployment.Application application, com.sun.enterprise.deployment.deploy.shared.AbstractArchive in, com.sun.enterprise.deployment.deploy.shared.AbstractArchive out)writes an application deployment descriptors
if (application.isVirtual()) {
ModuleDescriptor aModule = (ModuleDescriptor) application.getModules().next();
Archivist moduleArchivist = ArchivistFactory.getArchivistForType(aModule.getModuleType());
write(aModule.getDescriptor(), moduleArchivist, in, out);
} else {
// this is a real application.
// let's start by writing out all submodules deployment descriptors
for (Iterator modules = application.getModules();modules.hasNext();) {
ModuleDescriptor aModule = (ModuleDescriptor) modules.next();
Archivist moduleArchivist = ArchivistFactory.getArchivistForType(aModule.getModuleType());
if (aModule.getAlternateDescriptor()!=null) {
// the application is using alternate deployment descriptors
// write or copy standard deployment descriptor
String ddPath = aModule.getAlternateDescriptor();
DeploymentDescriptorFile ddFile =
moduleArchivist.getStandardDDFile();
BundleDescriptor bundle =
(BundleDescriptor)aModule.getDescriptor();
if (!bundle.isFullFlag()) {
if (ddFile != null) {
OutputStream os = out.putNextEntry(ddPath);
ddFile.write(bundle, os);
out.closeEntry();
}
} else {
if (aModule.getModuleType().equals(ModuleType.WAR)) {
WebBundleDescriptor webBundle =
(WebBundleDescriptor) aModule.getDescriptor();
if (webBundle.hasWebServices()) {
if (ddFile != null) {
OutputStream os = out.putNextEntry(ddPath);
ddFile.write(webBundle, os);
out.closeEntry();
}
} else {
Archivist.copyAnEntry(in, out, ddPath);
}
} else {
Archivist.copyAnEntry(in, out, ddPath);
}
}
String runtimeDDPath = "sun-" + ddPath;
DeploymentDescriptorFile confDDFile = moduleArchivist.getConfigurationDDFile();
if (confDDFile!=null) {
OutputStream os = out.putNextEntry(runtimeDDPath);
confDDFile.write(aModule.getDescriptor(), os);
out.closeEntry();
}
} else {
String archiveUri = in.getArchiveUri();
String moduleUri = aModule.getArchiveUri();
AbstractArchive moduleArchive;
AbstractArchive moduleArchive2 = in.getEmbeddedArchive(archiveUri);
if (new File(archiveUri).isDirectory() &&
archiveUri.endsWith(".ear") &&
new File(archiveUri, moduleUri).isDirectory() &&
(moduleUri.endsWith(".war") ||
moduleUri.endsWith(".rar") ||
moduleUri.endsWith(".jar")) ) {
// this is the case where we support the directory deployment
// of directory names ending with module type suffix.
File subDir = new File(out.getArchiveUri(), moduleUri);
if (!subDir.exists()) {
subDir.mkdirs();
}
moduleArchive = new FileArchive();
((FileArchive)moduleArchive).open(subDir.getPath());
} else {
moduleArchive = out.getEmbeddedArchive(moduleUri);
}
write(aModule.getDescriptor(), moduleArchivist, moduleArchive2, moduleArchive);
}
}
// now let's write the application descriptor
ApplicationArchivist archivist = new ApplicationArchivist();
archivist.setDescriptor(application);
archivist.writeRuntimeDeploymentDescriptors(out);
if (application.isLoadedFromApplicationXml()) {
archivist.copyStandardDeploymentDescriptors(in, out);
} else {
archivist.writeStandardDeploymentDescriptors(out);
}
}
| public void | write(com.sun.enterprise.deployment.BundleDescriptor bundle, com.sun.enterprise.deployment.deploy.shared.AbstractArchive in, com.sun.enterprise.deployment.deploy.shared.AbstractArchive out)writes a bundle descriptor
Archivist archivist = ArchivistFactory.getArchivistForArchive(out);
write(bundle, archivist, in, out);
| protected void | write(com.sun.enterprise.deployment.BundleDescriptor bundle, com.sun.enterprise.deployment.archivist.Archivist archivist, com.sun.enterprise.deployment.deploy.shared.AbstractArchive in, com.sun.enterprise.deployment.deploy.shared.AbstractArchive out)writes a bundle descriptor
archivist.setDescriptor(bundle);
archivist.writeRuntimeDeploymentDescriptors(out);
// this path is only called through dynamic deployment
// i.e from EJBCompiler.preDeployApp -> BaseManager.saveAppDescriptor
// so write out deployment descriptors if it's not a full DD
if (!bundle.isFullFlag()) {
archivist.writeStandardDeploymentDescriptors(out);
} else {
// Also if this is a web bundle descriptor, we always want to
// rewrite the standard deployment descriptors if we have web
// services since the servlet implementation has been switched
if (bundle.getModuleType().equals(ModuleType.WAR)) {
WebBundleDescriptor webBundle = (WebBundleDescriptor) bundle;
if (webBundle.hasWebServices()) {
archivist.writeStandardDeploymentDescriptors(out);
} else {
archivist.copyStandardDeploymentDescriptors(in, out);
}
} else {
archivist.copyStandardDeploymentDescriptors(in, out);
}
}
// copy mapping files if it's not ended with .xml
// all xml files will be copied later in BaseManager
// (Archivist.copyExtraElements)
if (bundle.hasWebServices()) {
WebServicesDescriptor webServices = bundle.getWebServices();
for (WebService webService : webServices.getWebServices()) {
if (webService.hasMappingFile() &&
!webService.getMappingFileUri().endsWith(".xml")) {
Archivist.copyAnEntry(in, out,
webService.getMappingFileUri());
}
}
}
|
|