LINUX.ORG.RU

Использование CDI с Jersey 2 и Glassfish 4

 , , , ,


0

1

Проект на гитхабе (https://github.com/f1xmAn/simple-webapp). Это простейшее веб приложение, т.ч. вряд ли у кого-нибудь возникнут проблемы с пониманием того что я написал. CDI не работает, Glassfish 4 бросается эксепшенами:

org.glassfish.hk2.api.UnsatisfiedDependencyException: There was no object available for injection at Injectee(requiredType=GreetingsBean,parent=MainResource,qualifiers={}),position=0,optional=false,self=false,unqualified=null,939731755)

P.S. Комментарии отписавшихся ниже касаются первой версии поста.

★★★★★

Последнее исправление: f1xmAn (всего исправлений: 3)
Ответ на: комментарий от vertexua

Конечно, но тогда приложение даже не деплоится:

An error has occurred
Error occurred during deployment: Exception while loading the app : CDI deployment failure:Exception List with 4 exceptions: Exception 0 : org.jboss.weld.exceptions.DeploymentException: WELD-001408 Unsatisfied dependencies for type [Configuration] with qualifiers [@Default] at injection point [[BackedAnnotatedParameter] Parameter 1 of [BackedAnnotatedConstructor] @Inject public org.glassfish.jersey.message.filtering.CommonScopeProvider(Configuration, ServiceLocator)] 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.valida .... msg.seeServerLog

f1xmAn ★★★★★
() автор топика
Ответ на: комментарий от f1xmAn

Это баг в интеграции Jersey 2 и hk2.

Воркараунд: создать WEB-INF/beans.xml следующего содержания:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
       bean-discovery-mode="all">
</beans>

anonymous
()
Ответ на: комментарий от anonymous

С beans.xml приложение вообще не деплоится:

An error has occurred
Error occurred during deployment: Exception while loading the app : CDI deployment failure:Exception List with 4 exceptions: Exception 0 : org.jboss.weld.exceptions.DeploymentException: WELD-001408 Unsatisfied dependencies for type [Configuration] with qualifiers [@Default] at injection point [[BackedAnnotatedParameter] Parameter 1 of [BackedAnnotatedConstructor] @Inject public org.glassfish.jersey.message.filtering.CommonScopeProvider(Configuration, ServiceLocator)] 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.valida .... msg.seeServerLog

f1xmAn ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Убрал из зависимостей jersey и больше нету проблем с деплоем. Но зависимость не инжектится даже если использовать glassfish, поставляемый с netbeans 7.4. (Кстати, это 89-й билд — тот же, что у меня и был). Расшарил приложение на гитхабе, может я что-то все-таки делаю не так? https://github.com/f1xmAn/simple-webapp

f1xmAn ★★★★★
() автор топика
Ответ на: комментарий от f1xmAn

Шайтанство какое-то. Еле завелось, ёлы-палы.

1) Убрал @ApplicationPath и extends Application, вместо этого сделал отдельный класс-конфиг:

package org.fx.rs;

import javax.ws.rs.core.Application;

@javax.ws.rs.ApplicationPath("/")
public class ApplicationConfig extends Application {
}

2) Инжектить параметр в @GET нельзя, об этом даже варнинг вываливается в лог. Поменял на instance variable, заработало.

Похоже, это только в СтеклоРыбе 4 такие пляски с JAX-RS + CDI. Хорошо хоть главные индусы в курсе, должны зафиксить в следующих билдах.

И да, помню, работал с TomEE - эта связка работала абсолютно гладко. Но TomEE пока только Java EE 6, увы - никаких тебе стандартных вебсокетов, batch API, managed concurrency, JMS 2.0 и прочих плюшек «семёрки».

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.