当前位置: 首页 > 知识库问答 >
问题:

EJB注入未满足的依赖项

孟均
2023-03-14

我正在尝试创建一个带有Wildfly和数据库连接的EJB Web项目,以持久化我的类“article”。但当我启动我的应用程序时,我得到了错误

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());
    }

}

包装服务;

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;
    }
}

共有1个答案

佴英奕
2023-03-14

当CDI容器初始化bean并注入依赖项时,它只能将对象注入到容器意识到的其他对象中,否则就不做注入。容器必须知道您正在注入的类。

尝试使用@named@applicationscoped注释articledaoimpl

 类似资料:
  • My beans.xml如下所示: 我的服务(后端类型的EJB)如下所示: 而注释bean使用以下(web): Build已成功,但deploy给了我这个例外: 2018-11-12 11:28:25,706错误[org.jboss.MSC.service.fail](MSC服务线程1-2)MSC000001:无法启动服务jboss.deployment.unit。“kajava-ear-0.0.

  • 我正在尝试将两个独立的战争迁移到一个耳朵里。 运行在WebLogic 12.2.1上,所以Java EE 7(CDI 1.1和EJB 3.1)。 每个WAR都包含相同的JAR库,其中包含许多@Stateless EJB和@Named CDI托管bean: 我已经执行了几个必需的步骤: 将包含ejb和CDI托管bean的ejb-cdi.jar的打包类型更改为ejb 将ejb-cdi.jar配置为po

  • 我的问题与注入EntityManager时的WELD-001408未满足依赖项和WELD-001408未满足依赖项不同。虽然这些问题涉及尝试将托管bean注入到无状态EJB中,但我正尝试进行相反的操作。 当我试图将一个@Stateless@Local interfaced bean注入到一个web托管bean中时,我得到了一个“未满足的依赖项”。我正在用各种EJB模块和web模块构建一个EAR,在

  • 我正在尝试实现一个quarkus-extension用于授权/认证。我使用现有的< code > quar kus-small rye-jwt-abx -扩展作为例子。一切似乎都很好,除了我不能注入< code>Principal: 我得到了 对 java.security.主体和限定符类型未满足的依赖关系 [@Default] 注入

  • 我有bean,它实现了两个接口(远程和本地)。我还添加了注释,用于使用无接口视图访问bean。 我使用的原因取自JBoss AS7快速入门示例: > WeatherDataBean具有: 资源具有: