无法实例化类:com.ibm.Websphere.naming.WsnInitialContextFactory

时间:2011-12-08 12:06:04

标签: java websphere

我必须将一个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。我不确定有什么区别。

任何人都可以帮忙解决这个问题吗?谢谢!

2 个答案:

答案 0 :(得分:1)

WebSphere Application Server Community Edition不是真正的WebSphere应用程序服务器。它是一个“拉皮条”的Apache Geronimo。

我不会指望在社区版中看到AIX WebSphere中存在的任何IBM类。

我猜你的选择是:

  • 抛弃IBM特定的内容。
  • 至少获得Express Edition。

检查WAS edition comparison

答案 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