日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

具有GlassFish和一致性的高性能JPA –第3部分

發布時間:2023/12/3 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 具有GlassFish和一致性的高性能JPA –第3部分 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在我的四部分系列的第三部分中,我將解釋將Coherence與EclipseLink和GlassFish結合使用的第二種策略。 這就是通過EclipseLink使用Coherence作為二級緩存(L2)的全部內容。

一般的做法

這種方法將Coherence數據網格應用于依賴于無法完全預加載到Coherence緩存中的數據庫托管數據的JPA應用程序。 它可能無法預加載的一些原因包括超出Coherence篩選器功能集的極其復雜的查詢,創建陳舊緩存的第三方數據庫更新,依賴本機SQL查詢,存儲過程或觸發器等等。 這不僅是本地L2高速緩存的選項,而且在不同節點上具有其他已配置的Coherence實例,您還將獲得群集范圍的JPA L2高速緩存。

細節

與許多緩存一樣,這是一項只讀的優化。 主鍵查詢嘗試首先從Coherence獲取實體,如果不成功,將查詢數據庫,并用查詢結果更新Coherence。 針對數據庫執行非主鍵查詢,并針對Coherence檢查結果,以避免緩存實體的對象構建成本。 新查詢的實體將放入Coherence。 寫操作將更新數據庫,如果成功提交,則將更新后的實體放入Coherence。 這種方法在Coherence文檔中稱為“網格緩存”。

付諸實踐

如果您還沒有這樣做,請從上一篇博客文章開始,并準備您的環境 。 只有一件事,您需要進行更改。 對于這種情況,請返回GlassFish 3.0.1 / EclipseLink 2.0.1,因為CacheKey.getKey()方法存在問題。 2.0.1返回一個Vector ,而2.2.0返回一個Object 。 看到新的Oracle GlassFish Server 3.1支持ActiveCache,我希望此問題將在3.7 Coherence版本中得到修復。 但是直到那之前,您必須堅持使用舊的GF或EclipseLink。

無論如何,讓我們使用您喜歡的IDE(例如GridCacheExample)創建一個新的Web項目。 添加所需的庫(coherence.jar,toplink-grid.jar和eclipselink.jar)。 現在,讓我們創建實體類,并向其添加額外的@CacheInterceptor批注:

...import oracle.eclipselink.coherence.integrated.cache.CoherenceInterceptor; import org.eclipse.persistence.annotations.CacheInterceptor;...@Entity @CacheInterceptor(value = CoherenceInterceptor.class) public class Employee implements Serializable {...}

不要忘記添加@GeneratedValue(strategy = GenerationType.SEQUENCE),因為這與上一個示例相反。 完成此操作后,您必須將一致性配置添加到WEB-INF / classes文件夾。 您可以從教程開始( 示例2 )。 (請注意,其中有一個錯字…重復的</ backing-map-scheme>標記)。 像配置普通的基于JPA的應用程序一樣,配置persistence.xml。

<persistence-unit name="GridCacheExamplePU" transaction-type="JTA"><provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> <jta-data-source>jdbc/coherence</jta-data-source><properties> <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/> <property name="eclipselink.logging.level" value="FINE" /> </properties></persistence-unit>

基本上就是這樣。 現在,您可以測試新的L2緩存。 一個簡單的servlet應該可以解決問題:

public class InsertServletPart3 extends HttpServlet {@PersistenceUnit(unitName = "GridCacheExamplePU") EntityManagerFactory emf;@Resource UserTransaction tx;...EntityManager em = emf.createEntityManager();tx.begin();// some loop magic Employee employee = new Employee();employee.setFirstName("Markus"); employee.setLastName("Eisele");em.persist(employee);// some loop magic end tx.commit();em.close();

如果您查看日志,則可以看到以下內容:

FEIN: INSERT INTO EMPLOYEE (LASTNAME, FIRSTNAME) VALUES (?, ?)bind => [Eisele, Markus] ... FEIN: Coherence(Employee)::Put: 1 value: net.eisele.coherence.entities.Employee[ id=1 ] ...

基本上,這告訴您,實際的數據庫插入是由您慣常的EclipseLink執行的。 之后,您會看到Employee對象以PK作為鍵被放置到名為Employee的Coherence Cache中。

如果現在對數據庫發出查詢

em.createQuery("select e from Employee e where e.lastName = :lastName").setParameter("lastName", "Eisele").getResultList();

您會看到以下內容:

FEIN: SELECT ID, LASTNAME, FIRSTNAME FROM EMPLOYEE WHERE (LASTNAME = ?)bind => [Eisele] FEIN: Coherence(Employee)::Get: 1 result: net.eisele.coherence.entities.Employee[ id=1 ] FEIN: Coherence(Employee)::Put: 1 value: net.eisele.coherence.entities.Employee[ id=1 ] ...

這告訴您,查詢本身是針對數據庫發出的,但結果針對Coherence進行了檢查,以避免已經為緩存的實體構造對象。 新查詢的實體將放入Coherence。 如果發出簡單的PK查詢:

em.find(Employee.class, 1);

輸出更改為:

FEIN: Coherence(Employee)::Get: 1 result: net.eisele.coherence.entities.Employee[ id=1 ]

而且您根本看不到任何數據庫查詢。 就是這樣:)您的緩存有效! 謝謝閱讀。 敬請期待下一部分!

進一步閱讀

  • OTN方法:將一致性用作共享的L2緩存
  • Oracle TopLink與Coherence Gird 11g第1版(11.1.1)集成指南

參考: 具有GlassFish和一致性的高性能JPA –第3部分,來自我們的JCG合作伙伴 Markus Eisele ,在“使用Java進行企業軟件開發”博客中

相關文章 :
  • 具有GlassFish和一致性的高性能JPA –第1部分
  • 具有GlassFish和一致性的高性能JPA –第2部分
  • 在云中開發和測試
  • Java EE中的配置管理
  • 泄漏:Oracle WebLogic Server 12g
  • Java EE6裝飾器:在注入時裝飾類
  • Java教程和Android教程列表

翻譯自: https://www.javacodegeeks.com/2011/11/in-this-third-part-of-my-four-part.html

總結

以上是生活随笔為你收集整理的具有GlassFish和一致性的高性能JPA –第3部分的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。