// Don't set temporarily created instanceroot in the user supplied
// GlassFishProperties, hence clone it.
Properties cloned = new Properties();
cloned.putAll(glassFishProperties.getProperties());
final GlassFishProperties gfProps = new GlassFishProperties(cloned);
setEnv(gfProps);
final StartupContext startupContext = new StartupContext(gfProps.getProperties());
ModulesRegistry modulesRegistry = SingleHK2Factory.getInstance().createModulesRegistry();
ServiceLocator serviceLocator = main.createServiceLocator(modulesRegistry, startupContext, Arrays.asList((PopulatorPostProcessor)new EmbeddedInhabitantsParser(), new ContextDuplicatePostProcessor()), null);
final ModuleStartup gfKernel = main.findStartupService(modulesRegistry, serviceLocator, null, startupContext);
// create a new GlassFish instance
GlassFishImpl gfImpl = new GlassFishImpl(gfKernel, serviceLocator, gfProps.getProperties()) {
@Override
public void dispose() throws GlassFishException {
try {
super.dispose();
} finally {
gfMap.remove(gfProps.getInstanceRoot());
if ("true".equalsIgnoreCase(gfProps.getProperties().
getProperty(autoDelete)) && gfProps.getInstanceRoot() != null) {
File instanceRoot = new File(gfProps.getInstanceRoot());
if (instanceRoot.exists()) { // might have been deleted already.
Util.deleteRecursive(instanceRoot);
}
}
}
}
};
// Add this newly created instance to a Map
gfMap.put(gfProps.getInstanceRoot(), gfImpl);
return gfImpl;
} catch (GlassFishException e) {
throw e;
} catch(Exception e) {
throw new GlassFishException(e);