CDI Les dépendances ambiguës
J'ai un @SessionScoped @Named
bean avec un @Producer
méthode pour un objet utilisateur:
@Named @SessionScoped
public class UserBean implements Serializable
{
//...
@Named @Produces @LoggedIn @SessionScoped
public MyUser getCurrentUser() {return user;}
}
Cela fonctionne très bien dans ma configuration (JBoss-7.1.1-Finale) et ça ne pose aucun problème d'accès de l'utilisateur aux champs de pages JSF avec #{currentUser.name}
. Le qualificatif est org.jboss.seam.security.annotations.LoggedIn
. Maintenant, je veux @Inject
cet utilisateur dans un champ dans un autre @Named
Bean:
@Named
public class FavBean implements Serializable
{
private @Inject @LoggedIn MyUser currentUser;
}
Cela me donne l'erreur:
org.jboss.weld.exceptions.DeploymentException:
WELD-001409 Ambiguous dependencies for type [MyUser] with qualifiers [@Default] at
injection point [[field] @Inject @LoggedIn test.FavBean.currentUser].
Possible dependencies [[Managed Bean [class test.ejb.MyUser] with qualifiers
[@Any @Default],
Producer Method [MyUser] with qualifiers [@Any @Default] declared as [[method]
@Named @Produces @LoggedIn @SessionScoped public test.UserBean.getCurrentUser()]]]
Je ne comprends pas la première dépendance Managed Bean [class test.ejb.MyUser]
Cette classe est une simple @Entity
et déployé dans une ebb.jar dans une OREILLE. Comme solution de contournement, je suis en train d'injecter de l' UserBean
obtenir de l'utilisateur à partir de là.
source d'informationauteur Thor
Vous devez vous connecter pour publier un commentaire.
C'est parce que le CDI recherche pour les haricots, par type et par votre entité et le producteur de retour de méthode du même type. C'est pourquoi il est ambigu.
Vous avez besoin de définir un nouveau qualificatif et l'annoter avec votre producteur méthode.
Ajouter cette annotation à votre producteur de la méthode:
J'avais le même problème, et j'ai eu de l'aide hors ligne. Mon problème est que lorsque mon service a été, il a été inclus dans un déployés oreille ET dans mon projet web. Il a été accidentelle, la duplication, la chute de l'un, et il va fonctionner que si c'est votre cas aussi.
ici sur l'image suivante, j'ai eu l'esb_khr à l'intérieur de la esb_khr_web, je l'ai enlevé. Dans eclipse: allez dans les propriétés et le déploiement de l'assemblée.
Je ne suis pas un expert mais j'ai eu un problème similaire, et je l'ai corrigé en plus simple, en annotant le bean lui-même avec
@Alternative
de sorte que le Producteur est favorisée. Peut-être que je suis pas certains effets secondaires, mais cela a fonctionné aussi loin que je pouvais voir /nécessaire.