2

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

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

4

3 回答 3

6

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

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

于 2012-04-26T12:56:45.760 回答
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 上。(是的,我真的把它们都部署好了;)

于 2011-01-04T17:47:23.637 回答
0

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

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

于 2010-11-01T18:48:50.010 回答