2011-06-01 184 views
0

我目前正在使用commons-collections jar文件的portlet,并且正在获取NoSuchMethodError。要解决此问题,我需要将我的WAR文件的类装入器从PARENT_FIRST更改为PARENT_LAST(位于application.xml文件中)。IBM Websphere portlet类加载器问题

但是,当我这样做时,我的portlet将无法启动,并且当我登录到控制台时,它会显示消息“Portlet暂时被禁用”。如果我将类加载器更改回PARENT_FIRST,那么它将再次启动,但随后我得到NoSuchMethodError。

有没有人有任何建议如何解决这个问题?

+0

您需要调查日志以确定“Portlet暂时被禁用”的原因,然后有人可以尝试帮助解决该问题。 – 2011-06-01 14:37:42

+0

它只会在上面的场景中暂时被禁用,否则它的工作 – MTH 2011-06-01 15:36:42

回答

2

我不知道怎么样,但今天,当我收到“Portlet暂时被禁用”时,我开始在日志中收到错误消息。我得到一个java.lang.LinkageError,这是因为我有servlet-api-2.5.jar和一个与webshpere j2ee.jar冲突的jaxb jar。一旦我删除了这些依赖关系并将类加载器设置为PARENT_LAST,它似乎可以正常工作。似乎很多人都面临类似的问题。下面的链接也很有用http://forum.springsource.org/showthread.php?33663-dispatcher-servlet-quot-not-a-servlet-class-quot-in-websphere

0

@MTH,

请尝试添加commons-collections作为共享库。请参阅这里查看有关其他人如何使用共享库支持的示例[1]。这会给你的步骤,只是做它,你需要重写/从WAS的类加载器替换罐子

[1] http://portals.apache.org/jetspeed-2/deployguide/deploying-jetspeed-to-websphere.html#section_4_2

感谢, 变暗

+0

我想使用的commons-collections jar目前在单独的实用程序项目中,并且已经添加到我的Portlet j2ee Web模块依赖项中。这确保了我的项目所需的所有库都集中在一个地方。我会尝试你上面提到的,看看它是否有效,但是你知道更好的解决方案,因为这似乎是部署到不同环境时的恶梦。我仍然不明白为什么将WAR中的类装载器从PARENT_FIRST更改为PARENT_LAST会破坏portlet。 – MTH 2011-06-01 19:50:13

+0

我已经尝试了上述链接中的两种方法,虽然我没有得到“Portlet暂时被禁用”,但我仍然得到NoSuchMethodError,因此类加载器似乎仍然在做PARENT_FIRST。有没有人有更多的建议? – MTH 2011-06-02 09:56:09

0

您还没有提供任何日志...但仍然,设置您的应用程序运行PARENT_LAST时要注意的最重要的事情之一是您的应用程序未捆绑任何可能与WebSphere Portal提供的类相冲突的系统级类。例如,属于Portlet规范或JavaEE规范的类。