package org.openslx.imagemaster; import java.net.InetAddress; import java.net.SocketException; import java.security.NoSuchAlgorithmException; import java.util.ArrayList; import java.util.List; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.core.config.Configurator; import org.apache.logging.log4j.core.config.DefaultConfiguration; import org.apache.thrift.transport.TTransportException; import org.openslx.imagemaster.localrpc.NetworkHandler; import org.openslx.imagemaster.thrift.server.BinaryListener; import org.openslx.sat.thrift.version.Version; import org.openslx.util.AppUtil; /** * The main class that starts all the services. */ public class App { private static Logger log = LogManager.getLogger( App.class ); private static final String NAME = "Master-Server"; private static List servers = new ArrayList<>(); public static void main( String[] args ) throws TTransportException, NoSuchAlgorithmException, SocketException { // setup basic logging appender to log output on console if no external appender (log4j.properties) is configured if (org.apache.logging.log4j.core.Logger.class.cast(LogManager.getRootLogger()).getAppenders().isEmpty()) { Configurator.initialize(new DefaultConfiguration()); } AppUtil.logHeader( log, App.NAME, App.class.getPackage().getImplementationVersion() ); AppUtil.logProperty( log, "rpc.version", Long.toString( Version.VERSION ) ); // Create binary listener Thread t; if ( Globals.getThriftPortPlain() != 0 ) { t = new Thread( new BinaryListener( Globals.getThriftPortPlain(), false ), "Thrift PLAIN" ); servers.add( t ); t.start(); } // Create UDP RPC local interface t = new Thread( new NetworkHandler( 1333, InetAddress.getLoopbackAddress() ) ); servers.add( t ); t.start(); if ( Globals.getThriftPortSsl() != 0 ) { // Create SSL binary listener try { t = new Thread( new BinaryListener( Globals.getThriftPortSsl(), true ), "Thrift TLS" ); servers.add( t ); t.start(); } catch ( Exception e ) { log.warn( "No TLS available", e ); } } // Run more servers // ... // Wait for all servers to die for ( Thread wait : servers ) { boolean success = false; while ( !success ) { try { wait.join(); success = true; } catch ( InterruptedException e ) { if ( wait.isInterrupted() || !wait.isAlive() ) break; } } } log.info( "All Servers shut down, exiting..." ); } }