【问题标题】:Cannot instantiate class: com.ibm.Websphere.naming.WsnInitialContextFactory无法实例化类:com.ibm.Websphere.naming.WsnInitialContextFactory
【发布时间】:2011-12-08 12:06:03
【问题描述】:

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

谁能帮忙解决这个问题?谢谢!

【问题讨论】:

  • 找不到您尝试的课程。也许他们改变了 InitialContextFactory 实现的类名或包

标签: java websphere


【解决方案1】:

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

我不会指望在 Community Edition 中看到您的 AIX WebSphere 中存在的任何 IBM 类。

我猜你的选择是:

  • 扔掉所有 IBM 特定的东西。
  • 至少获得 Express Edition。

检查WAS edition comparison

【讨论】:

  • 感谢您的回复。怎么能把IBM具体丢出去?是否有任何通用的可以替换“com.ibm.websphere.naming.WsnInitialContextFactory”并适用于两个版本? Express 不是一个选项,因为需要免费,试用不行。
  • 我不知道“com.ibm.websphere.naming.WsnInitialContextFactory”有什么用处。您可以尝试“上下文 jdbcCtx = new InitialContext();”。您还必须检查是否在其他地方使用了其他 IBM 特定的东西。
  • 同意。你为什么要指定 InitialContextFactory 类?使用 J2EE 服务器提供的默认值应该可以工作,特别是对于在该服务器中定义的对象。
  • 该代码不是由我完成的,而且我确实是 websphere 的新手。在移植到 Windows 时,我犹豫要删除 AIX 上的工作代码。我的目标是进行最小的更改,以允许相同的代码在两个平台上运行。谢谢大家的好建议,明天去看看~
【解决方案2】:

com.ibm.websphere.naming.WsnInitialContextFactory 是 WebSphere Application Server 特定的类。

正如 Udo 和其他人所说,WebSphere Community Edition 是一个完全不同的产品。

您不仅将运行时操作系统从 AIX 更改为 Windows,而且将运行时引擎更改为另一个提供程序。

如果应用程序包含这样特定于运行时 (WAS) 的代码,那么当它们被移植到另一个 Java EE 容器(在这种情况下,WAS-CE 实际上是基于在 Apache Geronimo 服务器上)。

正如 Udo 所提到的,现在不需要在代码中明确声明 InitialContextFactory 提供程序。在过去的 5 到 6 年前,应用程序开发人员必须明确说明这些,这曾经是正确的。如果您正在查看由同一服务器托管的 JNDI 服务器中的对象,则无需说明。

当您在 WAS CE 上运行并查看在另一个 WAS 上运行的 JNDI 服务器时需要它(常规 IBM WAS 不是 CE)然后此代码确实是必需的,您需要确保这些类存在于您的 WAS CE 运行时间CLASSPATH

【讨论】:

  • 感谢您的回复,从 AIX 移植到 Windows 以及更改引擎的决定是由一个不知情的经理做出的,并将该任务分配给我,这在 websphere 中也是不可知的。我需要连接到另一台 JNDI 服务器,而不是本地服务器。我仍在为如何在没有 com.ibm.xxx 的情况下连接而苦苦挣扎,非常感谢任何帮助!
猜你喜欢
  • 2022-01-03
  • 1970-01-01
  • 2011-08-14
  • 2018-09-05
  • 2020-11-06
  • 2015-06-23
  • 2019-04-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多