Jersey + Spring deployment failure on Glassfish : CDI issue

限于喜欢 提交于 2019-12-13 02:38:23

问题


I'm tryng to setup a Glassfish + Spring configuration. Please find below the relevant part of my pom :

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.glassfish.jersey</groupId>
            <artifactId>jersey-bom</artifactId>
            <version>${jersey.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>

    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet</artifactId>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>${servlet.version}</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>org.glassfish.jersey.ext</groupId>
        <artifactId>jersey-spring3</artifactId>
        <!--<scope>provided</scope>-->
    </dependency>


    <dependency>
        <groupId>org.eclipse.birt.runtime</groupId>
        <artifactId>org.eclipse.birt.runtime</artifactId>
        <version>4.2.0</version>
    </dependency>

    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-grizzly2-http</artifactId>
        <version>${jersey.version}</version>
        <scope>provided</scope>
    </dependency>


    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.9</version>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.easytesting</groupId>
        <artifactId>fest-assert-core</artifactId>
        <version>2.0M10</version>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>9.3-1100-jdbc41</version>
        <scope>test</scope>
    </dependency>

I have an issue with the following dependency :

 <dependency>
        <groupId>org.glassfish.jersey.ext</groupId>
        <artifactId>jersey-spring3</artifactId>
        <!--<scope>provided</scope>-->
    </dependency>

When I specify this dependency as provided, deployment is OK.. but SPring context isn't initialized. If I comment the provided element, then sometimes deployment is OK and the application is running fine, but sometimes deplyment will fail and I will get following WELD-001408 exception :

    [2014-12-16T10:21:07.618+0100] [glassfish 4.0] [SEVERE] [NCLS-CORE-00026] [javax.enterprise.system.core] [tid: _ThreadID=34 _ThreadName=admin-listener(3)] [timeMillis: 1418721667618] [levelValue: 1000] [[
  Exception during lifecycle processing
org.glassfish.deployment.common.DeploymentException: CDI deployment failure:WELD-001408 Unsatisfied dependencies for type [IterableProvider<DefaultTopicDistributionErrorService>] with qualifiers [@Default] at injection point [[BackedAnnotatedField] @Inject private org.glassfish.hk2.internal.DefaultTopicDistributionService.errorHandlers]
    at org.glassfish.weld.WeldDeployer.event(WeldDeployer.java:225)
    at org.glassfish.kernel.event.EventsImpl.send(EventsImpl.java:131)
Caused by: org.jboss.weld.exceptions.DeploymentException: WELD-001408 Unsatisfied dependencies for type [IterableProvider<DefaultTopicDistributionErrorService>] with qualifiers [@Default] at injection point [[BackedAnnotatedField] @Inject private org.glassfish.hk2.internal.DefaultTopicDistributionService.errorHandlers]
    at org.jboss.weld.bootstrap.Validator.validateInjectionPointForDeploymentProblems(Validator.java:403)
    at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:325)
    at org.jboss.weld.bootstrap.Validator.validateGeneralBean(Validator.java:177)
    at org.jboss.weld.bootstrap.Validator.validateRIBean(Validator.java:208)
    at org.jboss.weld.bootstrap.Validator.validateBean(Validator.java:519)
    at org.jboss.weld.bootstrap.Validator.validateBeans(Validator.java:505)
    at org.jboss.weld.bootstrap.Validator.validateDeployment(Validator.java:480)
    at org.jboss.weld.bootstrap.WeldBootstrap.validateBeans(WeldBootstrap.java:536)
    at org.glassfish.weld.WeldDeployer.event(WeldDeployer.java:216)
    ... 36 more
]]

I've seen many issues regarding this, but I still don't get what is the right way to go... What I want is a REST API built with Jersey, with the benefits of Spring CDI (ideally no xml spring config).

What should I modify in my POM to make it work ?

Thank you.


回答1:


You're probably victim of this issue: https://issues.jboss.org/browse/CDI-377

I'm just guessing since you didn't provide the version of Glassfish you are using. This issue has been fixed in CDI 1.2 which is included in Glassfish 4.1. So the best solution would be to update to this version.

If you can't or don't want to update you can use this workaround: http://weld.cdi-spec.org/documentation/#4



来源:https://stackoverflow.com/questions/27501393/jersey-spring-deployment-failure-on-glassfish-cdi-issue

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!