Ich versuche, ein EJB-Web-Projekt mit Wildfly und eine Datenbankverbindung zu erstellen, um meine Klasse "Artikel" zu erhalten. Aber wenn ich meine Anwendung starten erhalte ich die FehlerEJB injizieren unbefriedigte Abhängigkeiten
Verursacht durch: org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unbefriedigend Abhängigkeiten für Typ ArticleDAO mit Qualifier @Default an der Injektionsstelle [BackedAnnotatedField] @Inject privaten serrvices.Customer.dao bei serrvices.Customer.dao (Customer.java:0)
Diese Ausnahme von meiner @Inject Aussage verursacht wird, aber ich kann nicht heraus, wo das Problem ist. Ich suchte schon die Bahn und legte eine beans.xml im Ordner META-INF mit:
bean-Discovery-mode = "all">
aber kein Erfolg. Hier sind meine verwandten Klassen:
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
Paket 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;
}
}
Ich weiß, mit Anmerkungen versehen, macht das Scannen soll dies nicht notwendig, aber haben Sie schon versuchen, die Bohnen in geeigneter Weise mit Anmerkungen zu versehen. ArticleDAOImpl könnten Sie als @ApplicationScoped kommentieren. Die nächste Option wäre, zu schauen, was passiert, wenn Sie ArticleDAOImpl anstelle der Schnittstelle injizieren. Ich weiß, dass dies nicht notwendig sein sollte, aber vielleicht könnten einige Hinweise Sie weiter zur Ursache der Probleme bringen. – aschoerk
Lege die beans.xml in WEB-INF anstelle von META-INF, wenn du in einem Kriegsprojekt bist. Sie müssen keine @ApplicationScoped-Annotation hinzufügen, wenn der Erkennungsmodus aktiviert ist. – Rouliboy