我试图使用在GlassFish上运行的HK2将类注入到我的Jersey JAX-RS应用程序中。
但是当我尝试运行我的应用程序时,出现此错误:
com.sun.enterprise.admin.remote.RemoteFailureException:部署期间发生错误:加载应用程序时发生异常:java.lang.IllegalStateException:ContainerBase.addChild:开始:org.apache.catalina.LifecycleException:org.apache。 catalina.LifecycleException:org.jboss.weld.exceptions.DeploymentException:WELD-001408:带限定符@Default的UsersDAO类型的依赖关系未满足 在注入点[BackedAnnotatedParameter] [BackedAnnotatedConstructor]的参数1 @Inject public com.myapp.users.resources.UserResource(UsersDAO)
Searching the web我发现GlassFish中的CDI正在与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.WebAppExceptionInterceptor.store(WebAppExceptionInterceptor.java:0) 可能的依赖关系: -org.glassfish.jersey.ext.cdi1x.internal.CdiComponentProvider$Hk2Bean@60e01611, -具有限定符[@Any @Default]的托管Bean [类org.glassfish.jersey.gf.cdi.internal.WebAppExceptionHolder] 。有关更多详细信息,请参阅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());
注册它。
我没有使用任何web.xml
,我想只使用注释来清除*.xml
。