This commit is contained in:
wentch
2016-01-13 17:07:41 +08:00
parent 99f7b633b4
commit 2a26abbf8f

View File

@@ -15,7 +15,6 @@ import java.nio.file.*;
import java.util.*; import java.util.*;
import java.util.concurrent.*; import java.util.concurrent.*;
import java.util.concurrent.atomic.*; import java.util.concurrent.atomic.*;
import java.util.function.*;
import java.util.logging.*; import java.util.logging.*;
import javax.xml.parsers.*; import javax.xml.parsers.*;
import org.redkale.convert.bson.*; import org.redkale.convert.bson.*;
@@ -93,6 +92,8 @@ public final class Application {
final AsynchronousChannelGroup transportChannelGroup; final AsynchronousChannelGroup transportChannelGroup;
//-------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------
private final boolean singletonrun;
private final ResourceFactory factory = ResourceFactory.root(); private final ResourceFactory factory = ResourceFactory.root();
private final WatchFactory watch = WatchFactory.root(); private final WatchFactory watch = WatchFactory.root();
@@ -108,6 +109,11 @@ public final class Application {
private final CountDownLatch serversLatch; private final CountDownLatch serversLatch;
private Application(final AnyValue config) { private Application(final AnyValue config) {
this(false, config);
}
private Application(final boolean singletonrun, final AnyValue config) {
this.singletonrun = singletonrun;
this.config = config; this.config = config;
final File root = new File(System.getProperty(RESNAME_APP_HOME)); final File root = new File(System.getProperty(RESNAME_APP_HOME));
@@ -446,7 +452,7 @@ public final class Application {
runServers(timecd, others); runServers(timecd, others);
timecd.await(); timecd.await();
logger.info(this.getClass().getSimpleName() + " started in " + (System.currentTimeMillis() - startTime) + " ms"); logger.info(this.getClass().getSimpleName() + " started in " + (System.currentTimeMillis() - startTime) + " ms");
this.serversLatch.await(); if (!singletonrun) this.serversLatch.await();
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@@ -505,7 +511,7 @@ public final class Application {
} }
servers.add(server); servers.add(server);
server.init(serconf); server.init(serconf);
server.start(); if (!singletonrun) server.start();
timecd.countDown(); timecd.countDown();
sercdl.countDown(); sercdl.countDown();
} catch (Exception ex) { } catch (Exception ex) {
@@ -520,34 +526,27 @@ public final class Application {
} }
public static <T extends Service> T singleton(Class<T> serviceClass) throws Exception { public static <T extends Service> T singleton(Class<T> serviceClass) throws Exception {
return singleton(serviceClass, false); return singleton("", serviceClass);
} }
public static <T extends Service> T singleton(Class<T> serviceClass, boolean remote) throws Exception { public static <T extends Service> T singleton(String name, Class<T> serviceClass) throws Exception {
final Application application = Application.create(); final Application application = Application.create(true);
Consumer<Runnable> executor = (x) -> Executors.newFixedThreadPool(8).submit(x);
T service = remote ? Sncp.createRemoteService("", executor, serviceClass, null, null)
: Sncp.createLocalService("", executor, serviceClass, null, null, null);
application.init(); application.init();
application.factory.register(service); application.start();
application.servicecdl = new CountDownLatch(1); return application.factory.find(name, serviceClass);
final NodeServer server = new NodeHttpServer(application, null);
server.init(application.config);
server.factory.inject(service, server);
return service;
} }
private static Application create() throws IOException { private static Application create(final boolean singleton) throws IOException {
final String home = new File(System.getProperty(RESNAME_APP_HOME, "")).getCanonicalPath(); final String home = new File(System.getProperty(RESNAME_APP_HOME, "")).getCanonicalPath();
System.setProperty(RESNAME_APP_HOME, home); System.setProperty(RESNAME_APP_HOME, home);
File appfile = new File(home, "conf/application.xml"); File appfile = new File(home, "conf/application.xml");
return new Application(load(new FileInputStream(appfile))); return new Application(singleton, load(new FileInputStream(appfile)));
} }
public static void main(String[] args) throws Exception { public static void main(String[] args) throws Exception {
Utility.midnight(); //先初始化一下Utility Utility.midnight(); //先初始化一下Utility
//运行主程序 //运行主程序
final Application application = Application.create(); final Application application = Application.create(false);
if (System.getProperty("SHUTDOWN") != null) { if (System.getProperty("SHUTDOWN") != null) {
application.sendShutDown(); application.sendShutDown();
return; return;