package com.wiley.compbooks.brose.chapter10.office;

import java.io.*;
import org.omg.CORBA.*;
import org.omg.PortableServer.*;
import org.omg.CosNaming.*;
import org.omg.CosNaming.NamingContextPackage.*;

public class MeetingServer 
{
    public static void main(String[] args) 
    {
	MeetingFactoryImpl meetingFactory;

        try 
	{
	    //init
	    ORB orb = ORB.init( args, null );
	    POA rootPOA = POAHelper.narrow( orb.resolve_initial_references( "RootPOA"));

	    /* create a user defined poa for the naming contexts */

	    org.omg.CORBA.Policy [] policies = new org.omg.CORBA.Policy[5];

  	    policies[0] = rootPOA.create_id_assignment_policy(IdAssignmentPolicyValue.USER_ID);
	    policies[1] = rootPOA.create_lifespan_policy(LifespanPolicyValue.PERSISTENT);
	    policies[2] = rootPOA.create_request_processing_policy(
				       RequestProcessingPolicyValue.USE_DEFAULT_SERVANT);
	    policies[3] = rootPOA.create_servant_retention_policy(
				       ServantRetentionPolicyValue.RETAIN);
	    policies[4] = rootPOA.create_id_uniqueness_policy(IdUniquenessPolicyValue.MULTIPLE_ID);

	    POA meetingPOA = rootPOA.create_POA("MeetingPOA", 
						rootPOA.the_POAManager(), 
						policies);

	    MeetingDefaultServant mds = new MeetingDefaultServant( orb, meetingPOA );
	    meetingPOA.set_servant( mds );

	    for (int i=0; i<policies.length; i++) 
		policies[i].destroy();			

		// register with naming service

	    NamingContextExt root = 
		NamingContextExtHelper.narrow( orb.resolve_initial_references("NameService"));

	    meetingFactory = new MeetingFactoryImpl( meetingPOA );

	    root.rebind( root.to_name( "MeetingService" ), meetingFactory._this(orb) );

	    rootPOA.the_POAManager().activate();

	    // wait for requests
	    orb.run();
        }
	catch(UserException ue) 
	{
		ue.printStackTrace();
	    System.err.println(ue);
	}
	catch(SystemException se) 
	{
		se.printStackTrace();
	    System.err.println(se);
	}
    }
}
