问题更新到Glassfish 4.1

时间:2014-09-23 16:58:47

标签: java glassfish

我最近更新了一个测试服务器以使用Glassfish 4.1。在此更新后,我遇到了将Web Services部署到Glassfish的问题。部署应用程序时,我收到消息“部署期间发生错误:加载应用程序时出现异常:java.lang.ClassNotFoundException:org.hibernate.validator.internal.cdi.interceptor.ValidationInterceptor”(请参阅​​下面的完整堆栈跟踪)。

我原本以为这个问题围绕着我们使用的自定义Guava jar(添加了一个beans.xml来规避兼容性问题)。我使用最新的Guava版本(18)重新构建了应用程序,并且仍然遇到了部署到Glassfish 4.1的相同问题。使用最新的Guava版本将应用程序部署到Glassfish 4.0没有问题。

[2014-09-23T10:15:37.589-0600] [glassfish 4.1] [SEVERE] [] [javax.enterprise.system.tools.deployment.common] [tid: _ThreadID=177 _ThreadName=admin-listener(25)] [timeMillis: 14114
88937589] [levelValue: 1000] [[
  Exception while invoking class org.glassfish.ejb.startup.EjbApplication start method
java.lang.RuntimeException: java.lang.ClassNotFoundException: org.hibernate.validator.internal.cdi.interceptor.ValidationInterceptor
        at com.sun.ejb.containers.BaseContainer.setStartedState(BaseContainer.java:962)
        at org.glassfish.ejb.startup.EjbApplication.markAllContainersAsStarted(EjbApplication.java:140)
        at org.glassfish.ejb.startup.EjbApplication.start(EjbApplication.java:152)
        at org.glassfish.internal.data.EngineRef.start(EngineRef.java:122)
        at org.glassfish.internal.data.ModuleInfo.start(ModuleInfo.java:291)
        at org.glassfish.internal.data.ApplicationInfo.start(ApplicationInfo.java:352)
        at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:500)
        at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:219)
        ....
        at java.lang.Thread.run(Thread.java:744)
Caused by: java.lang.ClassNotFoundException: org.hibernate.validator.internal.cdi.interceptor.ValidationInterceptor
        at org.glassfish.web.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1783)
        at org.glassfish.web.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1633)
        at com.sun.ejb.containers.interceptors.InterceptorManager.buildEjbInterceptorChain(InterceptorManager.java:431)
        at com.sun.ejb.containers.interceptors.InterceptorManager.<init>(InterceptorManager.java:131)
        at com.sun.ejb.containers.BaseContainer.initializeInterceptorManager(BaseContainer.java:3396)
        at com.sun.ejb.containers.BaseContainer.setStartedState(BaseContainer.java:950)
        ... 83 more

2 个答案:

答案 0 :(得分:1)

这似乎是一个错误:

https://java.net/jira/browse/HK2-233 https://java.net/jira/browse/JERSEY-2661

不幸的是,Oracle并没有发布GlassFish补丁,只发布了主要版本(AFAIK)。另一种方法是使用the GlassFish fork "Payara"

您可以应用此标准符合性解决方法:

private <T> boolean beanIsValid(final T bean) {
    final Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
    final Set<ConstraintViolation<T>> constraintViolations = validator.validate(bean);

    return constraintViolations.isEmpty();
}

答案 1 :(得分:0)

我在做一些老练习时遇到了完全相同的问题。我只是使用Glassfish 4.1.2,它为我解决了这个问题。

https://download.java.net/glassfish/4.1.2/release/glassfish-4.1.2.zip