
import java.rmi.activation.Activatable;
import java.rmi.activation.ActivationDesc;
import java.rmi.activation.ActivationGroup;
import java.rmi.activation.ActivationGroupDesc;
import java.rmi.activation.ActivationGroupID;
import java.rmi.MarshalledObject;
import java.rmi.RMISecurityManager;
import java.util.HashMap;
import java.util.Properties;

public class RegisterHelloServer
	{
	static String serviceLabel = "HelloServer";
	static String serverClass = "HelloServer";
	static String serverClassLocation = 
		"file:/export/home/whitney/java/whitney/jini/examples/activatable/";
	
	static String serverDataDir = 
		"/export/home/whitney/java/whitney/jini/examples/activatable/ServerData";
	
	static String policyFileLocation = "/export/home/whitney/jini_data";
	static String[] reggieGroups = { "whitney" };

	public static void  main( String[] args ) throws Exception
		{
		System.setSecurityManager(new RMISecurityManager());
		System.out.println("Start main");

		Properties policyFileLocation = new Properties(); 
		policyFileLocation.put("policy", policyFileLocation);

		ActivationGroupDesc.CommandEnvironment ace = null; 
		ActivationGroupDesc exampleGroup = new ActivationGroupDesc(policyFileLocation, ace);
 
		ActivationGroupID agi = 
			ActivationGroup.getSystem().registerGroup(exampleGroup);

		ActivationGroup.createGroup(agi, exampleGroup, 0);

		HashMap initializationData = new HashMap();
		initializationData.put( HelloServer.GROUP_KEY, reggieGroups );
		initializationData.put( HelloServer.DATA_DIR_KEY, serverDataDir );
		initializationData.put( HelloServer.SERVICE_LABEL_KEY, serviceLabel );
		
		MarshalledObject data = new MarshalledObject( initializationData );

		ActivationDesc desc = new ActivationDesc(serverClass, serverClassLocation, data, true);

		System.out.println("Register with rmid");
		
		HelloInterface server = (HelloInterface) Activatable.register(desc);
		System.out.println("Class registered with rmid");
		
		//Force object to be activated by accessing it.
		System.out.println( server.sayHello() );
		System.out.println("Class activated");
		}
	}