Получение NullPointerException при использовании OpenJPA на Tomcat

1

Недавно я изучаю J2EE. Я использую IntelliJ, а мой веб-сервер - Tomcat. Я хочу добавить OpenJPA в свой проект, но я встречаю некоторые проблемы.

У меня есть два объекта: BooksEntity и SourcesEntity.

Когда я вызвал createEntityManager() в Servlet, он дал мне NullPointerException.

Кажется, я что-то пропустил, но не знаю почему.

Вот информация об исключении:

java.lang.NullPointerException
    controller.TestServlet.doGet(TestServlet.java:28)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

Это мой файл TestServlet.java:

@WebServlet(name = "TestServlet", urlPatterns = {"/books"})
public class TestServlet extends HttpServlet {

    @PersistenceUnit (unitName = "booksPU")
    private EntityManagerFactory emf;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        EntityManager em = emf.createEntityManager();

        Query query = em.createNamedQuery("Books.findAll");

        request.setAttribute("books", (List<BooksEntity>) query.getResultList());
        request.getRequestDispatcher("index.jsp").forward(request, response);
    }
}

Исключение было EntityManager em = emf.createEntityManager(); в этой строке: EntityManager em = emf.createEntityManager();

Это мой файл context.xml:

<Context>
    <Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"
              maxActive="100" maxIdle="30" maxWait="10000"
              username="root" password="******" driverClassName="com.mysql.jdbc.Driver"
              url="jdbc:mysql://localhost:3306/FIRST_TEST"/>
</Context>

Мой файл persistence.xml:

<?xml version="1.0" encoding="UTF-8"?>
    <persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">

    <persistence-unit name="booksPU">
        <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
        <class>model.BooksEntity</class>
        <class>model.SourcesEntity</class>
        <properties>
            <property name="openjpa.ConnectionURL" value="jdbc:mysql://localhost:3306/FIRST_TEST"/>
            <property name="openjpa.ConnectionDriverName" value="com.mysql.jdbc.Driver"/>
            <property name="openjpa.ConnectionUserName" value="root"/>
            <property name="openjpa.ConnectionPassword" value="******"/>
        </properties>
    </persistence-unit>
</persistence>

======== ======== 2014.06.06

Моя структура каталогов:

Изображение 174551

======== ======== 2014.06.07

Изображение 174551

  • 0
    Вы также должны сообщить нам, как вы упаковали свою заявку.
  • 0
    @Rick Я загрузил изображение о структуре моего каталога проекта. Вы имеете в виду это?
Показать ещё 1 комментарий
Теги:
tomcat
intellij-idea
java-ee
openjpa

2 ответа

0

Убедитесь, что при упаковке файла войны файл persistence.xml находится в папке WEB-INF/classes/META-INF.

  • 0
    Я загрузил новое изображение. Это так? Я сделал это, но это все равно не сработало.
0

Вероятно, это всего лишь опечатка вашего кода. Аннотации должны быть @PersistenceContext, а не @PersistentUnit. Вот почему emf остается null.

  • 0
    Я думаю, что это не ошибка. @PersistenceUnit для EntityManagerFactory , а @PersistenceContext для EntityManager . Они разные.
  • 0
    Хотя я использую @PersistenceContext и EntityManager напрямую, EntityManager em по-прежнему равен null . :(

Ещё вопросы

Сообщество Overcoder
Наверх
Меню