使用Hibernate在Weblogic 10.3上部署webservice的ClassNotFoundException

时间:2010-09-23 20:25:25

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

我有一个实现JWS Webservice的EJB项目,如下所示:

@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服务...

3 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:2)

我不确定这是否是同一个错误,但是Weblogic 10.3.0-2中存在一个已知的错误,当使用带有EJB v 2.x的JaxWS时会导致问题。但是当我在Weblogic 10.3.1上的EJB v 3.0上放置@WebService注释时,我得到了几乎相同的错误。错误是加载看起来像Weblogic创建的所谓生成的本地存根,以及它在Weblogic 10.3.0,10.3.1,10.3.2和10.3.3上发生的错误。 (是的,我确实已经将它们全部部署了;)

答案 2 :(得分:0)

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

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