2017-09-16 10 views
0

私は、クラス "Article"を永続させるために、Wildflyとデータベース接続を使用してEJB Webプロジェクトを作成しようとしています。私は自分のアプリケーションを起動したときしかし、私はエラーを取得することで引き起こされるEJBが不満足な依存を注入する

:org.jboss.weld.exceptions.DeploymentException:WELD-001408:注入点で @default修飾子を持つ型ArticleDAOため 不満の依存関係[BackedAnnotatedField] serrvices.Customer.daoで@Injectプライベート serrvices.Customer.dao(Customer.java:0)

この例外は、私の@Inject文によって引き起こされますが、問題がどこにあるか私は理解することはできません。私はすでにウェブを検索してMETA-INFフォルダにbeans.xmlのを置い:

豆発見モード= "すべて">

が、成功しません。ここに私の関連するクラスは、次のとおりです。

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

であなたのArticleDAOImpl CLASSに注釈を試してみてください、スキャンは、これが必要にするべきではありませんが、あなたはすでに適切豆に注釈を付けてみました。あなたは@ApplicationScopedとして注釈を付けることができますArticleDAOImpl。次のオプションは、インターフェイスの代わりにArticleDAIImplを挿入するとどうなるかを調べることです。私はこれが必要ではないはずですが、おそらくいくつかの指針は問題の原因をさらに深めることができます。 – aschoerk

+0

あなたが戦争プロジェクトにいる場合、beans.xmlをMETA-INFの代わりにWEB-INFに入れてください。検出モードがすべての場合、@ApplicationScopedアノテーションを追加する必要はありません。 – Rouliboy

答えて

1

CDIコンテナは豆を初期化し、依存関係を注入すると、それだけで、それ以外の場合は、注射をしないだろう、コンテナが認識していることを他のオブジェクトにオブジェクトを挿入することができます。あなたが注射しているクラスは、容器に知られていなければなりません。

は、私が知っている@Named@ApplicationScoped

関連する問題