Package sljms.jndi

Source Code of sljms.jndi.GroupContext

package sljms.jndi;

import org.apache.log4j.Logger;
import javax.naming.Context;
import java.util.Hashtable;
import javax.naming.NamingException;
import java.util.Enumeration;
import sljms.NotImplementedException;
import javax.naming.Name;
import javax.naming.NameParser;
import javax.naming.NamingEnumeration;
import sljms.GroupConnectionFactory;
import sljms.GroupTopic;
import sljms.GroupQueue;
import java.net.URL;
import javax.naming.NameNotFoundException;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
import java.util.HashSet;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;



/**
* A Context that can be used to locally lookup ConnectionFactories and Destinations. It gets
* the mapping it needs from the JNDI environment (jndi.properties).
*
* @author Ovidiu Feodorov <ovidiu@feodorov.com>
* @version $Revision: 1.4 $ $Date: 2004/03/15 19:04:25 $
*
**/
class GroupContext implements Context {

    private static final Logger log = Logger.getLogger(GroupContext.class);

    public static final String PROPERTY_NAME_PREFIX = "sljms.jndi.";
    public static final String CONNECTION_FACTORY_TOKEN = "connectionFactory.";
    public static final String DESTINATION_TOKEN = "destination.";

    //
    // cache of the environment; the names found in the environment are cached here, so they
    // can be used to lazy instantiate the administered objects.
    //
    private Map connFactoryInfo; // (jndi name (String) - stack file name (String))
    private Set topicInfo; // jndi name (String)
    private Set queueInfo; // jndi name (String)
       
    //
    // local cache - the instances that have been looked up once are cached here.
    //

    // (connection factory JNDI name (String) - ConnectionFactory instance)
    private Map connFactories; // (jndi name (String) - ConnectionFactory instance)
    private Map topics; // (jndi name (String) - Topic instance)
    private Map queues; // (jndi name (String) - Queue instance)

    /**
     * @param environment - The possibly null JNDI environment, as received by the
     *        InitialContextFactory.
     **/
    GroupContext(Hashtable environment) {

        connFactoryInfo = new HashMap();
        topicInfo = new HashSet();
        queueInfo = new HashSet();
        cacheAdministeredObjectInfo(environment);
        connFactories = new HashMap();
        topics = new HashMap();
        queues = new HashMap();
    }


    /**
     * Extracts the properties associated with SLJMS administered objects and caches them.
     **/
    private void cacheAdministeredObjectInfo(Hashtable environment) {

        if (environment == null) {
            return;
        }

        for(Enumeration e = environment.keys(); e.hasMoreElements(); ) {
            String prop = (String)e.nextElement();
            if (!prop.startsWith(PROPERTY_NAME_PREFIX)) {
                continue;
            }
            String key = prop.substring(PROPERTY_NAME_PREFIX.length());
            if (key.startsWith(CONNECTION_FACTORY_TOKEN)) {
                connFactoryInfo.put(key.substring(CONNECTION_FACTORY_TOKEN.length()),
                                    environment.get(prop));
            }
            else if (key.startsWith(DESTINATION_TOKEN)) {
                String destJNDIName = key.substring(DESTINATION_TOKEN.length());
                String destType = ((String)environment.get(prop)).toLowerCase();
                if ("topic".equals(destType)) {
                    topicInfo.add(destJNDIName);
                }
                else if ("queue".equals(destType)) {
                    queueInfo.add(destJNDIName);
                }
            }
        }
    }

    public Object lookup(Name name) throws NamingException {
        throw new NotImplementedException();
    }

    public Object lookup(String name) throws NamingException {

        // try to fist find it in cache

        Object o = null;
        if ((o = connFactories.get(name)) != null) {
            return o;
        }
        if ((o = topics.get(name)) != null) {
            return o;
        }
        if ((o = queues.get(name)) != null) {
            return o;
        }
       
        // not in cache, build it

        String stackConfigFileName = (String)connFactoryInfo.get(name);
       
        if (stackConfigFileName != null) {
            ConnectionFactory cf = new GroupConnectionFactory(stackConfigFileName);
            connFactories.put(name, cf);
            return cf;
        }
        if (topicInfo.contains(name)) {
            Destination t = new GroupTopic(name);
            topics.put(name, t);
            return t;
        }
        if (queueInfo.contains(name)) {
            Destination q = new GroupQueue(name);
            queues.put(name, q);
            return q;
        }
        throw new NameNotFoundException(name+" not found");
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

}
TOP

Related Classes of sljms.jndi.GroupContext

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.