2016-09-26 7 views
0

Я работаю над переносом приложения из реализации RestEasy на реализацию Jersey. Основная проблема, с которой я столкнулся, - в банках, необходимых для части CDI.
При использовании Resteasy, мы используем следующие 3 Resteasy связанные банкиМиграция приложения из RestEasy на Джерси

<dependency> 
     <groupId>org.jboss.resteasy</groupId> 
     <artifactId>resteasy-cdi</artifactId> 
     <version>3.0.8-FINAL</version> 
</dependency> 
<dependency> 
    <groupId>org.jboss.resteasy</groupId> 
    <artifactId>resteasy-jaxrs</artifactId> 
    <version>3.0.8-FINAL</version> 
</dependency> 
<dependency> 
    <groupId>org.jboss.resteasy</groupId> 
    <artifactId>resteasy-servlet-initializer</artifactId> 
    <version>3.0.8-FINAL</version> 
</dependency> 

Теперь, чтобы перенести его в Джерси, я использую следующие банки вместо Resteasy банки.

<dependency> 
    <groupId>org.glassfish.jersey.containers</groupId> 
    <artifactId>jersey-container-servlet</artifactId> 
    <version>2.22.1</version> 
</dependency> 
<dependency> 
    <groupId>org.glassfish.jersey.ext.cdi</groupId> 
    <artifactId>jersey-cdi1x-servlet</artifactId> 
    <version>2.22.1</version> 
</dependency> 
<dependency> 
    <groupId>javax.enterprise</groupId> 
    <artifactId>cdi-api</artifactId> 
    <version>1.1</version> 
</dependency> 

Теперь, когда я пытаюсь развернуть EAR на сервере JBOSS, я получаю следующую ошибку.

15:04:48,156 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-5) MSC000001: Failed to start service jboss.deployment.subunit."abc-ear.ear"."xyz-service-impl.war".POST_MODULE: org.jboss.msc.service.StartException in service jboss.deployment.subunit."abc-ear.ear"."xyz-service-impl.war".POST_MODULE: JBAS018733: Failed to process phase POST_MODULE of subdeployment "xyz-service-impl.war" of deployment "abc-ear.ear" 
at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:166) [jboss-as-server-7.4.0.Final-redhat-19.jar:7.4.0.Final-redhat-19] 
at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1980) [jboss-msc-1.1.5.Final-redhat-1.jar:1.1.5.Final-redhat-1] 
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1913) [jboss-msc-1.1.5.Final-redhat-1.jar:1.1.5.Final-redhat-1] 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_45] 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_45] 
at java.lang.Thread.run(Thread.java:744) [rt.jar:1.7.0_45] 
Caused by: org.jboss.as.server.deployment.DeploymentUnitProcessingException: JBAS016053: Service class org.glassfish.jersey.ext.cdi1x.internal.CdiComponentProvider didn't implement the javax.enterprise.inject.spi.Extension interface 
at org.jboss.as.weld.deployment.WeldPortableExtensions.tryRegisterExtension(WeldPortableExtensions.java:48) 
at org.jboss.as.weld.deployment.processors.WeldPortableExtensionProcessor.loadAttachments(WeldPortableExtensionProcessor.java:119) 
at org.jboss.as.weld.deployment.processors.WeldPortableExtensionProcessor.deploy(WeldPortableExtensionProcessor.java:79) 
at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:159) [jboss-as-server-7.4.0.Final-redhat-19.jar:7.4.0.Final-redhat-19] 
... 5 more 

Как вы можете видеть из трассировки стека, то ошибка, что я получаю org.glassfish.jersey.ext.cdi1x.internal.CdiComponentProvider didn't implement the javax.enterprise.inject.spi.Extension interface

Я скачал источник необходимой банку, чтобы увидеть, если класс в вопросе реализует этот интерфейс или нет. Ну, он реализует интерфейс расширения.

Прямо сейчас я не могу найти решение этой ошибки.
Я пробовал различные перестановки и комбинации различных jersey jars, но не смог найти исправление для этого.
У меня кончились идеи. Любая помощь могла бы быть полезна.

ответ

-1

Возможно, вы используете неправильные зависимости. Проверьте это: https://jersey.java.net/documentation/latest/modules-and-dependencies.html

+0

Это всего лишь смутный ответ. Эта страница содержит множество зависимостей. Более того, я использовал зависимости, перечисленные на этой странице, которые я считал наиболее логичными. Я ищу что-то точное в сравнении с тем, что вы упомянули. –

1

Недавно я выполнил совершенно аналогичную миграцию (RESTEasy 3.0.8.Final -> Jersey 2.23.1), но моя миграция также включала отказ от сервера WildFly. Так что это довольно большая разница.

Вы не указали какую-либо информацию по используемой версии Weld, поэтому, пожалуйста, сделайте это, так как это очень важно здесь.

