【问题标题】:ClassNotFoundException deploying webservice on Weblogic 10.3 with HibernateClassNotFoundException 使用 Hibernate 在 Weblogic 10.3 上部署 webservice
【发布时间】:2010-09-23 20:25:25
【问题描述】:

我有一个使用 EJB 实现 JWS Web 服务的项目,如下所示:

@Stateless
@Remote(WebServiceTest.class)
@WebService(
 serviceName="TestService",
 name="TestName"
)
public class WebServiceTestImpl implements WebServiceTest {
 @Override
 @WebMethod(operationName="hello")
 public String hello() {
  return "Hello World!";
 }
}

我使用一个简单的 EAR 项目在 WebLogic 10.3 上完美地部署和测试了它。现在我需要在我的项目中使用Hibernate,所以根据之前的经验我知道我必须使用来自Hibernate而不是来自容器的Antrl,所以我在EAR项目中创建了一个weblogic-application.xml:

<?xml version="1.0" encoding="UTF-8"?>
<wls:weblogic-application ...>
 <wls:prefer-application-packages>
  <wls:package-name>antlr.*</wls:package-name>
 </wls:prefer-application-packages>
</wls:weblogic-application>

现在当我部署 EAR 时出现此错误:

Unable to deploy EJB: WebServiceTestImpl from test-1.0.0-SNAPSHOT.jar:

***** ASSERTION FAILED *****


 at weblogic.ejb.container.deployer.EJBModule.prepare(EJBModule.java:467)
 at weblogic.application.internal.flow.ModuleListenerInvoker.prepare(ModuleListenerInvoker.java:199)
 at weblogic.application.internal.flow.DeploymentCallbackFlow$1.next(DeploymentCallbackFlow.java:507)
 at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:41)
 at weblogic.application.internal.flow.DeploymentCallbackFlow.prepare(DeploymentCallbackFlow.java:149)
 Truncated. see log file for complete stacktrace

Caused By: java.lang.ClassNotFoundException: test.WebServiceTestImpl_zd33dy_WSOImpl
 at weblogic.utils.classloaders.GenericClassLoader.findLocalClass(GenericClassLoader.java:280)
 at weblogic.utils.classloaders.GenericClassLoader.findClass(GenericClassLoader.java:253)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
 at weblogic.utils.classloaders.GenericClassLoader.loadClass(GenericClassLoader.java:177)
 Truncated. see log file for complete stacktrace

我该如何解决这个问题?如果我不将 Antlr 放入 wls:prefer-application-packages Hibernate 将无法工作,如果我放入它,我将无法部署 web 服务...

【问题讨论】:

    标签: java hibernate ejb weblogic-10.x java-web-start


    【解决方案1】:

    Weblogic 以某种方式保留了 EJB 的预编译版本,即使您进行了新的/更新部署。

    这适用于 wls 10.3.5: 在您的域的服务器目录中(例如,在我的情况下是 /home/myUser/apps/bea/domains/myDomain/servers/AdminServer)有一个子文件夹“cache/EJBCompilerCache”。停止您的 weblogic 实例并删除此子文件夹的内容。重新启动 weblogic,一切都会正常工作:-)

    【讨论】:

    • 好吧,既然它解决了别人的问题,我接受了这个老问题的答案;)
    【解决方案2】:

    我不确定这是否是同一个错误,但 Weblogic 10.3.0-2 中存在一个已知错误,它在将 JaxWS 与 EJB v 2.x 一起使用时会导致问题。但是,当我将 @WebService 注释放在 Weblogic 10.3.1 上的 EJB v 3.0 上时,我遇到了几乎相同的错误。该错误正在加载看起来像是 Weblogic 创建的假定生成的本地存根,并且它发生在 Weblogic 10.3.0、10.3.1、10.3.2 和 10.3.3 上。 (是的,我真的把它们都部署好了;)

    【讨论】:

    • 看来问题完全出在本地存根上 :( 我发现的唯一解决方案是创建一个不依赖于 Hibernate 的 WS,WS 实际上通过 JMS 队列发布内容由另一个使用 Hibernate 的项目处理。
    【解决方案3】:

    我在部署会话 bean 然后尝试将其转换为 Web 服务时遇到了这个问题。 WebLogic 似乎以某种方式缓存会话 bean。

    有几种解决方案:
    - 重命名 slsb。
    - 注释@Stateless 和@Remote 注释,部署应用程序,取消注释,再次重新部署。
    - 反弹 WebLogic。

    【讨论】:

    • 我没有运气......即使从头开始构建一个新的网络服务也会导致这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-04
    相关资源
    最近更新 更多