当前位置:编程学习 > 网站相关 >>

急! 通过JNDI从WAS外部获取数据库连接的问题?

使用的是websphere v5.1.1的版本,在数据连接池测试成功以后,在WAS外部获取JNDI的数据库连接。

主要程序代码如下:
            Properties env = new Properties();
            env.put(Context.INITIAL_CONTEXT_FACTORY,
             "com.ibm.websphere.naming.WsnInitialContextFactory");
            env.put(Context.PROVIDER_URL, "corbaloc:iiop:118.6.77.6:2809");
            Context ctx = new InitialContext(env);
            DataSource ds = (DataSource) ctx.lookup("cell/nodes/midmgr/servers/server1/jdbc/mapsapp");
            System.out.println(ds.getConnection());

但在用lookup取出后,转型时报出异常: 
java.lang.ClassCastException:   javax.naming.Reference

找了好久不知道是什么原因,请各位高手帮忙解决!!! --------------------编程问答-------------------- JNDI  Reference 在解析失败后会直接返回 Reference 对应类型的对象。

比如,对应的 DataSource 实现类找不到,或 DataSource 的工厂类找不到。
你这个问题,可能是 ClassNotFoundException 在先。日志里只有这个 ClassCastException 吗?

--------------------编程问答-------------------- 在 debug 模式下,弄一行单独的 lookup,但不要 cast,
Object returning = ctx.lookup("cell/nodes/midmgr/servers/server1/jdbc/mapsapp");

在 debug 模式下看这个 Reference 对应。它可能包含着一些 RefAddr 吧?这些 RefAddr 就是配置时给的参数,再看它的 Factory Class Name。

--------------------编程问答-------------------- 我还想到另外一个问题,DataSource 可能通过网络远程 lookup 吗?
Socket 对象是绑定到本地的某个 NIC 网卡上的,不能通过网络传递的。能传递的仅仅是配置参数本身。
补充:企业软件 ,  WebSphere
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,