this.sfParentageChanged();
    public synchronized void sfDeployWith(Prim parent, Context cxt)        throws SmartFrogDeploymentException, RemoteException {        try {            // Set context for sfResolves to work when registering as root            sfContext = cxt;            // find name for this process. If found, get parent            sfProcessName = (String) sfResolveHere(SmartFrogCoreKeys.SF_PROCESS_NAME,false);            if (sfProcessName != null) {                if (sfProcessName.equals(SmartFrogCoreKeys.SF_ROOT_PROCESS)) {                    sfIsRoot = true;                } else {                    try {                        sfParent = sfLocateParent();                    } catch (Throwable t) {                        throw new SmartFrogDeploymentException(MSG_PARENT_LOCATION_FAILED, t, this, null);                    }                }            }            // Now go on with normal deployment            try {                super.sfDeployWith(sfParent, sfContext);            } catch (SmartFrogDeploymentException sfex) {                if (sfProcessName != null) {                    sfex.put(SmartFrogCoreKeys.SF_PROCESS_NAME, sfProcessName);                }                sfex.put("sfDeployWith", "failed");                throw sfex;            }            // super.sfDeployWith should take care of throwables...            // Set to root if no parent            if ((sfParent == null) && sfIsRoot) {                SFProcess.getRootLocator().setRootProcessCompound(this);            }            // Register with parent (does nothing if parent in null)            sfRegisterWithParent((ProcessCompound) sfParent);        } catch (SmartFrogException sfex){            throw ((SmartFrogDeploymentException)SmartFrogDeploymentException.forward(sfex));        }    }