The following two assignments to the root variable definitely will look strange to future readers of this code.

I suggest to keep the original comment:

        root = new DomainRoot(); // which automatically caches this instance, but does not
        // ensure that it is the first, as a concurrent request
        // might create another

        // so we get it again from the cache before returning if
        root = fromOid(1L);