![](/img/trans.png)
[英]JPA EJB PersistenceContext not injecting EntityManager
[英]@PersistenceContext EntityManager (JPA)
我正在使用JPA和EJB創建Java EE應用程序。 @PersistenceContext(unitName =“ airline”)中的問題,當我注釋此行時,會給我錯誤null_pointer_exception,當在服務器上運行代碼時,它會得到以下錯誤。
Severe: Exception while preparing the app : Could not resolve a persistence unit corresponding to the persistence-context-ref-name [com.airline.service.Test2EJBService/entityManager] in the scope of the module called [Test2]. Please verify your application.
我的課程 :
AddPassenger2
@WebServlet(name = "AddPassenger2", urlPatterns = {"/AddPassenger2"})
public class AddPassenger2 extends HttpServlet {
@EJB
Test2EJBService bService;
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
try (PrintWriter out = response.getWriter()) {
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet AddPassenger</title>");
out.println("</head>");
out.println("<body>");
out.println("<h4> Hello Every body in Test2 :) <h4>");
out.println("</body>");
out.println("</html>");
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
Passenger passenger = new Passenger();
passenger.setFirstName("Loai");
passenger.setLastName("Amr");
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, 1996);
cal.set(Calendar.MONTH, 9);
cal.set(Calendar.DAY_OF_MONTH, 30);
Date dob = cal.getTime();
passenger.setDob(dob);
passenger.setGender(Gender.Male);
passenger.setFlightClass(FlightClass.Couch);
bService.addPassenger(passenger);
System.out.println("First name : " + passenger.getFirstName());
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
}
我的EJB容器:
@Stateless
@LocalBean
public class Test2EJBService {
// @PersistenceUnit(unitName = "Test2PU")
@PersistenceContext(unitName = "airline")
private EntityManager entityManager;
public void addPassenger(Passenger passenger) {
// EntityManager createEntityManager;
// createEntityManager = Persistence.createEntityManagerFactory("Test2PU").createEntityManager();
entityManager.persist(passenger);
System.out.println("Done");
}
}
和persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="Test2PU" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>jdbc/airline</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
</properties>
</persistence-unit>
</persistence>
任何機構都可以幫助我在同一錯誤中花費3天,並且無法解決它。
這是我們與我的數據庫的聯系: 在此處輸入圖片描述
您在persistence.xml
文件中的persistence-unit-name
仍然顯示“ Test2PU”而不是“ airline”。 驗證。 另外,請確保您的連接池和JDBC資源在服務器上正確配置了相同的名稱(即,航空公司)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.