resin和tomcat调用JNDI的差异

原来的一段JDNIsouce在tomcat下好用,今天转移到resin上,发现了奇怪的问题,居然找不到class。java

源代码:apache

Hashtable<String, String> table = new Hashtable<String, String>();
// 设置JNDI的工厂类
table.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.naming.java.javaURLContextFactory");
// 初始化JNDI上下文
InitialContext ctx = new InitialContext(table);

转移到 resin上居然提示找不到class:org.apache.naming.java.javaURLContextFactorytomcat

因而换成resin下的javaURLContextFactory类:com.caucho.naming.java.javaURLContextFactory spa

Hashtable<String, String> table = new Hashtable<String, String>();
// 设置JNDI的工厂类
table.put(Context.INITIAL_CONTEXT_FACTORY, "com.caucho.naming.java.javaURLContextFactory");
// 初始化JNDI上下文
InitialContext ctx = new InitialContext(table);

 

但是,依旧报错:code

java.lang.ClassCastException: com.caucho.naming.java.javaURLContextFactory cannot be cast to javax.naming.spi.InitialContextFactory

多么神奇的错误啊~it

不死心,去掉table的声明: io

InitialContext ctx = new InitialContext();

哈哈~再也不报错了~table

但是在取得内容的时候,又有新问题:ast

ds = (ComboPooledDataSource) ctx.lookup("datasource");

 

这行souce在resin的不一样版本下居然有不一样的体现class

在3.0.1下直接返回null,可是在心本版中该处直接throw Exception了。

在处理的时候要注意一下。

相关文章
相关标签/搜索