⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 servicelocator.java

📁 OBPM是一个开源
💻 JAVA
字号:
package cn.myapps.util.servicelocator;

import java.net.URL;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

import javax.ejb.EJBHome;
import javax.ejb.EJBLocalHome;
import javax.jms.Queue;
import javax.jms.QueueConnectionFactory;
import javax.jms.Topic;
import javax.jms.TopicConnectionFactory;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.rmi.PortableRemoteObject;
import javax.sql.DataSource;
import javax.transaction.UserTransaction;

/**
 * This class is an implementation of the Service Locator pattern. It is
 * used to looukup resources such as EJBHomes, JMS Destinations, etc.
 * This implementation uses the "singleton" strategy and also the "caching"
 * strategy.
 * This implementation is intended to be used on the web tier and
 * not on the ejb tier.
 */
public class ServiceLocator {

    private InitialContext ic;

    private Map cache; 

    private static ServiceLocator me;

    static {
        try {
            me = new ServiceLocator();
        } catch (ServiceLocatorException se) {
            System.err.println(se);
            se.printStackTrace(System.err);
        }
    }

    /**
     * Disabled the defaule contrustor.
     * @throws ServiceLocatorException
     */
    private ServiceLocator() throws ServiceLocatorException {
        try {
            ic = new InitialContext();
            cache = Collections.synchronizedMap(new HashMap());
        } catch (NamingException ne) {
            throw new ServiceLocatorException(ne);
        } catch (Exception e) {
            throw new ServiceLocatorException(e);
        }
    }

    /**
     * Get the signal application.
     * @return The service locator application.
     */
    static public ServiceLocator getInstance() {
        return me;
    }

    /**
     * Retrieve the ejb Local home factory. If this ejb home factory has already
     * been clients need to cast to the type of EJBHome they desire.
     * @return The EJB Home corresponding to the homeName
     */
    public EJBLocalHome getLocalHome(String jndiHomeName)
            throws ServiceLocatorException {
        EJBLocalHome home = null;
        try {
            if (cache.containsKey(jndiHomeName)) {
                home = (EJBLocalHome) cache.get(jndiHomeName);
            } else {
                home = (EJBLocalHome) ic.lookup(jndiHomeName);
                cache.put(jndiHomeName, home);
            }
        } catch (NamingException ne) {
            throw new ServiceLocatorException(ne);
        } catch (Exception e) {
            throw new ServiceLocatorException(e);
        }
        return home;
    }

    /**
     * Retrieve the ejb Remote home factory. If this ejb home factory has
     * already been clients need to cast to the type of EJBHome they desire.
     * @return The EJB Home corresponding to the homeName
     */
    public EJBHome getRemoteHome(String jndiHomeName, Class className)
            throws ServiceLocatorException {
        EJBHome home = null;
        try {
            if (cache.containsKey(jndiHomeName)) {
                home = (EJBHome) cache.get(jndiHomeName);
            } else {
                Object objref = ic.lookup(jndiHomeName);
                Object obj = PortableRemoteObject.narrow(objref, className);
                home = (EJBHome) obj;
                cache.put(jndiHomeName, home);
            }
        } catch (NamingException ne) {
            throw new ServiceLocatorException(ne);
        } catch (Exception e) {
            throw new ServiceLocatorException(e);
        }

        return home;
    }

    /**
     * Retrieve the factory for the factory to get queue connections from 
     * @return The factory for the factory to get queue connections from
     */
    public QueueConnectionFactory getQueueConnectionFactory(
            String qConnFactoryName) throws ServiceLocatorException {
        QueueConnectionFactory factory = null;
        try {
            if (cache.containsKey(qConnFactoryName)) {
                factory = (QueueConnectionFactory) cache.get(qConnFactoryName);
            } else {
                factory = (QueueConnectionFactory) ic.lookup(qConnFactoryName);
                cache.put(qConnFactoryName, factory);
            }
        } catch (NamingException ne) {
            throw new ServiceLocatorException(ne);
        } catch (Exception e) {
            throw new ServiceLocatorException(e);
        }
        return factory;
    }

    /**
     * Retrieve the queue destination to send messages to
     * @return The queue destination to send messages to
     */
    public Queue getQueue(String queueName) throws ServiceLocatorException {
        Queue queue = null;
        try {
            if (cache.containsKey(queueName)) {
                queue = (Queue) cache.get(queueName);
            } else {
                queue = (Queue) ic.lookup(queueName);
                cache.put(queueName, queue);
            }
        } catch (NamingException ne) {
            throw new ServiceLocatorException(ne);
        } catch (Exception e) {
            throw new ServiceLocatorException(e);
        }

        return queue;
    }

