无法解析引用本地ejb

编程入门 行业动态 更新时间:2024-10-25 07:33:28
无法解析引用本地ejb-ref(Cannot resolve reference Local ejb-ref) java

我在编写EJB应用程序时遇到了问题。 我搜索一个解决方案,但我仍然在使用Glassfish4的intelliJ中遇到同样的问题:“无法解析引用[Local ejb-ref name = EJB.AdminEJB,Local 3.x interface = Interface.AdminInterface,ejb-link = null,lookup =, mappedName =,jndi-name =,refType = Session]因为应用程序中有[2] ejbs,接口为Interface.AdminInterface。“ 请原谅我的英语,我是法国人。

包接口中的AdminInterface

@Local public interface AdminInterface { public void creerParieur(Parieur parieur); public void supprimerParieur (String login); public void creerBookmaker(Bookmaker bookmaker); public void supprimerBookmaker (String login); public void modifParieur (Parieur parieur); public void modifBookmaker (Bookmaker bookmaker); public void ajouterCote(Cote cote); public void ajouterMatch (Match match); public List<Cote> listeCote(String log); public List<Match> listeMatch(); public List<Parieur> listeParieur(); public List<Bookmaker> listeBookmaker(); public Parieur rechercheParieur(String id); public Bookmaker rechercheBookmaker (String id); public void setLogin(String login); public String getLogin();

}

程序包EJB中的AdminEJB

@Stateless public class AdminEJB implements AdminInterface{ String login; String mdp; @PersistenceContext(unitName = "NewPersistenceUnit") EntityManager em; public AdminEJB(){} public String getLogin(){ return login; } public void setLogin(String login){ this.login=login; } public String getMdp(){ return mdp; } public void setMdp(String mdp){ this.mdp=mdp; } public void creerParieur(Parieur parieur){ em.persist(parieur); } public void supprimerParieur(String login){ Parieur parieur=new Parieur (); Query req=em.createQuery("select OBJECT(P) from Parieur P where P.login=:login"); req.setParameter("login", login); parieur=(Parieur)req.getSingleResult(); em.remove(parieur); } public void modifParieur(Parieur parieur){ em.merge(parieur); } public List<Parieur> listeParieur(){ Query req=em.createQuery("select OBJECT(P) from Parieur P"); return req.getResultList(); } public void creerBookmaker(Bookmaker bookmaker){ em.persist(bookmaker); } public void supprimerBookmaker(String login){ Bookmaker bookmaker; Query req=em.createQuery("select OBJECT(B) from Bookmaker B where B.pseudo=:login"); req.setParameter("login", login); bookmaker=(Bookmaker)req.getSingleResult(); em.remove(bookmaker); } public void modifBookmaker(Bookmaker bookmaker){ em.merge(bookmaker); } public List<Bookmaker> listeBookmaker(){ Query req=em.createQuery("select OBJECT(B) from Bookmaker B"); return req.getResultList(); } public List<Match> listeMatch(){ Query req=em.createQuery("select OBJECT(M) from Match M"); return req.getResultList(); } public Bookmaker rechercheBookmaker(String id){ return em.find(Bookmaker.class,id); } public Parieur rechercheParieur(String id){ return em.find(Parieur.class,id); } public void ajouterCote (Cote cote){ em.persist(cote); } public void ajouterMatch (Match match){ em.persist(match); } public List<Cote> listeCote(String log){ Bookmaker bookmaker = new Bookmaker(); bookmaker = this.rechercheBookmaker(log); Query req = em.createQuery("select OBJECT(C) from Cote C where C.bookmaker=:bookmaker"); req.setParameter("bookmaker", bookmaker); return req.getResultList(); }

}

在ManagedBean包中的ControlerBean

