Package org.apache.geronimo.interop.rmi.iiop.client

Source Code of org.apache.geronimo.interop.rmi.iiop.client.ClientNamingContext

/**
*
*  Copyright 2004-2005 The Apache Software Foundation
*
*  Licensed under the Apache License, Version 2.0 (the "License");
*  you may not use this file except in compliance with the License.
*  You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
*  Unless required by applicable law or agreed to in writing, software
*  distributed under the License is distributed on an "AS IS" BASIS,
*  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*  See the License for the specific language governing permissions and
*  limitations under the License.
*/
package org.apache.geronimo.interop.rmi.iiop.client;

import java.util.HashMap;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Map;
import javax.naming.Context;
import javax.naming.Name;
import javax.naming.NameNotFoundException;
import javax.naming.NameParser;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.OperationNotSupportedException;

import org.apache.geronimo.interop.properties.IntProperty;
import org.apache.geronimo.interop.properties.PropertyMap;
import org.apache.geronimo.interop.properties.StringProperty;
import org.apache.geronimo.interop.properties.SystemProperties;
import org.apache.geronimo.interop.rmi.iiop.ObjectRef;
import org.apache.geronimo.interop.rmi.iiop.compiler.StubFactory;
import org.apache.geronimo.interop.util.ExceptionUtil;
import org.omg.CosNaming.NameComponent;
import org.omg.CosNaming.NamingContext;
import org.omg.CosNaming.NamingContextPackage.NotFound;

public class ClientNamingContext implements Context, java.io.Serializable
{

    public static ClientNamingContext getInstance(Hashtable env)
    {
        ClientNamingContext nc = (ClientNamingContext) contextMap.get(env);
        if (nc == null)
        {
            synchronized (contextMap)
            {
                nc = (ClientNamingContext) contextMap.get(env);
                if (nc == null)
                {
                    nc = new ClientNamingContext();
                    nc.init(env);
                    contextMap.put(env, nc);
                }
            }
        }
        return nc;
    }


    public static final IntProperty idleConnectionTimeoutProperty =
        new IntProperty(SystemProperties.class, "idleConnectionTimeout")
        .defaultValue(60); // 60 seconds

    public static final IntProperty lookupCacheTimeoutProperty =
        new IntProperty(SystemProperties.class, "lookupCacheTimeout")
        .defaultValue(600); // 10 minutes

    public static final StringProperty usernameSystemProperty =
        new StringProperty(SystemProperties.class, "java.naming.security.principal");

    public static final StringProperty passwordSystemProperty =
        new StringProperty(SystemProperties.class, "java.naming.security.credentials");

    private static long     idleConnectionTimeout;

    private static long     lookupCacheTimeout;

    private static int      socketTimeout;

    private static HashMap  contextMap = new HashMap();

    private static HashMap  hostListCache = new HashMap();

//    private ArrayList       requestKeys;

    private HashMap         cache = new HashMap();

    private Hashtable       env;

    private ConnectionPool  connectionPool;

    private PropertyMap     connectionProperties;

    static private HashMap  nameMap = new HashMap();

    private String          username;

    private String          password;

    private String          namePrefix;

    private NamingContext serverNamingContext;

    public ConnectionPool getConnectionPool() {
        return connectionPool;
    }

    public PropertyMap getConnectionProperties()
    {
        return connectionProperties;
    }

    public long getIdleConnectionTimeout()
    {
        return idleConnectionTimeout;
    }

    public String getUsername()
    {
        return username;
    }

    public String getPassword()
    {
        return password;
    }

    // -----------------------------------------------------------------------
    // public methods from interface javax.naming.Context
    // -----------------------------------------------------------------------

    public Object lookup(Name name) throws NamingException {
        return lookup(name.toString());
    }

    public Object lookup(String name) throws NamingException {
        if (name.startsWith("java:comp/env/")) {
            name = name.substring(14);
        }

        String newName = (String) nameMap.get(name);
        if (newName != null) {
            name = newName;
        }

        NameBinding nb = (NameBinding) cache.get(name);
        if (nb == null) {
            synchronized (cache) {
                nb = (NameBinding) cache.get(name);
                if (nb != null && nb.hasExpired()) {
                    cache.remove(name);
                    nb = null;
                }
                if (nb == null) {
                    nb = resolve(name);
                    cache.put(name, nb);
                }
            }
        }
        return nb.object;
    }

    public HostList lookupHost(String name) {
        NameBinding nb = (NameBinding) hostListCache.get(name);
        if (nb == null) {
            synchronized (hostListCache) {
                nb = (NameBinding) hostListCache.get(name);
                if (nb != null && nb.hasExpired()) {
                    hostListCache.remove(name);
                    nb = null;
                }
                if (nb == null) {
                    hostListCache.put(name, nb);
                }
            }
        }
        return (HostList) nb.object;
    }

    public static void bind(String bindName, String name) throws NamingException {
        nameMap.put(bindName, name);
    }

    public void bind(Name name, Object obj) throws NamingException {
        throw new OperationNotSupportedException();
    }

    public void bind(String name, Object obj) throws NamingException {
        throw new OperationNotSupportedException();
    }

    public void rebind(Name name, Object obj) throws NamingException {
        throw new OperationNotSupportedException();
    }

    public void rebind(String name, Object obj) throws NamingException {
        throw new OperationNotSupportedException();
    }

    public void unbind(Name name) throws NamingException {
        throw new OperationNotSupportedException();
    }

    public void unbind(String name) throws NamingException {
        throw new OperationNotSupportedException();
    }

    public void rename(Name oldName, Name newName) throws NamingException {
        throw new OperationNotSupportedException();
    }

    public void rename(String oldName, String newName) throws NamingException {
        throw new OperationNotSupportedException();
    }

