System.out.println("PC completeName got "+ key);
    public Reference sfCompleteName() throws RemoteException {        if (sfCompleteName==null){            Reference r;            r = new Reference();            String canonicalHostName = SmartFrogCoreKeys.SF_HOST;            try {                // read sfHost attribute. Faster that using sfDeployedHost().                canonicalHostName = ((java.net.InetAddress)sfResolveHere(                    canonicalHostName,false)).getCanonicalHostName();            } catch (SmartFrogResolutionException srex){              //@todo log ignore.            } catch (NullPointerException exSfHost) {                //Problem hre a null exc trown.                canonicalHostName = this.sfDeployedHost().getCanonicalHostName();            }            if (sfParent==null) {                r.addElement(ReferencePart.host((canonicalHostName)));                if (this.sfProcessName()==null) {                    // Process created when using sfDeployFrom (use by sfStart &                    //  sfRun)                    r.addElement(ReferencePart.here(SmartFrogCoreKeys.                        SF_RUN_PROCESS));                } else {                    r.addElement(ReferencePart.here(this.sfProcessName()));                }            } else {                //r = sfParent.sfCompleteName(); // Only if you had a hierarchy                //of processes.                r.addElement(ReferencePart.host((canonicalHostName)));                Object key = sfParent.sfAttributeKeyFor(this);                System.out.println("PC completeName got "+ key);                if (key!=null) {                    r.addElement(ReferencePart.here(key));                }            }            sfCompleteName=r;        }        return sfCompleteName;    }