程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2EE >> Eclipse+JBoss+EJB3在Servlet中訪問EntityManager對象

Eclipse+JBoss+EJB3在Servlet中訪問EntityManager對象

編輯:J2EE

在前面的文章中使用的都是容器管制的EntityManager對象。這類EntityManager對象是由EJB容器創建的,在這種情況下,EntityManager對象的生命周期完全由EJB容器來管理。在SessionBean中可以使用如下的代碼來通知EJB容器創建EntityManager對象:

  1. @PersistenceContext(unitName="myentity")
  2. protected EntityManager em;

上面的代碼需要放在任意一個SessionBean的類中,EJB容器會自動創建EntityManager對象。但如果要在Servlet中直接訪問EntityManager對象,需要使用EntityManagerFactory接口的createEntityManager方法來創建EntityManager對象,在使用完EntityManagerFactory和EntityManager對象後,可以使用相應的close方方關閉這兩個對象。在編寫Servlet中訪問應用程序管制實體Bean之前,需要修改一個persistence.XML文件的內容,修改後的結果如下:

  1. < XML version="1.0" encoding="UTF-8"?>
  2. < persistence XMLns="http://Java.sun.com/XML/ns/persistence"
  3. < XMLns:xsiXMLns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://Java.sun.com/XML/ns/persistence
  5. http://Java.sun.com/XML/ns/persistence/persistence_1_0.xsd"
  6. version="1.0">
  7. < persistence-unit name="myentity" transaction-type="RESOURCE_LOCAL">
  8. < non-jta-data-source>Java:/MyPIMnon-jta-data-source>
  9. < propertIEs>
  10. < property name="hibernate.hbm2ddl.auto" value="none" />
  11. < property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />
  12. < property name="hibernate.format_sql" value="true" />
  13. < property name="hibernate.show_sql" value="true" />
  14. < propertIEs>
  15. < persistence-unit>
  16. < persistence>

修改的地方有如下兩個:

1. 將元素的transaction-type屬性值設為RESUORCE_LOCAL。

2, 將元素改成,元素值不變。

要注意,這時不能使用@PersistenceContext注釋通知EJB容器自動創建EntityManager對象了,如果仍然想這樣做,可以定義其他的元素。

下面是訪問EntityManager對象的Servlet代碼:

  1. package servlet;
  2. import Java.io.IOException;
  3. import Javax.persistence.EntityManager;
  4. import Javax.persistence.EntityManagerFactory;
  5. import Javax.persistence.Persistence;
  6. import Javax.persistence.PersistenceContext;
  7. import Javax.servlet.ServletException;
  8. import Javax.servlet.http.HttpServlet;
  9. import Javax.servlet.http.HttpServletRequest;
  10. import Javax.servlet.http.HttpServletResponse;
  11. import entity.DateBean;
  12. public class MyServlet extends HttpServlet
  13. {
  14. private static final long serialVersionUID = 1L;
  15. protected void service(HttpServletRequest request,
  16. HttpServletResponse response) throws ServletException, IOException
  17. {
  18. EntityManagerFactory emf = Persistence.createEntityManagerFactory("myentity");
  19. EntityManager newEM = emf.createEntityManager();
  20. DateBean db = newEM.find(DateBean.class, 1);
  21. response.getWriter().println(db.getMyDate());
  22. newEM.close();
  23. emf.close();
  24. }
  25. }
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved