Quantcast
Channel: Active questions tagged servlets - Stack Overflow
Viewing all articles
Browse latest Browse all 714

Can't inject EntityManager using @PersistenceContext

$
0
0

Please help with my code, why EntityManager and UserTransaction is always not injected, it's always null.

UserDAOImpl.java

package dao.implement;import dao.UserDAO;import java.util.List;import java.util.Optional;import javax.annotation.Resource;import javax.persistence.EntityManager;import javax.persistence.PersistenceContext;import javax.transaction.UserTransaction;import model.Users;public class UserDAOImpl implements UserDAO {    @PersistenceContext    EntityManager em;    @Resource    UserTransaction utx;    @Override    public Optional<Users> findById(String id) {        Users user = em.find(Users.class, id);        return user != null ? Optional.of(user) : Optional.empty();    }    @Override    public Optional<Users> findByEmail(String email) {        try {            Users user = em.createNamedQuery("Users.findByEmail", Users.class)                    .setParameter("email", email)                    .getSingleResult();            return Optional.of(user);        } catch (Exception e) {            return Optional.empty();        }    }    @Override    public List<Users> findAll() {        return em.createNamedQuery("Users.findAll", Users.class).getResultList();    }    @Override    public void save(Users user) {        try {            utx.begin();            em.persist(user);            utx.commit();        } catch (Exception ex) {            System.out.println(ex);        }    }    //...}

Test.java

import dao.implement.UserDAOImpl;import java.util.Optional;import model.Users;import static org.junit.Assert.assertTrue;import org.junit.Test;public class UserTest {    private UserDAOImpl userDAO = new UserDAOImpl();    @Test    public void testFindById() {        System.out.println(userDAO.findById("123e4567-e89b-12d3-a456-426614174000"));    }    @Test    public void testFindByEmail() {        System.out.println(userDAO.findByEmail("test@example.com"));    }   //...}

It works when EntityManager is injected in the scope HTTPServlet class, but I want it to be instantiated in my DAO class. I just don't understand how the whole dependency injection thing in servlet works.

package controller;import java.io.IOException;import java.io.PrintWriter;import javax.persistence.EntityManager;import javax.persistence.PersistenceContext;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;@WebServlet(name = "AuthController", urlPatterns = {"/auth"})public class AuthController extends HttpServlet {    @PersistenceContext    EntityManager em; //Injected, not null    @Override    protected void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        System.out.println(em);    }    @Override    protected void doPost(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {         System.out.println(em);    }}

Viewing all articles
Browse latest Browse all 714

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>