原来的一段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了。
在处理的时候要注意一下。