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.log4j.BasicConfigurator; import org.apache.log4j.LogManager; import org.apache.log4j.Logger; 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; /** * The main class that starts all the services. */ public class App { private static Logger log = Logger.getLogger( App.class ); 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 ( LogManager.getRootLogger().getAllAppenders() == null ) { BasicConfigurator.configure(); } log.info( "****************************************************************" ); log.info( "******************* Starting Application ***********************" ); log.info( "****************************************************************" ); log.info( "RPC version " + 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..." ); } }