- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在从事一个部署在 中的项目。 Glassfish 4.1 .依赖注入(inject)是使用 CDI 进行的,我在尝试部署应用程序时遇到了问题。我得到的错误如下(通常我在代码中“翻译”我的类的名称,所以整个帖子都是用同一种语言,我现在不会这样做,所以我可以复制/粘贴并避免一些翻译打字错误):
服务器日志
org.glassfish.deployment.common.DeploymentException: CDI deployment failure:Exception List with 3 exceptions:
Exception 0 :
org.jboss.weld.exceptions.DeploymentException: WELD-001409: Ambiguous dependencies for type GestorUsuarios with qualifiers @Default
at injection point [BackedAnnotatedField] @Inject private ar.edu.unt.sigea.servicios.impl.GestorPersonasImpl.gestorUsuarios
at ar.edu.unt.sigea.servicios.impl.GestorPersonasImpl.gestorUsuarios(GestorPersonasImpl.java:0)
Possible dependencies:
- Session bean [class ar.edu.unt.sigea.servicios.impl.GestorUsuariosImpl with qualifiers [@Any @Default]; local interfaces are [GestorUsuarios],
- Managed Bean [class ar.edu.unt.sigea.servicios.impl.GestorUsuariosImpl] with qualifiers [@Any @Default]
...[Stack trace]...
Exception 0 :
org.jboss.weld.exceptions.DeploymentException: WELD-001409: Ambiguous dependencies for type RepositorioMenu with qualifiers @Default
at injection point [BackedAnnotatedField] @Inject private ar.edu.unt.sigea.servicios.impl.GestorUsuariosImpl.repositorioMenu
at ar.edu.unt.sigea.servicios.impl.GestorUsuariosImpl.repositorioMenu(GestorUsuariosImpl.java:0)
Possible dependencies:
- Managed Bean [class ar.edu.unt.sigea.repositorio.RepositorioMenu] with qualifiers [@Any @Default],
- Session bean [class ar.edu.unt.sigea.repositorio.RepositorioMenu with qualifiers [@Any @Default]; local interfaces are [RepositorioMenu]
...[Stack trace]...
Exception 0 :
org.jboss.weld.exceptions.DeploymentException: WELD-001409: Ambiguous dependencies for type RepositorioOperacion with qualifiers @Default
at injection point [BackedAnnotatedField] @Inject ar.edu.unt.sigea.repositorio.RepositorioMenu.repositorioOperacion
at ar.edu.unt.sigea.repositorio.RepositorioMenu.repositorioOperacion(RepositorioMenu.java:0)
Possible dependencies:
- Managed Bean [class ar.edu.unt.sigea.repositorio.RepositorioOperacion] with qualifiers [@Any @Default],
- Session bean [class ar.edu.unt.sigea.repositorio.RepositorioOperacion with qualifiers [@Any @Default]; local interfaces are [RepositorioOperacion]
(顺便说一句,我不知道为什么它说
3 exceptions
并且都显示为
Exception 0
)
@Stateless
public class GestorPersonasImpl implements GestorPersonas {
@Inject
private GestorUsuarios gestorUsuarios;
public GestorUsuarios getGestorUsuarios() {return gestorUsuarios;}
public void setGestorUsuarios(GestorUsuarios gestorUsuarios) {
this.gestorUsuarios = gestorUsuarios;
}
// Other fields and methods
}
@Stateless
public class GestorUsuariosImpl implements GestorUsuarios {
@Inject
private RepositorioMenu repositorioMenu;
public RepositorioMenu getRepositorioMenu() {return repositorioMenu;}
public void setRepositorioMenu(RepositorioMenu repositorioMenu) {
this.repositorioMenu = repositorioMenu;
}
// Other fields and methods
}
@Stateless
@LocalBean
public class RepositorioMenu extends RepositorioGenerico<Menu> {
@Inject
private RepositorioOperacion repositorioOperacion;
public RepositorioOperacion getRepositorioOperacion() {return repositorioOperacion;}
public void setRepositorioOperacion(RepositorioOperacion repositorioOperacion) {
this.repositorioOperacion = repositorioOperacion;
}
// Other fields and methods
}
@Dependent
@Stateless
@LocalBean
public class RepositorioOperacion extends RepositorioGenerico<Operacion> {
// This class doesn't have injection points
// just put it here for the reference made in the error message
}
父类
RepositorioGenerico<Menu>
只是一个具有一些通用方法与数据库交互的类和
Menu
是一个实体类。接口(interface)如下:
@Local
public interface GestorPersonas {
// methods definitions, implemented by GestorPersonasImpl
}
@Local
public interface GestorUsuarios {
// methods definitions, implemented by GestorUsuariosImpl
}
每个注入(inject)点我只有一个可注入(inject)类,所以我不明白为什么注入(inject)失败。我不知道是否需要有关我的代码的更多详细信息,所以问我,我会编辑帖子;我只写我认为需要的部分。
@Produces
使用了注释,AFAIK,在这种情况下我不需要它。
It is not annotated with an EJB component-defining annotation or declared as an EJB bean class in ejb-jar.xml.
javax.ejb
javadoc EJB 组件定义注释是以下之一:
@MessageDriven
,
@Stateful
,
@Stateless
或
@Singleton
.但是我见过其他使用 CDI 的项目使用 EJB(例如,
@Stateless
bean 被注入(inject)到其他地方)。另一方面,我一直在阅读
Beginning Java EE 7 by Antonio Goncalves那里说(第 2 章 - 上下文和依赖注入(inject)):
Anatomy of a CDI Bean
According to the CDI 1.1 specification, the container treats any class that satisfies the following conditions as a CDI Bean:
- It is not a non-static inner class,
- It is a concrete class, or is annotated @Decorator, and
- It has a default constructor with no parameters, or it declares a constructor annotated @Inject.
Then a bean can have an optional scope, an optional EL name, a set of interceptor bindings, and an optional life-cycle management.
@Stateless
或其他)进行依赖注入(inject)。
WELD-2.2.13.Final
CDI 实现(根据服务器日志消息
INFO: WELD-000900: 2.2.13 (Final)
)。
INFO: Portable JNDI names for EJB RepositorioUsuarioImpl: [java:global/sigea-ear-0.8-SNAPSHOT/sigea-model-0.8-SNAPSHOT/RepositorioUsuarioImpl, java:global/sigea-ear-0.8-SNAPSHOT/sigea-model-0.8-SNAPSHOT/RepositorioUsuarioImpl!ar.edu.unt.sigea.repositorio.RepositorioUsuario]
INFO: Portable JNDI names for EJB RepositorioAlumnoImpl: [java:global/sigea-ear-0.8-SNAPSHOT/sigea-model-0.8-SNAPSHOT/RepositorioAlumnoImpl, java:global/sigea-ear-0.8-SNAPSHOT/sigea-model-0.8-SNAPSHOT/RepositorioAlumnoImpl!ar.edu.unt.sigea.repositorio.RepositorioAlumno]
INFO: Portable JNDI names for EJB RepositorioMenuImpl: [java:global/sigea-ear-0.8-SNAPSHOT/sigea-model-0.8-SNAPSHOT/RepositorioMenuImpl, java:global/sigea-ear-0.8-SNAPSHOT/sigea-model-0.8-SNAPSHOT/RepositorioMenuImpl!ar.edu.unt.sigea.repositorio.RepositorioMenu]
INFO: Portable JNDI names for EJB GestorUsuariosImpl: [java:global/sigea-ear-0.8-SNAPSHOT/sigea-model-0.8-SNAPSHOT/GestorUsuariosImpl, java:global/sigea-ear-0.8-SNAPSHOT/sigea-model-0.8-SNAPSHOT/GestorUsuariosImpl!ar.edu.unt.sigea.servicios.GestorUsuarios]
INFO: Portable JNDI names for EJB GestorPersonasImpl: [java:global/sigea-ear-0.8-SNAPSHOT/sigea-model-0.8-SNAPSHOT/GestorPersonasImpl!ar.edu.unt.sigea.servicios.GestorPersonas, java:global/sigea-ear-0.8-SNAPSHOT/sigea-model-0.8-SNAPSHOT/GestorPersonasImpl]
INFO: Portable JNDI names for EJB RepositorioPersonaImpl: [java:global/sigea-ear-0.8-SNAPSHOT/sigea-model-0.8-SNAPSHOT/RepositorioPersonaImpl, java:global/sigea-ear-0.8-SNAPSHOT/sigea-model-0.8-SNAPSHOT/RepositorioPersonaImpl!ar.edu.unt.sigea.repositorio.RepositorioPersona]
INFO: Portable JNDI names for EJB RepositorioOperacionImpl: [java:global/sigea-ear-0.8-SNAPSHOT/sigea-model-0.8-SNAPSHOT/RepositorioOperacionImpl!ar.edu.unt.sigea.repositorio.RepositorioOperacion, java:global/sigea-ear-0.8-SNAPSHOT/sigea-model-0.8-SNAPSHOT/RepositorioOperacionImpl]
我不知道这是否会导致注入(inject)点出现错误,但听起来很可疑(而且我不知道如何更改)。它也出现在第一次尝试中,但正如我所说,它从未引起我的注意。现在日志和类
Fatal: Exception during lifecycle processing
org. glassfish.deployment.common.DeploymentException: CDI deployment failure:Exception List with 2 exceptions:
Exception 0 :
org.jboss.weld.exceptions.DeploymentException: WELD-001409: Ambiguous dependencies for type GestorPersonas with qualifiers @Default
at injection point [BackedAnnotatedField] @Inject ar.edu.unt.sigea.inicio.RegistroBean.gestorPersonas
at ar.edu.unt.sigea.inicio.RegistroBean.gestorPersonas(RegistroBean.java:0)
Possible dependencies:
- Session bean [class ar.edu.unt.sigea.servicios.impl.GestorPersonasImpl with qualifiers [@Any @Default]; local interfaces are [GestorPersonas],
- Managed Bean [class ar.edu.unt.sigea.servicios.impl.GestorPersonasImpl] with qualifiers [@Any @Default]
...[Stack trace]...
Exception 0 :
org.jboss.weld.exceptions.DeploymentException: WELD-001409: Ambiguous dependencies for type GestorUsuarios with qualifiers @Default
at injection point [BackedAnnotatedField] @Inject ar.edu.unt.sigea.inicio.SesionUsuarioBean.gestorUsuarios
at ar.edu.unt.sigea.inicio.SesionUsuarioBean.gestorUsuarios(SesionUsuarioBean.java:0)
Possible dependencies:
- Session bean [class ar.edu.unt.sigea.servicios.impl.GestorUsuariosImpl with qualifiers [@Any @Default]; local interfaces are [GestorUsuarios],
- Managed Bean [class ar.edu.unt.sigea.servicios.impl.GestorUsuariosImpl] with qualifiers [@Any @Default]
...[Stack trace]...
参与类(class)
@Named(value = "registroBean")
@ViewScoped
public class RegistroBean implements Serializable {
private static final long serialVersionUID = 2181909526300424451L;
@Inject
GestorPersonas gestorPersonas;
// fields, methods, etc
}
@Named(value = "sesionUsuarioBean")
@SessionScoped
public class SesionUsuarioBean implements Serializable {
private static final long serialVersionUID = 2938631472102116238L;
@Inject
GestorUsuarios gestorUsuarios;
// fields, methods, etc
}
注入(inject)的字段显示在主要部分中。
最佳答案
颠倒互联网2周后,我终于尝试部署在上野蝇 10.0.0 服务器,现在我的应用程序部署没有问题。所以我必须得出结论,这是 Glassfish 上的一个错误。 Pitty,因为我使用的是最新版本(4.1.1),它是基本的(我认为)作为 CDI 发现。希望Payara解决了这个问题,但我现在不会尝试。
我必须说:如果一个服务器被认为是“Java EE 7 兼容的”,那么它不应该被发布这种错误。
如果有人知道讨论论坛或知道不同服务器的一些基准测试结果,请将其注释掉。 为你感到羞耻 Glassfish
关于java - Glassfish 4.1 CDI WELD-001409 : Ambiguous dependencies,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38003014/
我想用 CDI 实现工厂模式。这里我们有一个商业案例示例: A client provides a string representing a type. Depending on this type
我在这里的部分问题是使用正确的词汇,所以我提前为这可能是一个简单的术语问题道歉。 假设我有一个 Person接口(interface)和 PersonBean实现该接口(interface)的类。 进
我想我了解 CDI 的工作原理,为了深入研究它,我想尝试将它与现实世界的示例一起使用。我被一件事困住了,我需要你的帮助才能让我理解。我非常感谢您在这方面的帮助。 我有自己的工作流框架,使用 Java
来自 Guice 背景,我知道可以使用范围从范围中播种对象值。 scope.seed(Key.get(SomeObject.class), someObject); 我想可以通过注册一个从 Abs
JSR-299 (CDI) 引入了资源的(不幸命名的)概念:http://docs.jboss.org/weld/reference/1.0.0/en-US/html/resources.html#d
规范说,当作用域的上下文即将被销毁时,CDI 容器会删除 SFSB。它如何准确地删除 EJB?它似乎没有调用带有@Remove 注释的方法。 @Stateful public class Custom
我有一个手动初始化的对象(遗留代码)。我想将此对象放入应用程序上下文,以使其通过 CDI 可用。 如何在不编写 CDI 扩展的情况下做到这一点? 最佳答案 使用生产者。制作一个 @Produces 您
我有一个关于在 Java EE 中拥有一个尽可能不耦合的系统的最佳实现的问题,问题是使用 CDI 事件还是 CDI 拦截器更好,显然对于安全性之类的事情来说拦截器,对于日志,例如根据具体情况的两者中的
我正在尝试做简单的事情。注塑合格String (或 File )在 CDI 中。 所以我有一个限定符: @Retention(RetentionPolicy.RUNTIME) @Target({FIE
使用 Wildfly 8.2.0.Final(我相信它使用 Weld 2.2),我在 Maven 多模块项目中用 2 个简单的类重现了这个问题。一个生成一个 javax.ws.rs.client.Cl
我正在使用 picketlink 对项目中的用户进行身份验证。我还创建了一个 @produces 注释方法,因此我可以在其他地方注入(inject)经过身份验证的用户。现在,我正在使用 envers,
是否可以在使用 new 关键字创建的类中获取 CDI bean 的实例?我们目前正在对一个旧应用程序进行一些改进,我们总是得到一个 ContextNotActiveException每次我们做 pro
我正在尝试在 WildFly 8.1.0.Final 上使用 CDI 运行 Liquibase 脚本,但出现此错误: Unsatisfied dependencies for type Resourc
在没有值的情况下使用 CDI @Named 有什么意义吗?难道这不就相当于一起使用@Qualifier和@Default吗? @Named public class GifFileEditor imp
我在 JBoss-7 环境中使用 ReastEasy,目前正在实现安全功能。我正在使用带有 SSL 连接的 HTTP Basic。添加和评估 header 参数很容易(感谢 Passing param
我正在开发一些应用程序,它由三层组成: 数据库访问层(JPA + Hibernate 作为提供者) 业务逻辑层 表示层 (JSF 2.0) 在开始之前,我已经阅读了 David Geary 和 Cay
在 CDI 中,我能够注入(inject)具有特定范围的 bean,即定义 bean 类的范围。但是,如果我创建没有任何作用域的 bean 类,并且在注入(inject)时为该 bean 赋予作用域,
我们想使用 Jglue 框架对我们的 CDI 应用程序进行单元测试。我们使用 gradle 进行构建。 我们准备了这样的东西: 1) 要测试的类: @Default public class Rate
我已经有一个 session 范围的 CDI bean,它保持当前登录的用户数据。 现在,从另一个请求范围内,我想访问这个 bean 以获取一些数据。我有一些操作要做,这取决于用户登录。这是我需要的唯
有一个包 A,并且包 A 中有一个类 MyClass。我们假设 pax-cdi+weld 已打开。 我可以在不使用@Inject和其他CDI注释的情况下获取MyClass内bundle A的BeanM
我是一名优秀的程序员,十分优秀!