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个小时就这么浪费了,不过走过的弯路是以后的财富。