我想注入类为使用HK2我的球衣JAX-RS应用程序,在GlassFish运行。
但是,当我尝试运行我的应用程序我得到这个错误:
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:用于与限定符类型UsersDAO不合格依赖@default在注射点[BackedAnnotatedParameter] [BackedAnnotatedConstructor] @注入公共com.myapp.users.resources.UserResource的参数1(UsersDAO )
在网上搜索我发现CDI在GlassFish中被“竞合”与HK2为DI,所以为了解决这个问题,我要这个jar添加到我的类路径(我使用的摇篮):
implementation ("org.glassfish.jersey.containers.glassfish:jersey-gf-cdi:2.14")
但是,这是行不通的,它只是给我的另一个含义模糊的错误:
java.io.IOException的:加载应用程序异常::CDI部署失败:WELD-001409:部署过程中发生错误:com.sun.enterprise.admin.remote.RemoteFailureException歧义依赖性与限定符类型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, - Managed Bean的[类org.glassfish.jersey.gf.cdi.internal.WebAppExceptionHolder]与预选赛[@Any @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());
。
我没有使用任何web.xml
,我想是干净的*.xml
只用注释。