在查询了众多的资料以后发现只有使用IBM WebSphere6.0自身带的JDK才可以避免以上的错误。
在更改了JDK以后,结果又出现了新的错误
java.lang.ClassCastException: javax.naming.Reference
at com.ibm.rmi.javax.rmi.PortableRemoteObject.getObjectImpl(PortableRemoteObject.java:614)
at com.ibm.rmi.javax.rmi.PortableRemoteObject.narrow(PortableRemoteObject.java:339)
at javax.rmi.PortableRemoteObject.narrow(PortableRemoteObject.java:157)建立数据库连接错误:javax.naming.Reference
at testwebsphere.test.main(test.java:89)
这个问题可头疼了,我查询了网络,就是没有找到解决办法。最后在经过2天的反复测试和试验后,在找到了原因。
上面的代码需要做如下的修改
ht.put(Context.INITIAL_CONTEXT_FACTORY,
"com.ibm.websphere.naming.WsnInitialContextFactory");
ht.put(Context.PROVIDER_URL, "iiop://192.168.1.224:2809/");
Context ctx = new InitialContext(ht);
以上语句删除,添加一条语句
Context ctx = new InitialContext();
然后在工程生成WAR文件以后发布在WebSphere上,通过网页进行调用,就成功了。
总结:WebLogic 的Web应用数据连接池调用机制和WebSphere不同,WebLogic是通过T3协议可以直接访问应用服务器上的JNDI资源,而WebSphere需要将资源调用的bean已JAR应用的方式发布到WebSphere上,因为它是在本地所以不需要设置,只需要读取本地的InitialContext()然后Lookup相应的JNDI接口就可以。