[Major] Removed MainStarter.java as never used
This commit is contained in:
parent
37d66f0768
commit
4bcddc4e3b
|
@ -1,219 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2013 Robert von Burg <eitch@eitchnet.ch>
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
package li.strolch.runtime.main;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.text.MessageFormat;
|
|
||||||
import java.util.Properties;
|
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
|
||||||
|
|
||||||
import org.apache.commons.cli.CommandLine;
|
|
||||||
import org.apache.commons.cli.CommandLineParser;
|
|
||||||
import org.apache.commons.cli.DefaultParser;
|
|
||||||
import org.apache.commons.cli.HelpFormatter;
|
|
||||||
import org.apache.commons.cli.Option;
|
|
||||||
import org.apache.commons.cli.Options;
|
|
||||||
import org.apache.commons.cli.ParseException;
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
|
|
||||||
import li.strolch.agent.api.StrolchAgent;
|
|
||||||
import li.strolch.agent.api.StrolchBootstrapper;
|
|
||||||
import li.strolch.agent.api.StrolchVersion;
|
|
||||||
import li.strolch.utils.dbc.DBC;
|
|
||||||
import li.strolch.utils.helper.StringHelper;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Robert von Burg <eitch@eitchnet.ch>
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("nls")
|
|
||||||
public class MainStarter {
|
|
||||||
|
|
||||||
private static final Logger logger = LoggerFactory.getLogger(MainStarter.class);
|
|
||||||
|
|
||||||
private static final String OPT_ROOT_PATH = "root-path";
|
|
||||||
private static final String OPT_ENV = "env";
|
|
||||||
|
|
||||||
private Options options;
|
|
||||||
private String env;
|
|
||||||
private File pathF;
|
|
||||||
|
|
||||||
private StrolchAgent agent;
|
|
||||||
|
|
||||||
private StrolchVersion appVersion;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param appVersion
|
|
||||||
* See {@link StrolchBootstrapper#StrolchBootstrapper(StrolchVersion)}
|
|
||||||
*/
|
|
||||||
public MainStarter(StrolchVersion appVersion) {
|
|
||||||
DBC.PRE.assertNotNull("appVersion must be set!", appVersion);
|
|
||||||
this.appVersion = appVersion;
|
|
||||||
|
|
||||||
configureOptions();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param appClass
|
|
||||||
* See {@link StrolchBootstrapper#StrolchBootstrapper(Class)}
|
|
||||||
*/
|
|
||||||
public MainStarter(Class<?> appClass) {
|
|
||||||
DBC.PRE.assertNotNull("appClass must be set!", appClass);
|
|
||||||
|
|
||||||
Properties env = new Properties();
|
|
||||||
try (InputStream in = appClass.getResourceAsStream(StrolchBootstrapper.APP_VERSION_PROPERTIES)) {
|
|
||||||
env.load(in);
|
|
||||||
} catch (Exception e) {
|
|
||||||
throw new IllegalArgumentException("Could not find resource " + StrolchBootstrapper.APP_VERSION_PROPERTIES
|
|
||||||
+ " on ClassLoader of class " + appClass);
|
|
||||||
}
|
|
||||||
|
|
||||||
StrolchVersion appVersion = new StrolchVersion(env);
|
|
||||||
this.appVersion = appVersion;
|
|
||||||
|
|
||||||
configureOptions();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void configureOptions() {
|
|
||||||
|
|
||||||
Options op = new Options();
|
|
||||||
Option rootPathOption = new Option("p", OPT_ROOT_PATH, true, "root path to strolch runtime");
|
|
||||||
rootPathOption.setOptionalArg(false);
|
|
||||||
rootPathOption.setRequired(true);
|
|
||||||
op.addOption(rootPathOption);
|
|
||||||
|
|
||||||
Option envOption = new Option("e", OPT_ENV, true, "environment to load from configuration file");
|
|
||||||
envOption.setOptionalArg(false);
|
|
||||||
envOption.setRequired(true);
|
|
||||||
op.addOption(envOption);
|
|
||||||
|
|
||||||
this.options = op;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int start(String[] args) {
|
|
||||||
int ret = parseArgs(args);
|
|
||||||
if (ret != 0)
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
setup();
|
|
||||||
initialize();
|
|
||||||
start();
|
|
||||||
|
|
||||||
return keepAlive();
|
|
||||||
}
|
|
||||||
|
|
||||||
public int parseArgs(String[] args) {
|
|
||||||
|
|
||||||
// create the parser
|
|
||||||
CommandLineParser parser = new DefaultParser();
|
|
||||||
CommandLine line;
|
|
||||||
try {
|
|
||||||
// parse the command line arguments
|
|
||||||
line = parser.parse(this.options, args);
|
|
||||||
} catch (ParseException exp) {
|
|
||||||
// oops, something went wrong
|
|
||||||
logger.error("Parsing failed. Reason: " + exp.getMessage());
|
|
||||||
printUsage();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.env = line.getOptionValue(OPT_ENV);
|
|
||||||
if (StringHelper.isEmpty(this.env)) {
|
|
||||||
logger.error("env argument is missing!");
|
|
||||||
printUsage();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
String pathS = line.getOptionValue(OPT_ROOT_PATH);
|
|
||||||
this.pathF = new File(pathS);
|
|
||||||
if (!this.pathF.exists()) {
|
|
||||||
logger.error(MessageFormat.format("Path parameter does not exist at: {0}", pathS));
|
|
||||||
printUsage();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setup() {
|
|
||||||
this.agent = new StrolchBootstrapper(this.appVersion).setupByRoot(this.env, this.pathF);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void initialize() {
|
|
||||||
getAgent().initialize();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void start() {
|
|
||||||
getAgent().start();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void stop() {
|
|
||||||
getAgent().stop();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void destroy() {
|
|
||||||
getAgent().destroy();
|
|
||||||
}
|
|
||||||
|
|
||||||
public int keepAlive() {
|
|
||||||
|
|
||||||
final AtomicBoolean atomicBoolean = new AtomicBoolean();
|
|
||||||
|
|
||||||
Runtime.getRuntime().addShutdownHook(new Thread() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
synchronized (MainStarter.class) {
|
|
||||||
System.out.println("VM Shutting down. Stopping Strolch...");
|
|
||||||
System.out.println("");
|
|
||||||
System.out.println("Strolch application " + MainStarter.this.getAgent().getApplicationName()
|
|
||||||
+ " shutting down...");
|
|
||||||
MainStarter.this.getAgent().stop();
|
|
||||||
MainStarter.this.getAgent().destroy();
|
|
||||||
System.out.println("Strolch application " + MainStarter.this.getAgent().getApplicationName()
|
|
||||||
+ " shut down. Exiting VM.");
|
|
||||||
|
|
||||||
atomicBoolean.set(true);
|
|
||||||
MainStarter.class.notify();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
logger.info("");
|
|
||||||
logger.info("Strolch application " + getAgent().getApplicationName() + " started ");
|
|
||||||
while (!atomicBoolean.get()) {
|
|
||||||
synchronized (MainStarter.class) {
|
|
||||||
try {
|
|
||||||
MainStarter.class.wait();
|
|
||||||
} catch (InterruptedException e) {
|
|
||||||
logger.error("Interrupted.");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void printUsage() {
|
|
||||||
HelpFormatter formatter = new HelpFormatter();
|
|
||||||
formatter.printHelp("java -classpath lib/ -jar <jar.containing.main.class>.jar <options>", this.options);
|
|
||||||
}
|
|
||||||
|
|
||||||
public StrolchAgent getAgent() {
|
|
||||||
return this.agent;
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue