Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
org.rzo.yajsw.tools.ConfigGenerator Maven / Gradle / Ivy
Go to download
YAJSW is a java centric implementation of the java service wrapper by tanuki (JSW).
It aims at being mostly configuration compliant with the original. It should therefore be easy to switch from JSW to YAJSW.
package org.rzo.yajsw.tools;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.configuration.PropertiesConfiguration;
import org.rzo.yajsw.os.OperatingSystem;
import org.rzo.yajsw.os.Process;
public class ConfigGenerator
{
private static void usage()
{
System.out.println("Usage: java -cp wrapper.jar org.rzo.yajsw.ConfigurationGenerator ");
System.exit(-1);
}
public static void generate(int pid, File input, File output)
{
Process p = OperatingSystem.instance().processManagerInstance().getProcess(pid);
if (p == null)
{
System.out.println("cannot find process " + pid);
return;
}
String cmd = p.getCommand().trim();
if (cmd == null)
{
System.out.println("cannot get command line of process");
return;
}
System.out.println();
System.out.println("process command line:");
System.out.println(p.getCommand());
System.out.println();
createConfigFile(p, input, output, cmd);
}
public static void main(String[] args)
{
if (args.length < 2)
{
usage();
}
int pid = -1;
try
{
pid = Integer.parseInt(args[0]);
}
catch (Exception ex)
{
ex.printStackTrace();
usage();
}
File output = null;
try
{
output = new File(args[1]);
}
catch (Exception ex)
{
ex.printStackTrace();
usage();
}
File input = null;
try
{
input = new File(args[2]);
}
catch (Exception ex)
{
}
generate(pid, input, output);
}
private static void createConfigFile(Process p, File input, File output, String cmd)
{
if (isJavaCmd(p))
createJavaConfigFile(p, input, output);
else
createImageConfigFile(p, input, output);
System.out.println("-----------------");
System.out.println("Output file: " + output.getAbsolutePath());
System.out.println("-----------------");
System.out.println("NOTE: check/edit the following properties in the config file!");
System.out.println();
System.out.println("wrapper.app.account, wrapper.app.password: either set the password or remove the account");
System.out.println("wrapper.java.command");
System.out.println("wrapper.working.dir");
System.out.println("wrapper.ntservice.name, wrapper.ntservice.displayname, wrapper.ntservice.description");
System.out.println("-----------------");
}
// TODO
private static boolean isJavaCmd(Process p)
{
/*
* try { MonitoredHost monitoredhost =
* MonitoredHost.getMonitoredHost("//localhost"); VmIdentifier
* vmidentifier = new VmIdentifier("" + pid); MonitoredVm monitoredvm =
* monitoredhost.getMonitoredVm(vmidentifier, 0); return monitoredvm !=
* null; } catch (Exception e) { // e.printStackTrace(); } return false;
*/
return p.getCommand().contains("java");
}
private static void createImageConfigFile(Process p, File input, File output)
{
System.out.println("creating image configuration file");
System.out.println("NOT YET IMPLEMENTED");
}
private static void createJavaConfigFile(Process p, File input, File output)
{
System.out.println("creating java configuration file");
try
{
String workingDir = p.getWorkingDir();
String cmd = p.getCommand();
/*
* MonitoredHost monitoredhost =
* MonitoredHost.getMonitoredHost("//localhost"); VmIdentifier
* vmidentifier = new VmIdentifier("" + p.getPid()); MonitoredVm vm
* = monitoredhost.getMonitoredVm(vmidentifier, 0);
*/
// System.out.println("cmd " +MonitoredVmUtil.commandLine(vm));
PropertiesConfiguration conf;
if (input == null)
conf = new PropertiesConfiguration();
else
conf = new PropertiesConfiguration(input);
JCLParser parsedCmd = JCLParser.parse(cmd);
/*
* String mainClass = MonitoredVmUtil.mainClass(vm, true); if
* (!isNotNullEmpty(mainClass)) {System.out.println(
* "could not retrieve main class of java application -> abort");
* return; } mainClass = confString(mainClass); if
* (mainClass.endsWith(".jar"))
* conf.setProperty("wrapper.java.app.jar",
* relativeString(mainClass, workingDir)); else
* conf.setProperty("wrapper.java.app.mainclass", mainClass);
*/
if (parsedCmd.getMainClass() != null)
conf.setProperty("wrapper.java.app.mainclass", parsedCmd.getMainClass());
else
conf.setProperty("wrapper.java.app.jar", relativeString(parsedCmd.getJar(), workingDir));
/*
* // this does not seem to work correctly -> get jvm the hard way
* // System.out.println("vmVersion " + vmVersion); String jvm =
* null; if (cmd.startsWith("\"")) jvm = cmd.substring(0,
* cmd.indexOf("\" ") + 1); else jvm = cmd.substring(0,
* cmd.indexOf(" ")); if (isNotNullEmpty(jvm)) { jvm =
* confString(jvm); conf.setProperty("wrapper.java.command", jvm); }
*/
conf.setProperty("wrapper.java.command", parsedCmd.getJava());
/*
* String classpath = ((StringMonitor)
* vm.findByName("java.property.java.class.path")).stringValue(); if
* (isNotNullEmpty(classpath)) { classpath =
* relativeString(classpath, workingDir); classpath =
* confString(classpath); String[] classpaths =
* classpath.split(System.getProperty("path.separator")); int i = 1;
* for (String file : classpaths) {
* conf.setProperty("wrapper.java.classpath." + i, file); i++; } }
*/
int i = 1;
List classpathList = parsedCmd.getClasspath();
// no longer required - wrapper will automatically add the jar to the classpath
//if (conf.getString("wrapper.java.app.jar", null) != null)
// classpathList.add(conf.getString("wrapper.java.app.jar"));
if (classpathList == null || classpathList.isEmpty())
classpathList = getClasspathFromEnvironment(p);
if (classpathList.isEmpty() && parsedCmd.getJar() == null)
classpathList.add(".");
for (String classpath : classpathList)
{
classpath = relativeString(classpath, workingDir);
classpath = confString(classpath);
// yajsw handles wildcards differently.
if (classpath.endsWith("*"))
classpath = classpath + ".jar";
conf.setProperty("wrapper.java.classpath." + i++, classpath);
}
/*
* // bug in MonitoredVMUtil 'c:/x.txt "d d"' returns 'c:/x.txt d d'
* //String mainArgs = MonitoredVmUtil.mainArgs(vm); // TODO really
* parse the cmd String mainArgs =
* cmd.substring(cmd.indexOf(" "+mainClass
* +" ")+mainClass.length()+2); if (isNotNullEmpty(mainArgs)) { List
* args = splitArgs(mainArgs); int i = 1; for (Iterator
* it=args.iterator(); it.hasNext(); ) { String arg = (String)
* it.next(); arg = relativeString(arg, workingDir); arg =
* confString(arg); conf.setProperty("wrapper.app.parameter."+i++,
* arg); } }
*/
i = 1;
for (String arg : parsedCmd.getArgs())
{
arg = relativeString(arg, workingDir);
arg = confString(arg);
if (arg != null && !"".equals(arg))
conf.setProperty("wrapper.app.parameter." + i++, arg);
}
/*
* // bug in MonitoredVMUtil '"-Xd=a a"' returns '-Xd=a a' //String
* jvmArgs = MonitoredVmUtil.jvmArgs(vm); // TODO really parse the
* cmd String jvmArgs = cmd.substring(jvm.length(),
* cmd.indexOf(" "+mainClass+" ")); if (cmd.startsWith("\""))
* jvmArgs = jvmArgs.substring(1); jvmArgs =
* jvmArgs.replace(classpath, ""); jvmArgs =
* jvmArgs.replace(" -classpath ", ""); jvmArgs =
* jvmArgs.replace(" -cp ", "");
*
* if (isNotNullEmpty(jvmArgs)) { List args = splitArgs(jvmArgs);
* int i = 1; for (Iterator it=args.iterator(); it.hasNext(); ) {
* String arg = (String) it.next(); arg = relativeString(arg,
* workingDir); arg = confString(arg);
* conf.setProperty("wrapper.java.additional."+i++, arg); } }
*
* String jvmFlags = MonitoredVmUtil.jvmFlags(vm);
*/
i = 1;
for (String opt : parsedCmd.getVmOptions())
{
opt = relativeString(opt, workingDir);
opt = confString(opt);
conf.setProperty("wrapper.java.additional." + i++, opt);
}
if (isNotNullEmpty(workingDir))
{
workingDir = confString(workingDir);
conf.setProperty("wrapper.working.dir", workingDir);
}
String title = p.getTitle();
if (cmd.equals(title))
title = parsedCmd.getMainClass();
if (isNotNullEmpty(title))
{
title = confString(title);
conf.setProperty("wrapper.console.title", title);
conf.setProperty("wrapper.ntservice.name", title);
conf.setProperty("wrapper.ntservice.displayname", title);
conf.setProperty("wrapper.ntservice.description", title);
}
/*
* String account = p.getUser(); if (account != null &&
* !"".equals(account)) conf.setProperty("wrapper.app.account",
* account);
*/
/*
* List l = vm.findByPattern(".*"); for (Iterator it = l.iterator();
* it.hasNext(); ) { Monitor m = (Monitor) it.next();
* System.out.println(m.getName()); System.out.println("> "+
* m.getValue()); }
*/
conf.save(output);
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
private static List getClasspathFromEnvironment(Process p)
{
List result = new ArrayList();
try
{
String cp = (String) p.getEnvironmentAsMap().get("CLASSPATH");
if (cp == null)
return result;
String[] cpArr = cp.split(File.pathSeparator);
for (String cc : cpArr)
{
cc = cc.replaceAll("\"", "");
result.add(cc.trim());
}
}
catch (Exception ex)
{
ex.printStackTrace();
}
return result;
}
public static List splitArgs(String jvmArgs)
{
// split either by " or by space
List result = new ArrayList();
while (jvmArgs.length() > 0)
{
String arg;
jvmArgs = jvmArgs.trim();
if (jvmArgs.startsWith("\""))
{
jvmArgs = jvmArgs.substring(1);
int index = jvmArgs.indexOf("\"");
arg = jvmArgs.substring(0, index);
jvmArgs = jvmArgs.substring(index + 1);
}
else
{
int index = jvmArgs.indexOf(" ");
int index2 = jvmArgs.indexOf("\"");
if (index2 < index && index2 != -1)
{
index = jvmArgs.indexOf("\"", index);
}
if (index > -1)
{
arg = jvmArgs.substring(0, index);
jvmArgs = jvmArgs.substring(index + 1);
}
else
{
arg = jvmArgs;
jvmArgs = "";
}
}
arg = arg.trim();
arg = arg.replaceAll("\"", "");
if (arg.length() > 0)
result.add(arg);
}
return result;
}
private static String relativeString(String str, String base)
{
if (isNotNullEmpty(base))
{
String baseRegEx = base.replaceAll("\\\\", "\\\\\\\\");
baseRegEx = baseRegEx.replaceAll("\\.", "\\.");
String sep = "\\".equals(File.separator) ? "\\\\" : File.separator;
String result = str.replaceAll(baseRegEx, "." + sep);
return result;
}
return str;
}
public static String confString(String str)
{
String result = str.replaceAll("\\\\", "\\\\");
result = result.replaceAll(",", "\\,");
return result;
}
public static boolean isNotNullEmpty(String str)
{
return str != null && !"".equals(str) && !"Unknown".equals(str);
}
}