in src/main/java/org/apache/openejb/cts/DeploymentImpl.java [133:203]
public InputStream getDeploymentPlan(final DeploymentInfo info) throws TSDeploymentException {
classpathBuilder = new StringBuilder();
final String earPath = info.getEarFile();
final String earDir = earPath.substring(0, earPath.lastIndexOf('.'));
try {
JarFile jarFile = new JarFile(earPath);
Enumeration<JarEntry> entries = jarFile.entries();
while (entries.hasMoreElements()) {
JarEntry jarEntry = entries.nextElement();
if (jarEntry.getName().startsWith("lib") && jarEntry.getName().endsWith(".jar")) {
if (classpathBuilder.toString().isEmpty()) {
classpathBuilder.append(String.format("%s%s", earDir, File.separator + jarEntry.getName()));
continue;
}
if (!classpathBuilder.toString().contains(jarEntry.getName())) {
classpathBuilder.append(String.format("%s%s%s", PATH_SEP, earDir, jarEntry.getName()));
}
}
}
} catch (IOException e) {
// do nop
}
if (earPath == null) {
throw new TSDeploymentException("EarFile is null");
}
log.println(HEAD + "module: " + earPath);
final Properties properties = new Properties();
properties.put(FILENAME, earPath);
final Set<String> moduleIds = new TreeSet<String>();
moduleIds.addAll(info.getWebRuntimeData().keySet());
moduleIds.addAll(info.getEjbRuntimeData().keySet());
moduleIds.addAll(info.getAppRuntimeData().keySet());
moduleIds.addAll(info.getAppClientRuntimeData().keySet());
for (final String path : info.getRuntimeFiles()) {
final String earName = earName(path, earPath);
if (earName != null && path.contains(earName)) {
final String name = path.substring(path.indexOf(earName) + earName.length() + 1);
properties.put(ALT_DD + "/" + name, path);
} else {
final String fileName = new File(path).getName();
for (final String moduleId : moduleIds) {
if (fileName.startsWith(moduleId)) {
final String name = fileName.substring(moduleId.length() + 1);
properties.put(ALT_DD + "/" + moduleId + "/" + name, path);
// hack when deployer is used to deploy war in a standalone manner and not within an ear file
// in that case, the altDD above are not read and webapp context is not overridden by the sun web.xml
final Object webAppObject = info.getWebRuntimeData().get(moduleId);
if (webAppObject != null) {
final SunWebApp sunWebApp = SunWebApp.class.cast(webAppObject);
if (sunWebApp.getContextRoot() != null) {
properties.put("webapp." + moduleId + ".context-root", sunWebApp.getContextRoot());
}
}
}
}
}
}
final ByteArrayOutputStream out = new ByteArrayOutputStream();
try {
properties.store(out, "Auto Generated Deployment Plan");
} catch (final IOException e) {
throw new TSDeploymentException("Unable to create deployment plan", e);
}
return new ByteArrayInputStream(out.toByteArray());
}