私は、クラス "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;
}
}
であなたの
ArticleDAOImpl
CLASSに注釈を試してみてください、スキャンは、これが必要にするべきではありませんが、あなたはすでに適切豆に注釈を付けてみました。あなたは@ApplicationScopedとして注釈を付けることができますArticleDAOImpl。次のオプションは、インターフェイスの代わりにArticleDAIImplを挿入するとどうなるかを調べることです。私はこれが必要ではないはずですが、おそらくいくつかの指針は問題の原因をさらに深めることができます。 – aschoerkあなたが戦争プロジェクトにいる場合、beans.xmlをMETA-INFの代わりにWEB-INFに入れてください。検出モードがすべての場合、@ApplicationScopedアノテーションを追加する必要はありません。 – Rouliboy