    public NamingEnumeration list(Name name) throws NamingException {
        throw new OperationNotSupportedException();
    }

    public NamingEnumeration list(String name) throws NamingException {
        throw new OperationNotSupportedException();
    }

    public NamingEnumeration listBindings(Name name) throws NamingException {
        throw new OperationNotSupportedException();
    }

    public NamingEnumeration listBindings(String name) throws NamingException {
        throw new OperationNotSupportedException();
    }

    public void destroySubcontext(Name name) throws NamingException {
        throw new OperationNotSupportedException();
    }

    public void destroySubcontext(String name) throws NamingException {
        throw new OperationNotSupportedException();
    }

    public Context createSubcontext(Name name) throws NamingException {
        throw new OperationNotSupportedException();
    }

    public Context createSubcontext(String name) throws NamingException {
        throw new OperationNotSupportedException();
    }

    public Object lookupLink(Name name) throws NamingException {
        throw new OperationNotSupportedException();
    }

    public Object lookupLink(String name) throws NamingException {
        throw new OperationNotSupportedException();
    }

    public NameParser getNameParser(Name name) throws NamingException {
        throw new OperationNotSupportedException();
    }

    public NameParser getNameParser(String name) throws NamingException {
        throw new OperationNotSupportedException();
    }

    public Name composeName(Name name, Name prefix) throws NamingException {
        throw new OperationNotSupportedException();
    }

    public String composeName(String name, String prefix) throws NamingException {
        throw new OperationNotSupportedException();
    }

    public Object addToEnvironment(String propName, Object propVal) throws NamingException {
        throw new OperationNotSupportedException();
    }

    public Object removeFromEnvironment(String propName) throws NamingException {
        throw new OperationNotSupportedException();
    }

    public Hashtable getEnvironment() throws NamingException {
        throw new OperationNotSupportedException();
    }

    public String getNameInNamespace() throws NamingException {
        throw new OperationNotSupportedException();
    }

    public void close() throws NamingException {
        throw new OperationNotSupportedException();
    }

    protected void init(Hashtable env)
    {
        this.env = env;
        Object urlObject = env.get(Context.PROVIDER_URL);
        if (urlObject == null) {
            urlObject = SystemProperties.getInstance().getProperty("java.naming.provider.url",
                                                                   "iiop://" + "delafran-t30" + ":2000");
        }
        String url = urlObject.toString();
        UrlInfo urlInfo = UrlInfo.getInstance(url);
        serverNamingContext = (NamingContext)
                StubFactory.getInstance().getStub(NamingContext.class);

        namePrefix = urlInfo.getNamePrefix();

        ObjectRef ncRef = (ObjectRef) serverNamingContext;
        ncRef.$setNamingContext(this);
        ncRef.$setProtocol(urlInfo.getProtocol());
        ncRef.$setHost("ns~" + urlInfo.getHost());
        ncRef.$setPort(urlInfo.getPort());
        ncRef.$setObjectKey(urlInfo.getObjectKey());
        connectionPool = ConnectionPool.getInstance(this);
        Object u = env.get(Context.SECURITY_PRINCIPAL);
        Object p = env.get(Context.SECURITY_CREDENTIALS);
        if (u == null)
        {
            u = usernameSystemProperty.getString();
        }
        if (p == null)
        {
            p = passwordSystemProperty.getString();
        }
        username = u != null ? u.toString() : null;
        password = p != null ? p.toString() : null;

        PropertyMap props = urlInfo.getProperties();
        props.putAll(env);
        PropertyMap copyProps = new PropertyMap();
        copyProps.putAll(props);
        for (Iterator i = copyProps.entrySet().iterator(); i.hasNext();)
        {
            Map.Entry entry = (Map.Entry)i.next();
            String property = (String)entry.getKey();
            Object value = entry.getValue();

            String startsWith = "org.apache.geronimo.interop.rmi.";
            if (property.startsWith(startsWith))
            {
                int replace = startsWith.length();
                props.remove(property);
                props.put(property.substring(replace), value);
            }
        }
        for (Iterator i = SystemProperties.getInstance().entrySet().iterator(); i.hasNext();)
        {
            Map.Entry entry = (Map.Entry)i.next();
            String property = (String)entry.getKey();
            Object value = entry.getValue();
            if (property.startsWith("djc."))
            {
                props.put(property.substring(4), value);
            }
        }
        connectionProperties = props;
        idleConnectionTimeout = 1000 * idleConnectionTimeoutProperty.getInt(url, props);
        lookupCacheTimeout = 1000 * lookupCacheTimeoutProperty.getInt(url, props);
    }

    protected NameBinding resolve(String name) throws NamingException
    {
        Object value = org.apache.geronimo.interop.naming.NameService.getInitialContext().lookupReturnNullIfNotFound(name);
        if (value != null)
        {
            NameBinding nb = new NameBinding();
            nb.object = value;
            nb.cacheTimeout = System.currentTimeMillis() + lookupCacheTimeout;
            return nb;
        }
        try
        {
            NameComponent[] resolveName =
                { new NameComponent(namePrefix + name, "") };
            org.omg.CORBA.Object object = serverNamingContext.resolve(resolveName);
            NameBinding nb = new NameBinding();
            nb.object = object;
            nb.cacheTimeout = System.currentTimeMillis() + lookupCacheTimeout;
            return nb;
        }
        catch (NotFound notFound)
        {
            throw new NameNotFoundException(name);
        }
        catch (Exception ex)
        {
            throw new javax.naming.NamingException(ExceptionUtil.getStackTrace(ex));
        }
    }
}
TOP

Related Classes of org.apache.geronimo.interop.rmi.iiop.client.ClientNamingContext

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.