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

时间:2020-12-28 19:14:53
 
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个小时就这么浪费了,不过走过的弯路是以后的财富。