Во всяком случае, две подсказки с моей стороны, прежде чем вы будете обновлять свой вопрос:

  • Существует большая вероятность того, что ваша ошибка вызвана развертывания EAR. Поскольку CDI и EAR-архивы иногда не хорошо сочетаются друг с другом. Можете ли вы проверить, что произойдет, если вы измените свою упаковку на * .war?
  • Если у вас нет очень, очень хорошей причиной для перехода на не встроенную реализацию JAX-RS при использовании сервера приложений Java EE и CDI, пожалуйста, не делайте этого. Это сложная задача.

Ps. JFYI количество проблем с серверами Weld и App, с которыми я столкнулся, заставило меня отказаться от них, где только можно.

UPDATE

Вы сказали, что вы используете Weld 1.1.23.FINAL - это очень важная информация. Интеграция с Джерси + Weld сильно изменилась с «Джерси» 2.15. Лично я не смог заставить его работать без новой версии Weld (2.3.5 в моем случае) - вероятно, потому, что эта комбинация не поддерживается. В вашем случае, поскольку вы используете чрезвычайно старую версию Weld, я бы посоветовал вам попробовать не больше Jersey 2.14.

В Джерси 2.14 необходимые зависимости были разными.Пожалуйста, удалите jersey-cdi1x-servlet и попробуйте вместо этого:

<dependency> 
    <groupId>org.glassfish.jersey.containers.glassfish</groupId> 
    <artifactId>jersey-gf-cdi</artifactId> 
    <version>2.14</version> 
</dependency> 
<dependency> 
    <groupId>org.glassfish.jersey.containers.glassfish</groupId> 
    <artifactId>jersey-gf-cdi-ban-custom-hk2-binding</artifactId> 
    <version>2.14</version> 
</dependency> 

<!-- is it needed for you? 
<dependency> 
    <groupId>org.jboss.weld.servlet</groupId> 
    <artifactId>weld-servlet-core</artifactId> 
</dependency> 
--> 

КСТАТИ: могу ли я знать, почему вы изменяете реализацию JAX-RS в JBoss?

+0

Спасибо за ваш ответ. Я использую JBOSS EAP 6.3. Таким образом, версия WELD, которую он использует, - 1.1.23.FINAL. Я получил эту информацию из этой [ссылки] (https://access.redhat.com/articles/112673#EAP_6). Также я не могу развернуть его как самостоятельную войну. У моего проекта есть куча войн. Одна из них - это ВОЙНА, которая дает мне проблему. Эта WAR использует структуру развертывания JBOSS, присутствующую в модуле EAR. –

+0

Я обновил свой ответ. Пожалуйста, попробуйте. –

+0

Я попробовал с новым набором банок, которые вы предложили, но я все еще получаю ту же ошибку. –

0

В прошлом месяце я перешел к последним версиям, и это работает для меня. попробуйте это.

<properties> 
    <version.jersey>2.23.2</version.jersey> 
    <version.glassfish>2.4.0</version.glassfish> 
</properties> 

<dependencies> 
    <dependency> 
     <groupId>org.glassfish.hk2.external</groupId> 
     <artifactId>asm-all-repackaged</artifactId> 
     <version>${version.glassfish}</version> 
    </dependency> 

    <dependency> 
     <artifactId>hk2-utils</artifactId> 
     <groupId>org.glassfish.hk2</groupId> 
     <version>${version.glassfish}</version> 
     <exclusions> 
      <exclusion> 
       <artifactId>javax.inject</artifactId> 
       <groupId>javax.inject</groupId> 
      </exclusion> 
     </exclusions> 
    </dependency> 

    <dependency> 
     <groupId>javax.annotation</groupId> 
     <artifactId>javax.annotation-api</artifactId> 
     <version>1.2</version> 
    </dependency> 

    <dependency> 
     <groupId>javax.ws.rs</groupId> 
     <artifactId>javax.ws.rs-api</artifactId> 
     <version>2.0.1</version> 
    </dependency> 

    <dependency> 
     <groupId>javax.xml.bind</groupId> 
     <artifactId>jaxb-api</artifactId> 
     <version>2.2.12</version> 
    </dependency> 

    <dependency> 
     <groupId>org.glassfish.jersey.core</groupId> 
     <artifactId>jersey-common</artifactId> 
     <version>${version.jersey}</version> 
     <exclusions> 
      <exclusion> 
       <groupId>org.glassfish.hk2</groupId> 
       <artifactId>osgi-resource-locator</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>org.glassfish.hk2.external</groupId> 
       <artifactId>aopalliance-repackaged</artifactId> 
      </exclusion>        
     </exclusions> 
    </dependency> 
    <dependency> 
     <groupId>org.glassfish.jersey.containers</groupId> 
     <artifactId>jersey-container-servlet</artifactId> 
     <version>${version.jersey}</version> 
    </dependency> 

    <dependency> 
     <groupId>org.glassfish.jersey.media</groupId> 
     <artifactId>jersey-media-multipart</artifactId> 
     <version>${version.jersey}</version> 
    </dependency> 
</dependencies> 
+0

Но вы не используете интерфейс CDI, но HK2. И это имеет огромное значение. –

+0

А я вижу. спасибо за указание. +1 к вашему ответу. – ulab

+0

Спасибо, но мой ответ может ничего не решить :) Это скорее ключ. –

Смежные вопросы