final ActivationGroupDesc desc,
final long incarnation)
throws ActivationException
{
if (state != UNUSED) {
throw new ActivationException("group previously created");
}
try {
final Configuration config = getConfiguration(desc.getData());
login = (LoginContext) config.getEntry(
PHOENIX, "loginContext", LoginContext.class, null);
if (login != null) {
login.login();
}
inheritGroupSubject =
((Boolean) config.getEntry(
PHOENIX, "inheritGroupSubject", boolean.class,
Boolean.FALSE)).booleanValue();
return (java.rmi.activation.ActivationGroup) doAction(
new PrivilegedExceptionAction() {
public Object run() throws Exception {
ProxyPreparer sysPreparer =
getPreparer(config, "systemPreparer");
monPreparer = getPreparer(config,
"monitorPreparer");
TcpServerEndpoint se =
TcpServerEndpoint.getInstance(0);
Exporter defaultExporter =
new BasicJeriExporter(se, new AccessILFactory());
exporter = (Exporter) config.getEntry(
PHOENIX, "instantiatorExporter",
Exporter.class, defaultExporter);
if (exporter == null) {
exporter = new AlreadyExportedExporter();
}
refuseCalls =
!(exporter instanceof AlreadyExportedExporter);
unexportTimeout = getInt(config, "unexportTimeout",
60000);
unexportWait = getInt(config, "unexportWait", 10);
ActivationSystem sys = (ActivationSystem)
sysPreparer.prepareProxy(id.getSystem());
ActivationGroupImpl.incarnation = incarnation;
groupID = id;
state = CREATING;
ActivationGroupID gid = (sys == id.getSystem() ?
id : new WrappedGID(id, sys));
Object group = ActivationGroup.createGroup(
gid, desc, incarnation);
state = ACTIVE;
return group;
}
});
} catch (ActivationException e) {
throw e;
} catch (Exception e) {
throw new ActivationException("creation failed", e);
} finally {
if (state != ACTIVE) {
checkInactiveGroup();
}
}