Я пытаюсь внедрить класс в мое приложение JAX-RS на Джерси, используя HK2, работающий на GlassFish.
Но когда я пытаюсь запустить свое приложение, я получаю эту ошибку:
com.sun.enterprise.admin.remote.RemoteFailureException: ошибка произошла во время развертывания: исключение при загрузке приложения: java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: org.apache.catalinaИсключение(UsersDAO)
Поиск в Интернете Я обнаружил, что CDI в GlassFish «конкурирует» с HK2 за DI, поэтому, чтобы исправить это, я должен добавить этот jarна мой путь к классу (я использую Gradle):
implementation ("org.glassfish.jersey.containers.glassfish:jersey-gf-cdi:2.14")
Но это не работает, это просто дает мнееще одна загадочная ошибка:
java.io.IOException: com.sun.enterprise.admin.remote.RemoteFailureException: во время развертывания возникла ошибка: исключение при загрузке приложения: сбой развертывания CDI: WELD-001409:Неоднозначные зависимости для типа WebAppExceptionHolder с квалификаторами @Default в точке внедрения [UnbackedAnnotatedField] @Inject org.glassfish.jersey.gf.cdi.internal.WebAppExceptionInterceptor.store в org.glassfish.jersey.gf.cdi.internal.WinterAppExEx.Exception.in.java: 0) Возможные зависимости: - org.glassfish.jersey.ext.cdi1x.internal.CdiComponentProvider$Hk2Bean@60e01611, - Управляемый компонент [класс org.glassfish.jersey.gf.cdi.internal.WebAppExceptionHolder] с квалификаторами @Любая @Default].Пожалуйста, смотрите server.log для получения более подробной информации.
Вот моя AbstractBinder
реализация:
public class UsersDependencyBinder extends AbstractBinder {
private static final Logger LOG = LoggerFactory.getLogger(UsersDependencyBinder.class);
@Override
protected void configure() {
try {
// Acts as a Singleton
bind(new UsersDAO(new CachedDbConnector()));
} catch (ClassNotFoundException e) {
LOG.error("Error registering the DB Driver Manager", e);
}
}
}
И я регистрирую его, используя register(new UsersDependencyBinder());
.
Iя не использую web.xml
, я хочу быть чистым от *.xml
, используя только аннотации.