【问题标题】:Why DAO is getting null with @EJB annotation为什么 DAO 使用 @EJB 注释变为空
【发布时间】:2018-03-12 13:33:29
【问题描述】:

我正在尝试使用 Jax-rs 服务器实现数据源,我已经遇到了很多问题,我通过搜索解决了其他问题,通过推断,现在我找到了一个我无法解决的问题。

10:31:23,633 INFO [org.jboss.as.ejb3.deployment](MSC 服务线程 1-5) WFLYEJB0473:命名为会话 bean 的 JNDI 绑定 部署单元“部署“SouVizinho.war”中的“NotificacaoDAOEJB” 如下:

java:global/SouVizinho/NotificacaoDAOEJB!br.com.br.ejb.NotificacaoDAOEJB java:app/SouVizinho/NotificacaoDAOEJB!br.com.br.ejb.NotificacaoDAOEJB java:module/NotificacaoDAOEJB!br.com.br.ejb.NotificacaoDAOEJB java:global/SouVizinho/NotificacaoDAOEJB java:app/SouVizinho/NotificacaoDAOEJB java:module/NotificacaoDAOEJB

10:31:23,634 INFO [org.jboss.as.ejb3.deployment](MSC 服务线程 1-5) WFLYEJB0473:命名为会话 bean 的 JNDI 绑定 部署单元“部署”中的“NotificacaoControladorEJB” "SouVizinho.war"' 如下:

java:global/SouVizinho/NotificacaoControladorEJB!br.com.souvizinho.controlador.NotificacaoControladorEJB java:app/SouVizinho/NotificacaoControladorEJB!br.com.souvizinho.controlador.NotificacaoControladorEJB java:module/NotificacaoControladorEJB!br.com.souvizinho.controlador.NotificacaoControladorEJB java:global/SouVizinho/NotificacaoControladorEJB java:app/SouVizinho/NotificacaoControladorEJB java:module/NotificacaoControladorEJB

我正在通过 PostMan 请求 "/contador/{id}",当它到达 notificaoDAO.contador(id) 时,它会显示 notificacaoDAO em> 为 null

PS:我在 Eclipse Oxygen 上使用 Wildfly 11

控制器

import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.enterprise.context.RequestScoped;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;

@Path("ejb/notificacao")
@Stateless
@LocalBean
public class NotificacaoControladorEJB {


    SmartJava smartjava = new SmartJava();
    @EJB
    NotificacaoDAOEJB notificacaoDAO;


    @GET
    @Produces("application/json; charset=UTF-8")
    @Path("/contador/{id}")
    public Notificacao contadorGet(@PathParam("id") int id) {
        long quantidade;
        try {
            quantidade = notificacaoDAO.contador(id);

            return new Notificacao(quantidade);
        } catch(Exception e) {
            quantidade = 0;
            System.err.println(smartjava.getFullStackTrace(e));

            return new Notificacao(quantidade);
        }
    }

DAO

import java.util.List;

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


@Stateless
@LocalBean
public class NotificacaoDAOEJB {

    //private EntityManagerFactory entityManagerFactory;
    @PersistenceContext
    private EntityManager entityManager;

    SmartJava sj = new SmartJava();



    public Notificacao Salvar(Notificacao notificacao) {

        try {
            this.entityManager.getTransaction().begin();
            this.entityManager.persist(notificacao);
            this.entityManager.getTransaction().commit();
        } catch (Exception e) {
            System.out.println(sj.getFullStackTrace(e));

        } finally {
            //this.entityManager.close();
        }

        return notificacao;
    }

    public void Alterar(Notificacao notificacao){

        this.entityManager.getTransaction().begin();
        this.entityManager.merge(notificacao);
        this.entityManager.getTransaction().commit();
        //this.entityManager.close();

    }

    @SuppressWarnings("unchecked")
    public List<Notificacao> Listar(){
        return this.entityManager.createQuery("SELECT a FROM Notificacao a ORDER BY a.dtcad").getResultList();
    }

    public Notificacao GetNotificacao(int nrseq) {
        return this.entityManager.find(Notificacao.class, nrseq);
    }
    @SuppressWarnings("unchecked")
    public long contador(int nrsequsuario) {
        try {
            return (long) this.entityManager.createQuery("SELECT COUNT(a) FROM Notificacao a "
                    + "WHERE a.visualizado = false AND a.useralvo.nrseq = :usuario ORDER BY a.dtcad")
                    .setParameter("usuario", nrsequsuario).getSingleResult();
        } catch(Exception e) {
            System.err.println(sj.getFullStackTrace(e));
            return 0;
        }
    } 

}

【问题讨论】:

标签: java jakarta-ee ejb wildfly


【解决方案1】:

我遵循了这个教程:

https://blogs.sap.com/2014/11/26/jax-rs-the-missing-link-between-ui5-and-hcp-java-apps-adding-ejb/

并且工作了,但是我遇到了事务问题,所以我做了这个主题的 UserTransaction: A JTA EntityManager cannot use getTransaction()

现在一切正常,持续 100 毫秒而不是 5000 毫秒,列出 50 毫秒而不是 3000 毫秒。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-12
    • 2020-08-27
    • 2015-06-14
    • 2012-12-05
    • 2019-04-03
    • 1970-01-01
    • 2011-08-21
    相关资源
    最近更新 更多