return test;
}
public DeploymentContext buildConfiguration(boolean inPlaceDeployment, Artifact configId, Object plan, JarFile earFile, Collection configurationStores, ArtifactResolver artifactResolver, ConfigurationStore targetConfigurationStore) throws IOException, DeploymentException {
assert plan != null;
ApplicationInfo applicationInfo = (ApplicationInfo) plan;
EARContext earContext = null;
ConfigurationModuleType applicationType = applicationInfo.getType();
applicationInfo.getEnvironment().setConfigId(configId);
File configurationDir;
try {
configurationDir = targetConfigurationStore.createNewConfigurationDir(configId);
} catch (ConfigurationAlreadyExistsException e) {
throw new DeploymentException(e);
}
ConfigurationManager configurationManager = this.configurationManager;
if (configurationManager == null) {
configurationManager = new SimpleConfigurationManager(configurationStores, artifactResolver, repositories);
}
try {
// Create the output ear context
earContext = new EARContext(configurationDir,
inPlaceDeployment ? DeploymentUtil.toFile(earFile) : null,
applicationInfo.getEnvironment(),
applicationType,
naming,
configurationManager,
repositories,
serverName,
applicationInfo.getModuleName(),
transactionManagerObjectName,
connectionTrackerObjectName,
transactionalTimerObjectName,
nonTransactionalTimerObjectName,
corbaGBeanObjectName
);
applicationInfo.setEarContext(earContext);
applicationInfo.setRootEarContext(earContext);
earContext.getGeneralData().put(ModuleList.class, applicationInfo.getModuleLocations());
// Copy over all files that are _NOT_ modules (e.g. META-INF and APP-INF files)
Set moduleLocations = applicationInfo.getModuleLocations();
ClassPathList libClasspath = new ClassPathList();
if (ConfigurationModuleType.EAR == applicationType && earFile != null) {
//get the value of the library-directory element in spec DD
ApplicationType specDD = (ApplicationType) applicationInfo.getSpecDD();
String libDir = getLibraryDirectory(specDD);
for (Enumeration<JarEntry> e = earFile.entries(); e.hasMoreElements();) {
ZipEntry entry = e.nextElement();
String entryName = entry.getName();
boolean addEntry = true;
for (Object moduleLocation : moduleLocations) {
String location = (String) moduleLocation;
if (entryName.startsWith(location)) {
addEntry = false;
break;
}
}
if (libDir != null && entry.getName().startsWith(libDir) && entry.getName().endsWith(".jar")) {
NestedJarFile library = new NestedJarFile(earFile, entry.getName());
earContext.addIncludeAsPackedJar(URI.create(entry.getName()), library);
libClasspath.add(entry.getName());
} else if (addEntry) {
earContext.addFile(URI.create(entry.getName()), earFile, entry);
}
}
if (!libClasspath.isEmpty()) {
earContext.getGeneralData().put(ClassPathList.class, libClasspath);
}
}
GerApplicationType geronimoApplication = (GerApplicationType) applicationInfo.getVendorDD();
// each module installs it's files into the output context.. this is different for each module type
LinkedHashSet modules = applicationInfo.getModules();
for (Object module2 : modules) {
Module module = (Module) module2;
getBuilder(module).installModule(earFile, earContext, module, configurationStores, targetConfigurationStore, repositories);
}
earContext.flush();
// give each module a chance to populate the earContext now that a classloader is available
ClassLoader cl = earContext.getClassLoader();
for (Object module3 : modules) {
Module module = (Module) module3;
getBuilder(module).initContext(earContext, module, cl);
}
// add gbeans declared in the geronimo-application.xml
if (geronimoApplication != null) {
securityBuilders.build(geronimoApplication, earContext, earContext);
serviceBuilders.build(geronimoApplication, earContext, earContext);
}
if (ConfigurationModuleType.EAR == applicationType) {
// process persistence unit in EAR library directory
earContext.getGeneralData().put(ClassPathList.class, libClasspath);
for (ModuleBuilderExtension mbe: persistenceUnitBuilders) {
mbe.initContext(earContext, applicationInfo, earContext.getClassLoader());
}
// Create the J2EEApplication managed object
GBeanData gbeanData = new GBeanData(earContext.getModuleName(), J2EEApplicationImpl.GBEAN_INFO);
try {
String originalSpecDD = applicationInfo.getOriginalSpecDD();
if (originalSpecDD == null) {
originalSpecDD = "Synthetic EAR";
}
gbeanData.setAttribute("deploymentDescriptor", originalSpecDD);
} catch (Exception e) {
throw new DeploymentException("Error initializing J2EEApplication managed object", e);
}
gbeanData.setReferencePatterns("Server", new ReferencePatterns(new AbstractNameQuery(J2EEServer.class.getName())));
Map<String, String> thisApp = Collections.singletonMap(NameFactory.J2EE_APPLICATION, earContext.getModuleName().getNameProperty(NameFactory.J2EE_NAME));
LinkedHashSet<AbstractNameQuery> resourcePatterns = new LinkedHashSet<AbstractNameQuery>();
resourcePatterns.add(new AbstractNameQuery(null, filter(thisApp, NameFactory.J2EE_TYPE, NameFactory.JAVA_MAIL_RESOURCE), J2EEResource.class.getName()));
resourcePatterns.add(new AbstractNameQuery(null, filter(thisApp, NameFactory.J2EE_TYPE, NameFactory.JCA_CONNECTION_FACTORY), J2EEResource.class.getName()));
resourcePatterns.add(new AbstractNameQuery(null, filter(thisApp, NameFactory.J2EE_TYPE, NameFactory.JDBC_RESOURCE), J2EEResource.class.getName()));
resourcePatterns.add(new AbstractNameQuery(null, filter(thisApp, NameFactory.J2EE_TYPE, NameFactory.JDBC_DRIVER), J2EEResource.class.getName()));
resourcePatterns.add(new AbstractNameQuery(null, filter(thisApp, NameFactory.J2EE_TYPE, NameFactory.JMS_RESOURCE), J2EEResource.class.getName()));
resourcePatterns.add(new AbstractNameQuery(null, filter(thisApp, NameFactory.J2EE_TYPE, NameFactory.JNDI_RESOURCE), J2EEResource.class.getName()));
resourcePatterns.add(new AbstractNameQuery(null, filter(thisApp, NameFactory.J2EE_TYPE, NameFactory.JTA_RESOURCE), J2EEResource.class.getName()));
resourcePatterns.add(new AbstractNameQuery(null, filter(thisApp, NameFactory.J2EE_TYPE, NameFactory.RMI_IIOP_RESOURCE), J2EEResource.class.getName()));
resourcePatterns.add(new AbstractNameQuery(null, filter(thisApp, NameFactory.J2EE_TYPE, NameFactory.URL_RESOURCE), J2EEResource.class.getName()));
gbeanData.setReferencePatterns("Resources", resourcePatterns);
gbeanData.setReferencePatterns("AppClientModules", new ReferencePatterns(new AbstractNameQuery(null, thisApp, org.apache.geronimo.management.AppClientModule.class.getName())));
gbeanData.setReferencePatterns("EJBModules", new ReferencePatterns(new AbstractNameQuery(null, thisApp, org.apache.geronimo.management.EJBModule.class.getName())));
gbeanData.setReferencePatterns("ResourceAdapterModules", new ReferencePatterns(new AbstractNameQuery(null, thisApp, org.apache.geronimo.management.geronimo.ResourceAdapterModule.class.getName())));
gbeanData.setReferencePatterns("WebModules", new ReferencePatterns(new AbstractNameQuery(null, thisApp, org.apache.geronimo.management.geronimo.WebModule.class.getName())));
earContext.addGBean(gbeanData);
}
// each module can now add it's GBeans
for (Object module1 : modules) {
Module module = (Module) module1;
getBuilder(module).addGBeans(earContext, module, cl, repositories);
}
// it's the caller's responsibility to close the context...
return earContext;
} catch (GBeanAlreadyExistsException e) {
cleanupContext(earContext, configurationDir);
throw new DeploymentException(e);
} catch (IOException e) {
cleanupContext(earContext, configurationDir);
throw e;
} catch (DeploymentException e) {
cleanupContext(earContext, configurationDir);
throw e;
} catch (RuntimeException e) {
cleanupContext(earContext, configurationDir);
throw e;
} catch (Error e) {
cleanupContext(earContext, configurationDir);
throw e;
} finally {
for (Object module1 : applicationInfo.getModules()) {
Module module = (Module) module1;
module.close();
}
}
}