2017-09-16 104 views
0

我想创建一个EJB Web项目与蜻蜓和数据库连接来坚持我的类“文章”。但是,当我开始我的应用程序得到错误EJB注入不满意的依赖关系

产生的原因:org.jboss.weld.exceptions.DeploymentException:WELD-001408: 与于注射点预选赛@default 型ArticleDAO不满意的依赖[BackedAnnotatedField] @Inject在serrvices.Customer.dao(Customer.java:0)私人 serrvices.Customer.dao

此异常由我@Inject声明引起的,但我不能找出问题出在哪里。我搜索已经在网络和一个放置在beans.xml中的META-INF文件夹:

豆发现模式= “所有”>

,但没有成功。这里是我的相关类:

Customer.java

package serrvices; 

import javax.ejb.EJB; 
import javax.ejb.Stateless; 
import javax.inject.Inject; 
import javax.ws.rs.Consumes; 
import javax.ws.rs.GET; 
import javax.ws.rs.POST; 
import javax.ws.rs.Path; 
import javax.ws.rs.Produces; 
import javax.ws.rs.core.MediaType; 

import beans.CustomerManager; 


@Path("customer") 
public class Customer { 

    @EJB 
    private CustomerManager manager; 


    /* 
    @GET 
    @Produces(MediaType.TEXT_HTML) 
    public String getCustomerCount() { 
     return "<h3>Customer Count: " + manager.getCustomerCount() + "</h3>"; 
    } 
    */ 

    @Inject 
    private ArticleDAO dao; 




    @GET 
    //@Consumes({"application/xml", "application/json"}) 
    public void insert() 
    { 
     ArticleDTO userr = new ArticleDTO(999,"XXX",99); 
     System.out.println("insert: " + userr); 

     dao.createArticle(userr.getDescription(), userr.getPrice()); 
    } 

} 

ArticleDAO

包serrvices;

import java.util.List; 


public interface ArticleDAO 
{ 
    Article insert(Article user); 
    Article update(Article user); 
    void delete(Article user); 

    Article findById(int id); 
    List<Article> findAll(); 

    Article createArticle(String description, long price); 
} 

ArticleDAOImpl

package serrvices; 

import java.util.List; 

import javax.ejb.LocalBean; 
import javax.persistence.EntityManager; 
import javax.persistence.PersistenceContext; 



class ArticleDAOImpl 
    implements ArticleDAO 
{ 
    //private final Logger LOG = Logger.getLogger(ArticleDAOImpl.class); 

    @PersistenceContext 
    private EntityManager em; 


    /* 
    * CRUD Operations 
    */ 

    @Override 
    public Article insert(Article article) 
    { 
     System.out.println("insert(" + article + ")"); 
     em.persist(article); 
     return article; 
    } 

    @Override 
    public Article update(Article article) 
    { 
     System.out.println("update(" + article + ")"); 
     return em.merge(article); 
    } 

    @Override 
    public void delete(Article article) 
    { 
     System.out.println("delete(" + article + ")"); 
     em.remove(article); 
    } 

    @Override 
    public Article findById(int id) 
    { 
     System.out.println("findById(" + id + ")"); 
     return em.find(Article.class, id); 
    } 

    @SuppressWarnings("unchecked") 
    @Override 
    public List<Article> findAll() 
    { 
     System.out.println("findAll()"); 
     final String hql = "SELECT u FROM " + Article.class.getName() + " AS u";   
     return em.createQuery(hql).getResultList(); 
    } 


    /* 
    * Factory methods 
    */ 

    @Override 
    public Article createArticle(String description, long price) 
    { 
     System.out.println("createArticle(\"" + description + "\"," + price +")"); 

     Article u = new Article(); 
     u.setDescription(description); 
     u.setPrice(price); 
     insert(u); 
     return u; 
    } 
} 
+0

我知道你的注释CLASS ArticleDAOImpl,扫描不应该使这个必要的,但你已经尝试适当地注释豆。 ArticleDAOImpl您可以注释为@ApplicationScoped。下一个选项是查看,如果注入ArticleDAOImpl而不是界面会发生什么情况。我知道这不应该是必要的,但也许一些指针可能会让你进一步解决问题的原因。 – aschoerk

+0

如果您处于战争项目中,请将beans.xml放入WEB-INF而不是META-INF。如果发现模式是全部,则不需要添加@ApplicationScoped注释。 – Rouliboy

回答

1

当CDI容器初始化豆类和依赖注入,它只能注入物体进入该容器是知道的其他对象,否则不会做的注射。您注入的类必须是容器已知的。

尝试@Named@ApplicationScoped

相关问题