我必须将一个Web应用程序从AIX移植到Windows服务器,但它会在像Windows这样的新安装的IBM WebSphere Community Edition中抛出异常:
javax.servlet.ServletException: javax.naming.NoInitialContextException: Cannot instantiate class: com.ibm.websphere.naming.WsnInitialContextFactory [Root exception is java.lang.ClassNotFoundException: com.ibm.websphere.naming.WsnInitialContextFactory in classloader...
跟踪代码并确定由此代码导致:
Properties env = new Properties();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.ibm.websphere.naming.WsnInitialContextFactory");
Context jdbcCtx = new InitialContext(env);
AIX Websphere是完整的WebSphere Application Server,而windows one是Community Edition。我不确定有什么区别。
任何人都可以帮忙解决这个问题吗?谢谢!
答案 0 :(得分:1)
WebSphere Application Server Community Edition不是真正的WebSphere应用程序服务器。它是一个“拉皮条”的Apache Geronimo。
我不会指望在社区版中看到AIX WebSphere中存在的任何IBM类。
我猜你的选择是:
答案 1 :(得分:1)
com.ibm.websphere.naming.WsnInitialContextFactory
是特定于WebSphere Application Server的类。
正如Udo和其他人所说,WebSphere Community Edition是一个完全不同的产品。
您不仅将运行时操作系统从AIX更改为Windows,还将运行时引擎更改为其他提供程序。
如果应用程序包含特定于您的情况下的运行时(WAS)的代码,那么当它们移植到另一个Java EE容器时显然不起作用(在这种情况下,WAS-CE实际上是基于的)在Apache Geronimo Server上。)
如Udo所述,这些天没有必要在代码中明确说明InitialContextFactory
提供程序。过去5 - 6年前,应用程序开发人员必须明确说明这些内容。如果您正在查看由同一服务器托管的JNDI服务器中的对象,则无需说明此内容。
当您在WAS CE上运行并查看在另一个WAS上运行的JNDI服务器(常规IBM WAS而不是CE)时,这是必需的,那么确实需要此代码,您需要确保这些类存在于您的WAS CE运行时间CLASSPATH
。