java - 使用 Hibernate 在 Weblogic 10.3 上部署 Web 服务的 ClassNotFoundException

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

我有一个使用 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 服务...

最佳答案

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

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

关于java - 使用 Hibernate 在 Weblogic 10.3 上部署 Web 服务的 ClassNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3782278/

相关文章:

mysql - 使用同一实体将此关系映射到 2 个实体

java - 更快地将通过 HTTP 接收的数据存储到数据库(或文件系统)中

java - Java libjli 库有什么用?

Hibernate - 取回持久对象以获取生成的数据

java - 为自定义 TCP 协议(protocol)实现客户端

ejb - 如何从远程客户端访问实体 bean?

jboss - 在 JBoss 中实现 CORBA 接口(interface)

java - Bean 同时是 EJB 和 JX-RS 资源

java - 实现 session 跟踪时出现 NullPointerException

java - SELECT INTO 语句在 java 程序中不起作用