日期:2014-05-19  浏览次数:20680 次

调试架在websphere上的系统时报ClassNotFoundException异常
近日在调试一个ERP系统,该系统是架在websphere上的。

具体情况是这样的:操作该系统后台任务注册和执行的功能节点时,会报一个错

  Exception occurred during event dispatching:
  nc.bs.framework.exception.FrameworkConnectorException: Read/Witer object error
at nc.bs.framework.comn.cli.JavaURLCommunicator.request(JavaURLCommunicator.java:73)
at nc.bs.framework.comn.cli.ClientProxyImpl.urlCall(ClientProxyImpl.java:184)
at nc.bs.framework.comn.cli.ClientProxyImpl.invoke(ClientProxyImpl.java:135)
  ……
  Caused by: java.lang.ClassNotFoundException: NCClassLoader(Cache), Class not found:javax.ejb.EJBException
at nc.bs.framework.codesync.client.NCClassLoader.loadClass(NCClassLoader.java:60)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)

这个错是说类没有找到,而javax.ejb.EJBException这个类是在j2ee.jar这个包中的,但这个包在“开发环境根目录/lib”下面是有的。

想请教一下,websphere是否还需要配置环境变量,如果需要可否指明配置的路径?

或者说我处理问题的思路是否正确,是否有其他出错的可能?

多谢各位!

------解决方案--------------------
个人认为:
1.web容器中一般已经集成webclassloader,所以一般我们开发所用到的类都可以放在WEB-INF/classes和 WEB-INF/lib下。
2.对于其他第三方或者自己开发的classloader,因为与容器webclassloader是相互对立,所以这个classloader所加载的类,与WEB-INF/classes和 WEB-INF/lib下等所有web容器的jar都无关系。一般只与他的父classloader有关系。
3.不管那个classloader一般都系集成jdk的BootstrapClassloader,所以设置jdk的classpath对应所有classloader一般都管用。
  
对于你这个问题,个人觉得nc.bs.framework.codesync.client.NCClassLoader应该是第三方的classloader.需配置was的jdk类路径。
was jdk类路径配置记得:服务器--》应用服务器---》点击应用服务器---》java和进程管理--->进程定义--》Java 虚拟机---》类路径
然后就可以配置对应的所需的类路径
------解决方案--------------------
上面报的是个EJBExcption,不是找不到这个类;
是这个异常:nc.bs.framework.codesync.client.NCClassLoader.loadClass(NCClassLoader.java:60)
看60行load什么类;