现在的位置: 首页 > 综合 > 正文

获取WEBLOGIC控制台配置的JNDI数据源,并创建Connection

2013年02月21日 ⁄ 综合 ⁄ 共 1613字 ⁄ 字号 评论关闭

 

package Beans;


import java.util.Map;
import java.util.HashMap;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;


public class ServiceLocator
{

    private javax.naming.Context ic;
    private String dsName ="myjndi";

    private Map cache = new HashMap();

    private static ServiceLocator me;

    /**
     *  
     */
    private ServiceLocator()
    {
        try
        {
            this.ic = new InitialContext();
            
        }
        catch (NamingException e)
        {
            System.out.println("** ServiceLocator.ServiceLocator() 无法初始化InitialContext");
        }
    }

    //返回实例
    public static ServiceLocator getInstance()
    {
        if (null == me)
            me = new ServiceLocator();
        return me;
    }

    public DataSource getDataSource(String dataSourceName)
    {
        DataSource dataSource = null;
        
        try
        {
            if (cache.containsKey(dataSourceName))
            {
                dataSource = (DataSource)cache.get(dataSourceName);
            }
            else
            {
            	//Context envCtx=(Context)ic.lookup("java:comp/env");
                dataSource = (DataSource)ic.lookup(this.dsName);
                cache.put(this.dsName, dataSource);
            }
        }
        catch (NamingException e)
        {
            System.out.println("==========没有找到服务名称" + dataSourceName + "==========");;
        }

        return dataSource;
    }
    
    public DataSource getDataSource()
    {
        DataSource dataSource = null;
        
        try
        {
            if (cache.containsKey(this.dsName))
            {
                dataSource = (DataSource)cache.get(this.dsName);
            }
            else
            {
            	
               
                dataSource = (DataSource)ic.lookup(this.dsName);
                cache.put(this.dsName, dataSource);
            }
        }
        catch (NamingException e)
        {
            System.out.println("==========没有找到服务名称" + this.dsName + "==========");;
        }

        return dataSource;
    }

}

“myjndi”是WEBLOGIC上配置的数据源的JNDI NAME,

这里要注意的是查看你的DATA SOURCE是否成功发布,修改了JNDI NAME啊或者其他的参数后数据源的DEVELOP会置为FALSE。这时候最好是删除重新创建重新发布一下。我今天在用JNDI数据源的时候弄了几个小时老是不能成功取到数据源,还以为是我取数据源的方式有问题还是JNDI名字有问题,后面对比另外一台电脑上的WEBLOGIC才发现原来是DEVELOP为FALSE了,于是重新创建了一下,果然成功了,真是坑爹啊。4个小时就这么浪费了,不过走过的弯路是以后的财富。

抱歉!评论已关闭.