package org.jacorb.test.orbreinvoke.tao_ns;
import java.util.Properties;
import java.io.*;
import java.net.Inet4Address;
import java.net.Inet6Address;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.List;
import org.jacorb.naming.NameServer;
import org.jacorb.orb.util.*;
import org.jacorb.util.ObjectUtil;
import org.omg.CORBA.BAD_PARAM;
import org.omg.CORBA.ORB;
import org.omg.CORBA.Policy;
import org.omg.PortableServer.IdAssignmentPolicyValue;
import org.omg.PortableServer.LifespanPolicyValue;
import org.omg.PortableServer.POA;
import org.omg.PortableServer.POAHelper;
import org.omg.PortableServer.Servant;
import org.omg.CosNaming.*;
import org.omg.CosNaming.NamingContextPackage.*;
import org.omg.PortableServer.ImplicitActivationPolicyValue;
import org.jacorb.test.listenendpoints.echo_corbaloc.*;
public class Server
{
public static void main(String[] args)
{
try
{
CmdArgs cmdArgs = new CmdArgs("Server", args);
boolean cmdArgsStatus = cmdArgs.processArgs();
// translate any properties set on the commandline but after the
// class name to a properties
java.util.Properties props = ObjectUtil.argsToProps(args);
String implName = props.getProperty("jacorb.implname", "EchoServerX");
System.out.println("SERVER: jacorb.implname: <" + implName + ">");
if (implName.equals("EchoServerX"))
{
props.setProperty("jacorb.implname", implName);
}
String objectId = implName + "-ID";
String poaName = "EchoServer-POA";
//init ORB
ORB orb = ORB.init(args, props);
//init POA
POA rootPOA = POAHelper.narrow(orb.resolve_initial_references("RootPOA"));
//init new POA
Policy[] policies = new Policy[2];
policies[0] = rootPOA.create_lifespan_policy(LifespanPolicyValue.PERSISTENT);
policies[1] = rootPOA.create_id_assignment_policy(IdAssignmentPolicyValue.USER_ID);
for (int i=0; i<policies.length; i++)
{
policies[i].destroy();
}
POA poa = rootPOA.create_POA
(poaName, rootPOA.the_POAManager(), policies);
poa.the_POAManager().activate();
// Find the Naming Service
System.out.println("SERVER: call orb.resolve_initial_references( \"NameService\" )" );
org.omg.CORBA.Object nsObj =
orb.resolve_initial_references( "NameService" );
System.out.println("SERVER: call NamingContextExtHelper.narrow( nsObj )" );
NamingContextExt nsRootContext =
NamingContextExtHelper.narrow( nsObj );
if (nsRootContext == null) {
System.err.println("SERVER: NameService's context is null" );
System.exit(1);
}
NameComponent[] context = new NameComponent[1];
context[0] = new NameComponent(implName, "context");
try
{
nsRootContext.unbind(context);
}
catch (Exception e)
{
// ignore and do nothing
}
try
{
System.out.println("SERVER: call nsRootContext.resolve(context)" );
nsRootContext.resolve(context);
}
catch (NotFound e)
{
System.out.println("SERVER: got NotFound exception, " + e.getMessage());
}
// create servant object
EchoMessageImpl echoServant = new EchoMessageImpl(implName + "." + objectId);
poa.activate_object_with_id(objectId.getBytes(), echoServant);
org.omg.CORBA.Object ref = poa.servant_to_reference(echoServant);
System.out.println("SERVER: call nsRootContext.rebind(context, ref)");
try
{
nsRootContext.rebind(context, ref);
}
catch (NotFound e)
{
System.out.println("SERVER: got NotFound exception, " + e.getMessage());
}
String ior = orb.object_to_string(ref);
System.out.println("SERVER IOR: " + ior);
System.out.flush();
if (cmdArgs.getIORFile() != null)
{
PrintWriter ps = new PrintWriter(new FileOutputStream(
new File( cmdArgs.getIORFile())));
ps.println(ior);
ps.close();
}
// wait for requests
orb.run();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}