package scs.container.servant;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;
import org.omg.CORBA.ORB;
import org.omg.CORBA.SystemException;
import org.omg.CORBA.UserException;
import org.omg.PortableServer.POA;
import org.omg.PortableServer.POAHelper;
import scs.core.IComponent;
import scs.core.IComponentHelper;
import scs.execution_node.ContainerManager;
import scs.execution_node.ContainerManagerHelper;
import scs.core.ComponentId;
/**
* Classe que implementa a aplicacao do Container do SCS.
*/
public class ContainerApp {
private static Properties config = null;
/**
* @param filename
* @return boolean indicando se a opera��o de leitura de configuracoes foi completada
*/
private static boolean readConfiguration( String filename ) {
Properties properties = new Properties();
try {
properties.load(new FileInputStream(filename));
} catch (IOException e) {
System.err.println(e);
return false;
}
config = properties;
return true;
}
/**
* @param args Argumentos da main:
* - nome do arquivo de configuracao
* - ior do objeto ContainerParent criado no execution node
* - ior do EventManager criado no execution node
* - nome do container
*/
public static void main(String[] args) {
if( args.length != 4 ) {
System.out.println("Error: incorrect parameters.");
System.out.println("Syntax: ContainerApp <configuration-file> <ior-container-parent> <ior-event-mgr> <container-name>");
System.out.println("<configuration-file> = name of properties file containing configuration items");
System.out.println("<ior-container-parent> = IOR for ContainerParent object from Execution Node" );
System.out.println("<ior-event-mgr> = IOR for EventManager from Execution Node" );
System.out.println("<container-name> = Name for this container");
System.exit(1);
}
String configFile = args[0];
String iorParent = args[1];
String iorEvMgr = args[2];
String containerName = args[3];
try {
if( !readConfiguration(configFile) ) {
System.err.println("Error reading configuration file.");
System.exit(1);
}
ORB orb = ORB.init(args, config);
POA poa = POAHelper.narrow(orb.resolve_initial_references("RootPOA"));
poa.the_POAManager().activate();
IComponent eventMgr = null;
if (!iorEvMgr.equals("null"))
{
eventMgr = IComponentHelper.narrow(orb.string_to_object( iorEvMgr ));
}
if( eventMgr != null ) {
eventMgr.startup();
}
ContainerServant containerServant = ContainerServant.getInstance();
containerServant.initialize( containerName, config , eventMgr );
containerServant.createComponentId(new ComponentId("ContainerServant", 1));
org.omg.CORBA.Object container = poa.servant_to_reference(containerServant);
// System.err.println("Recebeu IOR do container parent: " + iorParent );
org.omg.CORBA.Object objParent = orb.string_to_object( iorParent );
ContainerManager cmgr = ContainerManagerHelper.narrow(objParent);
// System.err.println("Notificando o container parent: IOR do container = " + container.toString());
cmgr.registerContainer(containerName,IComponentHelper.narrow(container));
System.err.println("Running container ...." );
orb.run();
}
catch (UserException e) {
e.printStackTrace();
}
catch (SystemException e) {
e.printStackTrace();
}
}
}