原來的一段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了。
在處理的時候要注意一下。