@ManagedBean @RequestScoped public class ControlerBean implements Serializable{ Bookmaker bookmaker; Pari pari; Parieur parieur; Match match; Cote cote; String nomObjetP; String nomEnP; String pseudoUser; String pwdUser; @EJB private AdminInterface admin; public ControlerBean(){ bookmaker = new Bookmaker(); parieur = new Parieur(); cote = new Cote(); match= new Match(); pari= new Pari(); } public String getNomObjetP() { return nomObjetP; } public void setNomObjetP(String nomObjetP) { this.nomObjetP = nomObjetP; } public String getNomEnP() { return nomEnP; } public void setNomEnP(String nomEnP) { this.nomEnP = nomEnP; } public Pari getPari() { return pari; } public void setPari(Pari pari){ this.pari=pari; } public Bookmaker getBookmaker() { return bookmaker; } public void setBookmaker(Bookmaker bookmaker) { this.bookmaker = bookmaker; } public Parieur getParieur() { return parieur; } public void setParieur(Parieur parieur) { this.parieur = parieur; } public Cote getCote() { return cote; } public void setCote(Cote cote) { this.cote = cote; } public Match getMatch(){ return match; } public void setMatch(Match match){ this.match=match; } public AdminInterface getAdmin() { return admin; } public void setAdmin(AdminInterface admin) { this.admin = admin; } public String getPseudoUser() { return pseudoUser; } public void setPseudoUser(String pseudoUser) { this.pseudoUser = pseudoUser; } public String getPwdUser() { return pwdUser; } public void setPwdUser(String pwdUser) { this.pwdUser = pwdUser; } public String addParieur(){ parieur.setArgent(1000); admin.creerParieur(parieur); return "OK"; } public String modifParieur(){ admin.modifParieur(parieur); return "OK"; } public String supprParieur(){ admin.supprimerParieur(parieur.getLogin()); return "OK"; } public String addBookmaker(){ admin.creerBookmaker(bookmaker); return "OK"; } public String modifBookmaker(){ admin.modifBookmaker(bookmaker); return "OK"; } public String supprBookmaker(){ admin.supprimerBookmaker(bookmaker.getPseudo()); return "OK"; } public List<Bookmaker> listeBookmaker(){ return admin.listeBookmaker(); } public List<Parieur> listeParieur(){ return admin.listeParieur(); } public List<Match> listeMatch(){ return admin.listeMatch(); } public String addCote(){ pseudoUser = admin.getLogin(); cote.setBookmaker(admin.rechercheBookmaker(pseudoUser)); admin.ajouterCote(cote); return "OK"; } public String addMatch(){ admin.ajouterMatch(getMatch()); return "OK"; }

}

非常感谢您的帮助

I have an issue in programming an EJB application. I search a solution but I still have the same problem in intelliJ with Glassfish4 : " Cannot resolve reference [Local ejb-ref name=EJB.AdminEJB,Local 3.x interface =Interface.AdminInterface,ejb-link=null,lookup=,mappedName=,jndi-name=,refType=Session] because there are [2] ejbs in the application with interface Interface.AdminInterface." And excuse-me for my english, I'm french.

AdminInterface in a package Interface

@Local public interface AdminInterface { public void creerParieur(Parieur parieur); public void supprimerParieur (String login); public void creerBookmaker(Bookmaker bookmaker); public void supprimerBookmaker (String login); public void modifParieur (Parieur parieur); public void modifBookmaker (Bookmaker bookmaker); public void ajouterCote(Cote cote); public void ajouterMatch (Match match); public List<Cote> listeCote(String log); public List<Match> listeMatch(); public List<Parieur> listeParieur(); public List<Bookmaker> listeBookmaker(); public Parieur rechercheParieur(String id); public Bookmaker rechercheBookmaker (String id); public void setLogin(String login); public String getLogin();

}

AdminEJB in a package EJB

@Stateless public class AdminEJB implements AdminInterface{ String login; String mdp; @PersistenceContext(unitName = "NewPersistenceUnit") EntityManager em; public AdminEJB(){} public String getLogin(){ return login; } public void setLogin(String login){ this.login=login; } public String getMdp(){ return mdp; } public void setMdp(String mdp){ this.mdp=mdp; } public void creerParieur(Parieur parieur){ em.persist(parieur); } public void supprimerParieur(String login){ Parieur parieur=new Parieur (); Query req=em.createQuery("select OBJECT(P) from Parieur P where P.login=:login"); req.setParameter("login", login); parieur=(Parieur)req.getSingleResult(); em.remove(parieur); } public void modifParieur(Parieur parieur){ em.merge(parieur); } public List<Parieur> listeParieur(){ Query req=em.createQuery("select OBJECT(P) from Parieur P"); return req.getResultList(); } public void creerBookmaker(Bookmaker bookmaker){ em.persist(bookmaker); } public void supprimerBookmaker(String login){ Bookmaker bookmaker; Query req=em.createQuery("select OBJECT(B) from Bookmaker B where B.pseudo=:login"); req.setParameter("login", login); bookmaker=(Bookmaker)req.getSingleResult(); em.remove(bookmaker); } public void modifBookmaker(Bookmaker bookmaker){ em.merge(bookmaker); } public List<Bookmaker> listeBookmaker(){ Query req=em.createQuery("select OBJECT(B) from Bookmaker B"); return req.getResultList(); } public List<Match> listeMatch(){ Query req=em.createQuery("select OBJECT(M) from Match M"); return req.getResultList(); } public Bookmaker rechercheBookmaker(String id){ return em.find(Bookmaker.class,id); } public Parieur rechercheParieur(String id){ return em.find(Parieur.class,id); } public void ajouterCote (Cote cote){ em.persist(cote); } public void ajouterMatch (Match match){ em.persist(match); } public List<Cote> listeCote(String log){ Bookmaker bookmaker = new Bookmaker(); bookmaker = this.rechercheBookmaker(log); Query req = em.createQuery("select OBJECT(C) from Cote C where C.bookmaker=:bookmaker"); req.setParameter("bookmaker", bookmaker); return req.getResultList(); }

}

