我最近在學習J2EE。 我使用IntelliJ
,我的網絡服務器是Tomcat
。我想將OpenJPA
添加到我的項目中,但遇到一些問題。在Tomcat上使用OpenJPA時獲取NullPointerException
我有兩個實體:BooksEntity
和SourcesEntity
。
當我在Servlet
中調用createEntityManager()
時,它給了我一個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();
這是我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年6月6日
我的目錄結構:
======== 2014.06.07 ========
你也應該讓我們如何打包你的應用程序。 – Rick
@Rick我上傳了關於我的項目目錄結構的圖像。你的意思是這個嗎? – h1994st
我不知道在Tomcat中運行的webapp可以使用PersistenceUnit註釋而無需Spring或類似的庫注入,你有沒有?我爲我的個人項目創建了這個tomcat + openjpa包裝器,但它沒有使用註釋注入,https://github.com/Murmur/ScopedEntityManager – Whome