    /**
     * Retrieve the factory for the factory to get topic connections from
     * @return The factory for the factory to get topic connections from
     */
    public TopicConnectionFactory getTopicConnectionFactory(
            String topicConnFactoryName) throws ServiceLocatorException {
        TopicConnectionFactory factory = null;
        try {
            if (cache.containsKey(topicConnFactoryName)) {
                factory = (TopicConnectionFactory) cache
                        .get(topicConnFactoryName);
            } else {
                factory = (TopicConnectionFactory) ic
                        .lookup(topicConnFactoryName);
                cache.put(topicConnFactoryName, factory);
            }
        } catch (NamingException ne) {
            throw new ServiceLocatorException(ne);
        } catch (Exception e) {
            throw new ServiceLocatorException(e);
        }
        return factory;
    }

    /**
     * Retrieve the Topic Destination to send messages to 
     * @return the Topic Destination to send messages to
     */
    public Topic getTopic(String topicName) throws ServiceLocatorException {
        Topic topic = null;
        try {
            if (cache.containsKey(topicName)) {
                topic = (Topic) cache.get(topicName);
            } else {
                topic = (Topic) ic.lookup(topicName);
                cache.put(topicName, topic);
            }
        } catch (NamingException ne) {
            throw new ServiceLocatorException(ne);
        } catch (Exception e) {
            throw new ServiceLocatorException(e);
        }
        return topic;
    }

    /**
     * Retrieve the datasource corresponding to the name parameter
     * @return the datasource corresponding to the name parameter
     */
    public DataSource getDataSource(String dataSourceName)
            throws ServiceLocatorException {
        DataSource dataSource = null;
        try {
            if (cache.containsKey(dataSourceName)) {
                dataSource = (DataSource) cache.get(dataSourceName);
            } else {
                dataSource = (DataSource) ic.lookup(dataSourceName);
                cache.put(dataSourceName, dataSource);
            }
        } catch (NamingException ne) {
            throw new ServiceLocatorException(ne);
        } catch (Exception e) {
            throw new ServiceLocatorException(e);
        }
        return dataSource;
    }

    /**
     * Retrieve the user transaction itself for a caller
     * @return The Usertransaction corresponding to the name parameter
     */
    public UserTransaction getUserTransaction(String utName)
            throws ServiceLocatorException {
        UserTransaction userTransaction = null;
        try {
            if (cache.containsKey(utName)) {
                userTransaction = (UserTransaction) cache.get(utName);
            } else {
                userTransaction = (UserTransaction) ic.lookup(utName);
                cache.put(utName, userTransaction);
            }
        } catch (NamingException ne) {
            throw new ServiceLocatorException(ne);
        } catch (Exception e) {
            throw new ServiceLocatorException(e);
        }
        return userTransaction;
    }

    /**
     * Retrieve the URL value corresponding to the env entry name.
     * @return the URL value corresponding to the env entry name.
     */
    public URL getUrl(String envName) throws ServiceLocatorException {
        URL url = null;
        try {
            url = (URL) ic.lookup(envName);
        } catch (NamingException ne) {
            throw new ServiceLocatorException(ne);
        } catch (Exception e) {
            throw new ServiceLocatorException(e);
        }

        return url;
    }

    /**
     * Retrieve the boolean value corresponding to the env entry
     * @return The boolean value corresponding to the env entry such as
     *         SEND_CONFIRMATION_MAIL property.
     */
    public boolean getBoolean(String envName) throws ServiceLocatorException {
        Boolean bool = null;
        try {
            bool = (Boolean) ic.lookup(envName);
        } catch (NamingException ne) {
            throw new ServiceLocatorException(ne);
        } catch (Exception e) {
            throw new ServiceLocatorException(e);
        }
        return bool.booleanValue();
    }

    /**
     * Retrieve the string value corresponding to the env entry name.
     * @return the string value corresponding to the env entry name.
     */
    public String getString(String envName) throws ServiceLocatorException {
        String envEntry = null;
        try {
            envEntry = (String) ic.lookup(envName);
        } catch (NamingException ne) {
            throw new ServiceLocatorException(ne);
        } catch (Exception e) {
            throw new ServiceLocatorException(e);
        }
        return envEntry;
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -