[New] Added a MainStarter application to start Strolch from main classes
This commit is contained in:
parent
323b6cfd7b
commit
044fc81a18
4
pom.xml
4
pom.xml
|
@ -38,6 +38,10 @@
|
||||||
<groupId>ch.eitchnet</groupId>
|
<groupId>ch.eitchnet</groupId>
|
||||||
<artifactId>ch.eitchnet.privilege</artifactId>
|
<artifactId>ch.eitchnet.privilege</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>commons-cli</groupId>
|
||||||
|
<artifactId>commons-cli</artifactId>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
|
|
|
@ -53,7 +53,7 @@ public class StrolchAgent {
|
||||||
public StrolchConfiguration getStrolchConfiguration() {
|
public StrolchConfiguration getStrolchConfiguration() {
|
||||||
return this.strolchConfiguration;
|
return this.strolchConfiguration;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return the container
|
* @return the container
|
||||||
*/
|
*/
|
||||||
|
@ -61,6 +61,10 @@ public class StrolchAgent {
|
||||||
return this.container;
|
return this.container;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getApplicationName() {
|
||||||
|
return this.strolchConfiguration.getRuntimeConfiguration().getApplicationName();
|
||||||
|
}
|
||||||
|
|
||||||
public void initialize() {
|
public void initialize() {
|
||||||
this.container.initialize(this.strolchConfiguration);
|
this.container.initialize(this.strolchConfiguration);
|
||||||
}
|
}
|
||||||
|
@ -93,7 +97,7 @@ public class StrolchAgent {
|
||||||
for (ComponentConfiguration configuration : componentConfigurations) {
|
for (ComponentConfiguration configuration : componentConfigurations) {
|
||||||
this.strolchConfiguration.addConfiguration(configuration.getName(), configuration);
|
this.strolchConfiguration.addConfiguration(configuration.getName(), configuration);
|
||||||
}
|
}
|
||||||
|
|
||||||
ComponentContainer container = new ComponentContainer();
|
ComponentContainer container = new ComponentContainer();
|
||||||
this.container = container;
|
this.container = container;
|
||||||
|
|
||||||
|
|
|
@ -19,21 +19,13 @@
|
||||||
* along with XXX. If not, see
|
* along with XXX. If not, see
|
||||||
* <http://www.gnu.org/licenses/>.
|
* <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package li.strolch.runtime.main;
|
package li.strolch.runtime.component;
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
|
|
||||||
import li.strolch.runtime.agent.StrolchAgent;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Robert von Burg <eitch@eitchnet.ch>
|
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class Main {
|
public interface PostInitializer {
|
||||||
|
|
||||||
public static void main(String[] args) {
|
// marker interface
|
||||||
|
|
||||||
StrolchAgent agent = new StrolchAgent();
|
|
||||||
agent.setup(new File("."));
|
|
||||||
}
|
|
||||||
}
|
}
|
|
@ -0,0 +1,38 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2012, Robert von Burg
|
||||||
|
*
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This file is part of the XXX.
|
||||||
|
*
|
||||||
|
* XXX is free software: you can redistribute
|
||||||
|
* it and/or modify it under the terms of the GNU General Public License as
|
||||||
|
* published by the Free Software Foundation, either version 3 of the License,
|
||||||
|
* or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* XXX is distributed in the hope that it will
|
||||||
|
* be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with XXX. If not, see
|
||||||
|
* <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package li.strolch.runtime.component;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class SimplePostInitializer extends StrolchComponent implements PostInitializer {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param container
|
||||||
|
* @param componentName
|
||||||
|
*/
|
||||||
|
public SimplePostInitializer(ComponentContainer container, String componentName) {
|
||||||
|
super(container, componentName);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,144 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2012, Robert von Burg
|
||||||
|
*
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This file is part of the XXX.
|
||||||
|
*
|
||||||
|
* XXX is free software: you can redistribute
|
||||||
|
* it and/or modify it under the terms of the GNU General Public License as
|
||||||
|
* published by the Free Software Foundation, either version 3 of the License,
|
||||||
|
* or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* XXX is distributed in the hope that it will
|
||||||
|
* be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with XXX. If not, see
|
||||||
|
* <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package li.strolch.runtime.main;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.text.MessageFormat;
|
||||||
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
|
import li.strolch.runtime.agent.StrolchAgent;
|
||||||
|
|
||||||
|
import org.apache.commons.cli.CommandLine;
|
||||||
|
import org.apache.commons.cli.CommandLineParser;
|
||||||
|
import org.apache.commons.cli.GnuParser;
|
||||||
|
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;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("nls")
|
||||||
|
public class MainStarter {
|
||||||
|
|
||||||
|
private static final Logger logger = LoggerFactory.getLogger(MainStarter.class);
|
||||||
|
private Options options;
|
||||||
|
private StrolchAgent agent;
|
||||||
|
|
||||||
|
public MainStarter() {
|
||||||
|
Options op = new Options();
|
||||||
|
Option rootPathOption = new Option("p", "root-path", true, "root path to strolch runtime");
|
||||||
|
rootPathOption.setOptionalArg(false);
|
||||||
|
op.addOption(rootPathOption);
|
||||||
|
this.options = op;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int start(String[] args) {
|
||||||
|
|
||||||
|
// create the parser
|
||||||
|
CommandLineParser parser = new GnuParser();
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
String pathS = line.getOptionValue("root-path");
|
||||||
|
File pathF = new File(pathS);
|
||||||
|
if (!pathF.exists()) {
|
||||||
|
logger.info(MessageFormat.format("Path parameter does not exist at: {0}", pathS));
|
||||||
|
printUsage();
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
logger.info("Starting Agent...");
|
||||||
|
this.setAgent(new StrolchAgent());
|
||||||
|
this.getAgent().setup(pathF);
|
||||||
|
this.getAgent().initialize();
|
||||||
|
this.getAgent().start();
|
||||||
|
|
||||||
|
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 " + this.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);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the agent
|
||||||
|
*/
|
||||||
|
public StrolchAgent getAgent() {
|
||||||
|
return this.agent;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param agent
|
||||||
|
* the agent to set
|
||||||
|
*/
|
||||||
|
public void setAgent(StrolchAgent agent) {
|
||||||
|
this.agent = agent;
|
||||||
|
}
|
||||||
|
}
|
|
@ -28,7 +28,7 @@ import org.junit.Test;
|
||||||
* @author Robert von Burg <eitch@eitchnet.ch>
|
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("nls")
|
//@SuppressWarnings("nls")
|
||||||
public class QueryTest {
|
public class QueryTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
Loading…
Reference in New Issue