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了。

在處理的時候要注意一下。

相關文章
相關標籤/搜索