private void generateFiles() throws ContainerException {
if (isGeronimo) {
if (geronimoHome == null) {
Debug.logFatal("*** 'GERONIMO_HOME' was not found in your environment. Please set the location of Geronimo into a GERONIMO_HOME env var or as a geronimoHome property in appserver.properties file.", module);
throw new ContainerException("Error in Geronimo deployment, please check the log");
}
}
File files[] = getTemplates();
Map<String, Object> dataMap = buildDataMap();
String user = UtilProperties.getPropertyValue("appserver", "user", "system");
String password = UtilProperties.getPropertyValue("appserver", "password", "manager");
boolean offline = UtilProperties.propertyValueEqualsIgnoreCase("appserver", "offline", "true");
boolean redeploy = UtilProperties.propertyValueEqualsIgnoreCase("appserver", "redeploy", "true");
String geronimoHostHome = UtilProperties.getPropertyValue("appserver", "geronimoHostHome", null);
String host = UtilProperties.getPropertyValue("appserver", "host", "");
String port = UtilProperties.getPropertyValue("appserver", "port", "");
boolean pauseInGeronimoScript = UtilProperties.propertyValueEqualsIgnoreCase("appserver", "pauseInGeronimoScript", "true");
int instancesNumber = (int) UtilProperties.getPropertyNumber("appserver", "instancesNumber");
String instanceNumber = "";
if (isGeronimo) {
File geronimoHomeDir = new File (geronimoHome);
if (!(geronimoHomeDir.isDirectory())) {
Debug.logFatal("*** " + geronimoHome + " does not exist or is not a directoy. Please set the location of Geronimo into a GERONIMO_HOME env var or as a geronimoHome property in appserver.properties file.", module);
throw new ContainerException("Error in Geronimo deployment, please check the log");
}
if (UtilValidate.isNotEmpty(host) && UtilValidate.isNotEmpty(geronimoHostHome)) {
geronimoHomeDir = new File ("//" + host + "/" + geronimoHostHome);
if (!(geronimoHomeDir.isDirectory())) {
Debug.logFatal("*** " + geronimoHostHome + " does not exist or is not a directoy. Please set the location of Geronimo on host as a geronimoHostHome property in appserver.properties file.", module);
throw new ContainerException("Error in Geronimo deployment, please check the log");
}
} else {
geronimoHostHome = geronimoHome;
}
if (redeploy && offline) {
Debug.logFatal("*** You can't use redeploy with a server offline.", module);
throw new ContainerException("Error in Geronimo deployment, please check the log");
}
for(int inst = 0; inst <= instancesNumber; inst++) {
instanceNumber = (inst == 0 ? "" : inst).toString();
GenerateGeronimoDeployment geronimoDeployment = new GenerateGeronimoDeployment();
List<String> classpathJars = geronimoDeployment.generate(args[1], geronimoHostHome, instanceNumber);
if (classpathJars == null) {
throw new ContainerException("Error in Geronimo deployment, please check the log");
}
dataMap.put("classpathJars", classpathJars);
dataMap.put("pathSeparatorChar", File.pathSeparatorChar);
dataMap.put("instanceNumber", instanceNumber);
// if (UtilValidate.isNotEmpty(instanceNumber)) {
// List webApps = (List) dataMap.get("webApps");
// for (Object webAppObject: webApps) {
// WebappInfo webAppInfo = (ComponentConfig.WebappInfo) webAppObject;
// String webAppLocation = webAppInfo.getLocation();
// String webXmlLocation = webAppLocation + "/WEB-INF/web.xml";
// if (isFileExistsAndCanWrite(webXmlLocation)) {
// DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
// DocumentBuilder docBuilder = null;
// try {
// docBuilder = docFactory.newDocumentBuilder();
// } catch (ParserConfigurationException e) {
// throw new ContainerException(e);
// }
// Document doc = null;
// try {
// doc = docBuilder.parse(webXmlLocation);
// } catch (SAXException e) {
// throw new ContainerException(e);
// } catch (IOException e) {
// throw new ContainerException(e);
// }
// Node webApp = doc.getFirstChild();
// Node contextParam = doc.createElement("context-param");
// NamedNodeMap contextParamAttributes = contextParam.getAttributes();
//
// Attr paramName = doc.createAttribute("param-name");
// paramName.setValue("instanceNumber");
// contextParamAttributes.setNamedItem(paramName);
//
// Attr paramValue = doc.createAttribute("param-value");
// paramValue.setValue(instanceNumber);
// contextParamAttributes.setNamedItem(paramValue);
// // Node nodeToAppend = doc.importNode(contextParam, true); this should not be needed
// // webApp.appendChild(nodeToAppend);
//
// // webApp.appendChild(contextParam); this is the line needed but commented for now
//
// Transformer transformer;
// try {
// transformer = TransformerFactory.newInstance().newTransformer();
// } catch (TransformerConfigurationException e) {
// throw new ContainerException(e);
// } catch (TransformerFactoryConfigurationError e) {
// throw new ContainerException(e);
// }
// transformer.setOutputProperty(OutputKeys.INDENT, "yes");
//
// StreamResult result = new StreamResult(new StringWriter());
// DOMSource source = new DOMSource(doc);
// try {
// transformer.transform(source, result);
// } catch (TransformerException e) {
// throw new ContainerException(e);
// }
// String xmlString = result.getWriter().toString();
// System.out.println(xmlString); //TODO write to file using writeToXmlFile
// break; // Only the 1st web.xml file need to be modified
// } else {
// Debug.logInfo("Unable to change the deployment descriptor : " + webXmlLocation + ". Maybe it does not exist, or is in read only mode ?", module);
// }
// }
// }
//Debug.logInfo("Using Data : " + dataMap, module);
for (int i = 0; i < files.length; i++) {
if (!(files[i].isDirectory() || files[i].isHidden() || files[i].getName().equalsIgnoreCase("geronimo-web.xml"))) {
parseTemplate(files[i], dataMap);
}
}
String ofbizName = "ofbiz" + instanceNumber;
String separator = File.separator;
File workingDir = new File(geronimoHome + separator + "bin");
ProcessBuilder processBuilder = null;
Process process = null;
String command = null;
String commandCommonPart = null;
if ("\\".equals(separator)) { //Windows
commandCommonPart = "deploy --user " + user + " --password " + password;
} else { // Linux
commandCommonPart = workingDir + "/deploy.sh --user " + user + " --password " + password;
}
if (UtilValidate.isNotEmpty(host)) {
commandCommonPart += " --host " + host + (UtilValidate.isNotEmpty(port) ? " --port " + port : "");
}
if (!redeploy) {
if ("\\".equals(separator)) { //Windows
if (offline) {
command = commandCommonPart + " --offline undeploy " + ofbizName;
} else {
command = commandCommonPart + " undeploy " + ofbizName;
}
processBuilder = new ProcessBuilder("cmd.exe", "/c", command);
} else { // Linux
if (offline) {
command = commandCommonPart + " --offline undeploy " + ofbizName;
} else {
command = commandCommonPart + " undeploy " + ofbizName;
}
processBuilder = new ProcessBuilder("sh", "-c", command);
}
if (pauseInGeronimoScript) {
Map<String, String> env = processBuilder.environment();
env.put("GERONIMO_BATCH_PAUSE", "on");
}
processBuilder.directory(workingDir);
try {
System.out.println("Currently undeploying " + ofbizName + ", using : <<" + command + ">>, please wait ...");
processBuilder.redirectErrorStream(true);
process = processBuilder.start();
java.io.InputStream is = process.getInputStream();
byte[] buf = new byte[2024];
int readLen = 0;
while ((readLen = is.read(buf,0,buf.length)) != -1) {
if ("\\".equals(separator)) { //Windows
System.out.print(new String(buf,0,readLen));
} else {
System.out.println(new String(buf,0,readLen));
}
}
is.close();
process.waitFor();
// System.out.println(process.waitFor());
// System.out.println("exit value" + process.exitValue());
Debug.logInfo(ofbizName + " undeployment ended" , module);
} catch (IOException e) {
throw new ContainerException(e);
} catch (InterruptedException e) {
throw new ContainerException(e);
} finally {
process.destroy();
}
}
if (redeploy) {
if ("\\".equals(separator)) { //Windows
command = commandCommonPart + " redeploy " + ofbizHome;
processBuilder = new ProcessBuilder("cmd.exe", "/c", command);
} else { // Linux
command = commandCommonPart + " redeploy " + ofbizHome;
processBuilder = new ProcessBuilder("sh", "-c", command);
}
} else {
if ("\\".equals(separator)) { //Windows
if (offline) {
command = commandCommonPart + " --offline deploy --inPlace " + ofbizHome;
} else {
command = commandCommonPart + " deploy --inPlace " + ofbizHome;
}
processBuilder = new ProcessBuilder("cmd.exe", "/c", command);
} else { // Linux
if (offline) {
command = commandCommonPart + " --offline deploy --inPlace " + ofbizHome;
} else {
command = commandCommonPart + " deploy --inPlace " + ofbizHome;
}
processBuilder = new ProcessBuilder("sh", "-c", command);
}
}
if (pauseInGeronimoScript) {
Map<String, String> env = processBuilder.environment();
env.put("GERONIMO_BATCH_PAUSE", "on");
}
processBuilder.directory(workingDir);
try {
System.out.println("Currently deploying " + ofbizName + ", using : <<" + command + ">>, please wait ...");
processBuilder.redirectErrorStream(true);
process = processBuilder.start();
java.io.InputStream is = process.getInputStream();
byte[] buf = new byte[2024];
int readLen = 0;
while ((readLen = is.read(buf,0,buf.length)) != -1) {
if ("\\".equals(separator)) { //Windows
System.out.print(new String(buf,0,readLen));
} else {
System.out.println(new String(buf,0,readLen));
}
}
is.close();
process.waitFor();
// System.out.println(process.waitFor());
// System.out.println("exit value" + process.exitValue());
Debug.logInfo(ofbizName + " deployment ended" , module);
} catch (IOException e) {
throw new ContainerException(e);
} catch (InterruptedException e) {
throw new ContainerException(e);
} finally {
process.destroy();
}
}
} else {