When I debug a corba related application, I managed to trace into a piece of yoko code like this:

public class Util {
    private static UtilDelegate delegate = null;
    private static final String defaultDelegate = "org.apache.yoko.rmi.impl.UtilImpl";

    // To hide the default constructor we should implement empty private constructor
    private Util() {}

    static {
        // Initialize delegate
        String delegateName = (String)AccessController.doPrivileged(new GetSystemPropertyAction("javax.rmi.CORBA.UtilClass", defaultDelegate));
        try {

            // this is a little bit recursive, but this will use the full default search order for locating
            // this.
            delegate = (UtilDelegate)Util.loadClass(delegateName, null, null).newInstance();
        } catch (Throwable e) {
            org.omg.CORBA.INITIALIZE ex = new org.omg.CORBA.INITIALIZE("Can not create Util delegate: "+delegateName);
            throw ex;

According to another code in ProviderRegistryImpl$SPIRegistry(the id's value is the delegateName variable as highlighted above), while the registry hashmap's key is "javax.rmi.CORBA.UtilClass", that will lead CNF exception.
private synchronized BundleProviderLoader getLoader(String id) {
            // synchronize on the registry instance
            if (registry != null) {
                log.fine("registry: " + registry);
                // return the first match, if any
                List<BundleProviderLoader> list = registry.get(id);
                if (list != null && !list.isEmpty()) {
                    return list.get(0);
            // no match here
            return null;

So my question is should we change the Util code to pass the interface class name to load class? Please advise.