ControlerBean in a package ManagedBean

@ManagedBean @RequestScoped public class ControlerBean implements Serializable{ Bookmaker bookmaker; Pari pari; Parieur parieur; Match match; Cote cote; String nomObjetP; String nomEnP; String pseudoUser; String pwdUser; @EJB private AdminInterface admin; public ControlerBean(){ bookmaker = new Bookmaker(); parieur = new Parieur(); cote = new Cote(); match= new Match(); pari= new Pari(); } public String getNomObjetP() { return nomObjetP; } public void setNomObjetP(String nomObjetP) { this.nomObjetP = nomObjetP; } public String getNomEnP() { return nomEnP; } public void setNomEnP(String nomEnP) { this.nomEnP = nomEnP; } public Pari getPari() { return pari; } public void setPari(Pari pari){ this.pari=pari; } public Bookmaker getBookmaker() { return bookmaker; } public void setBookmaker(Bookmaker bookmaker) { this.bookmaker = bookmaker; } public Parieur getParieur() { return parieur; } public void setParieur(Parieur parieur) { this.parieur = parieur; } public Cote getCote() { return cote; } public void setCote(Cote cote) { this.cote = cote; } public Match getMatch(){ return match; } public void setMatch(Match match){ this.match=match; } public AdminInterface getAdmin() { return admin; } public void setAdmin(AdminInterface admin) { this.admin = admin; } public String getPseudoUser() { return pseudoUser; } public void setPseudoUser(String pseudoUser) { this.pseudoUser = pseudoUser; } public String getPwdUser() { return pwdUser; } public void setPwdUser(String pwdUser) { this.pwdUser = pwdUser; } public String addParieur(){ parieur.setArgent(1000); admin.creerParieur(parieur); return "OK"; } public String modifParieur(){ admin.modifParieur(parieur); return "OK"; } public String supprParieur(){ admin.supprimerParieur(parieur.getLogin()); return "OK"; } public String addBookmaker(){ admin.creerBookmaker(bookmaker); return "OK"; } public String modifBookmaker(){ admin.modifBookmaker(bookmaker); return "OK"; } public String supprBookmaker(){ admin.supprimerBookmaker(bookmaker.getPseudo()); return "OK"; } public List<Bookmaker> listeBookmaker(){ return admin.listeBookmaker(); } public List<Parieur> listeParieur(){ return admin.listeParieur(); } public List<Match> listeMatch(){ return admin.listeMatch(); } public String addCote(){ pseudoUser = admin.getLogin(); cote.setBookmaker(admin.rechercheBookmaker(pseudoUser)); admin.ajouterCote(cote); return "OK"; } public String addMatch(){ admin.ajouterMatch(getMatch()); return "OK"; }

}

Thank's very much for any help

最满意答案

如果有两个EJB实现相同的接口,则需要对它们进行区分,以便容器知道要注入哪个EJB。

将@Stateless注释中的name参数添加到实现相同接口的所有bean。 在@EJB注释中,使用beanName参数注入适当的会话bean实现。

@Stateless(name="AdminEJB1") public class AdminEJB implements AdminInterface { .... } @EJB(beanName = "AdminEJB1") private AdminInterface myAdminEjb;

您还可以跳过@Stateless注释中的name参数,然后使用实现类的名称作为@EJB注释中的beanName参数。

@Stateless public class AdminEJB implements AdminInterface { .... } @EJB(beanName = "AdminEJB") private AdminInterface myAdminEjb;

When you have two EJBs implementing the same interface they need to be differentiated so that the container knows which one to inject.

Add the name parameter in the @Stateless annotation to all beans implementing the same interface. In the @EJB annotation, use the beanName parameter to inject the appropriate session bean implementation.

@Stateless(name="AdminEJB1") public class AdminEJB implements AdminInterface { .... } @EJB(beanName = "AdminEJB1") private AdminInterface myAdminEjb;

You can also skip the name parameter in the @Stateless annotation and then use the name of the implementing class as the beanName parameter in the @EJB annotation.

@Stateless public class AdminEJB implements AdminInterface { .... } @EJB(beanName = "AdminEJB") private AdminInterface myAdminEjb;

更多推荐

本文发布于:2023-08-06 16:41:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1454130.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:ejb

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!