import java.net.MalformedURLException;
import java.rmi.MarshalledObject;
import java.rmi.Naming;
import java.rmi.RMISecurityManager;
import java.rmi.RemoteException;
import java.rmi.activation.Activatable;
import java.rmi.activation.ActivationDesc;
import java.rmi.activation.ActivationException;
import java.rmi.activation.ActivationGroup;
import java.rmi.activation.ActivationGroupDesc;
import java.rmi.activation.ActivationGroupID;
import java.rmi.activation.UnknownGroupException;
import java.util.Properties;

public class ActivatableSetup {
	public static void main(String argv[]) throws RemoteException {
		System.setSecurityManager(new RMISecurityManager());
		Properties props = new Properties();
		props.put("java.security.policy", "policy");
		ActivationGroupDesc.CommandEnvironment ace = null;
		ActivationGroupDesc exampleGroup = new ActivationGroupDesc(props, ace);
		ActivationGroupID agi = null;
		try {
			agi = ActivationGroup.getSystem().registerGroup(exampleGroup);
		} catch (RemoteException re) {
			re.printStackTrace();
		} catch (ActivationException ae) {
			ae.printStackTrace();
		}
		String location = "file:/home/mario/RMITest/activation/";
		MarshalledObject data = null;
		ActivationDesc desc =
			new ActivationDesc(agi, "ActivatableHelloServer", location, data);

		ActivatableHelloInterface stub = null;
		try {
			stub = (ActivatableHelloInterface) Activatable.register(desc);
		} catch (UnknownGroupException uge) {
			uge.printStackTrace();
		} catch (RemoteException re) {
			re.printStackTrace();
		} catch (ActivationException ae) {
			ae.printStackTrace();
		}
		try {
			Naming.rebind("rmi://localhost:1099/HelloObj", stub);
		} catch (RemoteException re) {
			re.printStackTrace();
		} catch (MalformedURLException mue) {
			mue.printStackTrace();
		}

	}
}
