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

在我的四部分系列的第二部分中,我將解釋將Coherence與EclipseLink和GlassFish一起使用的策略第一。這描述了配置Coherence的JPA支持的Cache所必須采取的步驟,以及如何在GlassFish中使用它。高性能數據存儲。

一般的做法

您可以將Coherence API與通過JPA映射的數據庫支持的緩存一起使用。 網格通過JPA CacheLoader和CacheStore實現訪問關系數據。 在這種“傳統”一致性方法中,TopLink Grid提供了針對EclipseLink JPA優化的CacheLoader和CacheStore實現。 (EclipseLinkJPACacheLoader和EclipseLinkJPACacheStore)都包含在toplink-grid.jar文件中。 這樣,您將使用標準的JPA運行時配置文件persistence.xml和JPA映射文件orm.xml。 必須指定Coherence緩存配置文件coherence-cache-config.xml來覆蓋默認的Coherence設置并定義CacheStore緩存方案。

細節

CacheLoader實現通過EclipseLink將所有讀取操作/查詢直接重定向到數據庫。 CacheStore負責使用EclipseLink對數據庫執行的所有寫操作(插入,更新,刪除)。 該解決方案基本上獨立于GlassFish及其JPA提供程序。 您只需將Coherence與它的本機API一起使用,并且Coherence負責持久化實體。 該方法在文檔中稱為“傳統相干配置”。

制備

為了使該示例和以下每個示例都能正常工作,我們需要做一些準備。 首先是獲得所有必需的軟件。 獲得Java SE開發套件6u23 , GlassFish 3.1(NetBeans的一部分) , MySQL Community Server(5.5.9) , TopLink(11.1.1.4.0)和Coherence( 3.6.1.0)的副本 。 任何IDE都可以。 我將所有示例都基于NetBeans 7.0 Beta2 。 您應該首先安裝零碎的零件。 使用MySQL創建一個空的“一致性”數據庫。 我們將在所有示例中使用此示例。 我不會指導您完成此操作。 我將從相關的一致性部分開始。 這也是您需要遵循本系列其他部分的配置。 所以你最好保留它;)

將您的Coherence下載文件解壓縮到合適的位置(例如x:\ Oracle \ coherence \),然后通過設置并運行示例緩存服務器應用程序來檢查安裝。 轉到\ bin文件夾,然后執行cache-server.cmd / sh。 在此之前,請確保JAVA_HOME變量指向有效的JDK安裝。 如果一切順利,您會收到消息:“ Started DefaultCacheServer…”。 一個簡單的旁注:一致性是群集感知的。 這意味著,它將自動嘗試發現您子網中其他正在運行的Coherence節點。 如果您看到“ ActualMemberSet = MemberSet(Size = 1)”以外的任何其他輸出,則應在此處停止并將Coherence配置為僅在計算機上運行 。太好了,所有設置。讓我們執行示例客戶端。啟動coherence.cmd / sh并等待輸出“ Map(?):”。如果您使用服務器控制臺進行檢查,將看到以下內容:

(thread=Cluster, member=1): Member 2 joined Service Management with senior member 1

試一試,然后嘗試以下命令,每個命令均以返回確認:幫助,緩存myCache,輸入消息“ hello”,獲取消息,大小,列表,再見。 要獲得更多幫助,請查閱教程 。

付諸實踐

使用NetBeans啟動一個新的Java / Java類庫項目。 將其命名為“ GridEntityExample”(選中專用的lib文件夾框)。 將coherence.jar,toplink-grid.jar和mysql-connector-java-5.1.13-bin.jar添加到lib文件夾中,并將它們添加到項目依賴項中。

添加兩個新的程序包實體和服務器(例如net.eisele.coherence.entities,net.eisele.coherence.server),并

由于我們已經有了緩存服務器示例,因此很容易對其進行修改以滿足我們的需求。 將新的實體類(員工)添加到實體包中。 將主鍵類型更改為“ int”,然后單擊下一步。 從下拉框中選擇EclipseLink JPA 2.0。 由于向導將不允許您完成操作,因此請創建一個新的數據庫連接(jdbc:mysql:// localhost:3306 / coherence),然后單擊完成。 將兩個私有字符串(firstName,lastName)及其獲取器和設置器添加到實體。 從id屬性中刪除@GeneratedValue(稍后會詳細介紹)。 persistence.xml中的一些調整完成了配置。 添加以下內容:

<property name="eclipselink.ddl-generation" value="create-tables" />
<property name="eclipselink.ddl-generation.output-mode"
value="database" />            
<property name="eclipselink.jdbc.read-connections.min" value="1" />
<property name="eclipselink.jdbc.write-connections.min" value="1" />
<property name="eclipselink.jdbc.batch-writing" value="JDBC" />
<property name="eclipselink.logging.level" value="FINE" />
<property name="eclipselink.logging.thread" value="false" />
<property name="eclipselink.logging.session" value="false" />
<property name="eclipselink.logging.exceptions" value="false" />
<property name="eclipselink.logging.timestamp" value="false"/>

現在,我們需要一個簡單的StartCacheServer類,該類應抵抗服務器軟件包。 給它一個簡單的主要方法:

public static void main(String[] args) throws UnknownHostException {
// Restrict Coherence to localhost
System.setProperty("tangosol.coherence.wka", InetAddress.getLocalHost().getHostAddress());// Start CacheServer
DefaultCacheServer.main(new String[0]);
}

現在我們必須配置一致性。 這是通過coherence-cache-config.xml文件完成的。 完整的文件可以在教程中找到 。 成功的關鍵是class方案的第二個init參數。 您必須從那里的persistence.xml引用持久性單元:

<init-param>
<param-type>java.lang.String</param-type>
<param-value>GridEntityExamplePU</param-value>
</init-param>

右鍵單擊StartCacheServer并運行它。 您應該看到已經知道的消息:“ Started DefaultCacheServer…”。

好。 現在,我們將第一位員工插入數據庫。 創建一個簡單的InsertExample類:

public static void main(String[] args) throws UnknownHostException {
// Restrict Coherence to localhost
System.setProperty("tangosol.coherence.wka", InetAddress.getLocalHost().getHostAddress());// Disable local storage--need to start independent CacheServer
System.setProperty("tangosol.coherence.distributed.localstorage", "false");// Get the configured Cache 
NamedCache cache = CacheFactory.getCache("Employee");//Create a new Employee
Employee emp = new Employee();
emp.setFirstName("Markus");
emp.setLastName("Eisele"); 
emp.setId(1);//Put the Employee into the cache
cache.put(1, emp);
}

運行它并檢查您的數據庫,是否有新創建的Employee。 它應該是 :)

做完了 就這樣。 好的,GlassFish部分到底在哪里?

在GlassFish中使用此方法

這很簡單。 創建一個新的域(我們稱其為一致性),并創建一個新的WebApplication(將其稱為GridEntityWeb)。 添加GridEntityExample項目和coherence.jar作為依賴項。 現在,您必須配置緩存。 再次通過coherence-cache-config.xml完成??。 在WEB-INF / classes中創建一個,并使其引用EclipseLinkJPA服務名稱。

<cache-config><caching-scheme-mapping>
<cache-mapping>
<cache-name>*</cache-name>
<scheme-name>distributed-eclipselink</scheme-name>
</cache-mapping>
</caching-scheme-mapping><caching-schemes>
<distributed-scheme>
<scheme-name>distributed-eclipselink</scheme-name>
<service-name>EclipseLinkJPA</service-name>
</distributed-scheme>
</caching-schemes></cache-config>

就這樣。 確保StartCacheServer正在運行,并啟動GlassFish域和應用程序。 如果僅從InsertExample中復制幾行,則可以快速測試是否一切正常。 現在剩下要做的就是找到一種干凈的方法將其集成到您的應用程序中。 也許您可以提出一個通用的Coherence Crud服務(可能基于Adam的建議 )。

缺點和想法

使用這種方法時,必須配置持久性單元,以確保在插入或更新實體時不對實體進行任何更改。 JPA提供程序對實體所做的任何更改都不會反映在Coherence緩存中。 這意味著緩存中的實體將與數據庫內容不匹配。 特別是,實體不應使用ID生成(例如@GeneratedValue)來獲取ID。 這意味著,為了將對象插入Coherence緩存中,您還需要提供其身份作為鍵。

ID通常是實體存儲在Coherence中的密鑰。 不應使用樂觀鎖定(例如,@ Version),因為它可能導致數據庫事務提交失敗。

因此,總的來說,這并不是真正的常用方法,它只適合您在處理大量數據的某些特殊情況下使用。

但是這里到底是什么交易。 讓我們看看:如果循環運行配置的示例并插入12.635 Employee對象,則在我的計算機上大約需要13分鐘。 如果在同步模式下運行Coherence,則會發生這種情況。 但是您可以利用稱為“后寫”的功能通過異步執行數據庫更新來縮短應用程序響應時間。 如果將一行添加到CacheServer的coherence-cache-config.xml:

<write-delay>10s</write-delay>

從應用程序角度出發,插入插件所需的時間減少到9秒! 當然,運行中的服務器仍然需要時間異步處理更新,但是對于客戶端來說,這是最佳行為。

現在足夠了。 我將嘗試通過示例解釋更多的概念。 正如您可能已經猜到的,是否使用緩存有很多要知道的地方。 下一部分將介紹Coherence作為帶有GlassFish的EclipseLink的L2緩存。 謝謝閱讀。 敬請關注。

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

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

翻譯自: https://www.javacodegeeks.com/2011/11/high-performance-jpa-with-glassfish-and_03.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/373891.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/373891.shtml
英文地址,請注明出處:http://en.pswp.cn/news/373891.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

arm板telnetd為什么運行不了_一種基于ARM的嵌入式系統開發的方案詳細講解

背景介紹在日益信息化的社會中&#xff0c;各種各樣的嵌入式系統已經全面滲透到日常生活的每一個角落。嵌入式系統的功能越來越復雜&#xff0c;這就使得一個嵌入式系統產品從市場需求立項到方案選擇、樣機研制、定型量產所需要的開發費用越來越多&#xff0c;所需開發時間越來…

反素數 -- 數學

反素數就是區間內約數個數最多的那個數。 在ACM題目里&#xff0c; 一般是求約數最多而且數字最小的那個數&#xff0c;【1--n】 二是求約數剛好等于n的最小的那個數 三是求區間里的最小反素數【beign&#xff0c;end】 1和3有區別嗎&#xff1f;有&#xff0c;1可以加速&#…

編程挑戰系統的輸入和輸出詳細說明

在高校俱樂部線上編程挑戰中&#xff0c;一道題目的所有測試數據是放在一個文本文件中&#xff0c;選手將一道題目的程序提交給評判系統運行&#xff0c;程序從該文件中讀取測試數據&#xff0c;再把運行結果輸出到另一個文本文件中。系統把輸出文件與標準答案比對&#xff0c;…

上傳文件---未能找到路徑“D:\MyProject\Files\”的一部分

C# 使用控件FileUpload 上傳文件&#xff0c;簡單實例&#xff1a; protected void btnUpload_Click(object sender, EventArgs e){string path Server.MapPath("~/Files/");if (fileUpload.HasFile true){string filename fileUpload.FileName.ToLower();fileUpl…

使用SPANN方式將Spring&Quartz與自定義注釋集成

在上一篇文章中 &#xff0c;我們演示了如何在Spring容器中創建和配置帶批注的Quartz作業。 我們使用了一個類級別的注釋將一些元數據添加到實現Quartz Job的bean中。 批注定義了作業的名稱&#xff0c;組及其cron表達式。 后來&#xff0c;大部分代碼專用于處理該批注&#xf…

python opencv旋轉_Python opencv實現與rotatedrect類似的矩形旋轉,pythonopencv,RotatedRect

本文原理&#xff1a;先旋轉矩形到指定角度&#xff0c;然后提取矩形外輪廓&#xff0c;從而獲取旋轉后的矩形坐標點。#&#xff01;/usr/bin/env python3# -*- coding: utf-8 -*-# Author: tcy# Date: 2020-5-2 21:00:53# Version:V1.01# Last Modified by: tcy shanghai song…

關于string轉整數

又是leetcode的easy級別題&#xff0c;很基本的題目&#xff0c;卻漏考慮很多情況&#xff0c;動手前一定要考慮清楚呀&#xff01;&#xff01;&#xff01; 就當做鍛煉寫作能力吧&#xff0c;先上題目&#xff01; 將文本轉換成整數&#xff0c;注意一下幾點&#xff1a; 1.文…

數字三角形——遞歸、遞推、記憶化搜索

數字三角形 描述: 有一個由非負整數組成的三角形&#xff0c;第一行只有一個數&#xff0c;除了最下行之外每個數的左下方和右下方各有一個數。 問題&#xff1a; 從第一行的數開始&#xff0c;每次可以往左下或右下走一格&#xff0c;直到走到最下行…

Java 7功能概述

前面我們討論了所有未納入Java 7的內容&#xff0c;然后回顧了將其納入Java 7的有用的Fork / Join框架 。 今天的帖子將帶我們了解Project Coin的每個功能-一系列小的語言增強功能&#xff0c;這些功能雖然不是開創性的&#xff0c;但是對于任何能夠使用JDK 7的開發人員來說都是…

緩存技術

提升系統性能的主要方式之一就是緩存。它可以擋掉大部分的數據庫訪問的沖擊&#xff0c;如果沒有它&#xff0c;系統很可能會因為數據庫不可用導致整個系統崩潰。 但是緩存帶來了另外一些棘手的問題&#xff1a; 數據的一致性和實時性。 例如&#xff0c;數據庫中的數據狀態已經…

水晶報表分組分欄_web報表可視化設計器工具推薦

古往今來&#xff0c;信息就是決勝的關鍵。在科技時代的今天亦是如此。企業的數據管理在幫助企業加強管控、提高競爭力等方面具有不可或缺的作用。這就不得不說到報表工具。企業想要將儲存于各種商業信息系統中的數據轉化成有用的信息&#xff0c;最終幫助決策者做出更快、更好…

嵌套矩形——DAG上的動態規劃

有向無環圖&#xff08;DAG,Directed Acyclic Graph&#xff09;上的動態規劃是學習動態規劃的基礎。很多問題都可以轉化為DAG上的最長路、最短路或路徑計數問題。 題目描述&#xff1a; 有n個矩形&#xff0c;每個矩形可以用兩個整數a,b描述&#xff0c;表示它的長和寬。矩形…

Twisted

Twisted定義Twisted是一個基于事件驅動的網絡引擎框架網絡框架&#xff0c;別人預先定義好的一個框架&#xff08;一個項目&#xff09;&#xff0c;如.net某個web框架有25個class&#xff0c;從BeginRequest依次執行類里的process方法&#xff0c;程序員自己定義一個類&#x…

從Spring到Java EE 6

我最近在一個非常復雜的項目中工作&#xff0c;其中融合了許多Java EE 6技術&#xff08;例如JPA&#xff0c;JAXB&#xff0c;JMS&#xff0c;JTA&#xff0c;JAX-RS等&#xff09;。 出于生產力和計劃方面的原因&#xff0c;將原型應用程序設計為獨立的純Spring應用程序。 當…

Centos 6.5 搭建php環境(nginx+mariadb+php7)

1.mariaDb vim /etc/yum.repos.d/MariaDB.repo [mariadb] name MariaDB baseurl http://yum.mariadb.org/5.5/centos5-x86 gpgkeyhttps://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck1#如果服務器已經安裝了MariaDB-Galera-server包&#xff0c;你可能需要在安裝MariaDB-s…

MAC itunes無法驗證服務器s.mzstatic/itunes無法更新服務器解決方案

打開host文件&#xff1a; 一、用終端打開&#xff1a; sudo vi /etc/hosts 輸入完這行命令后需要輸入電腦密碼&#xff0c;然后確認&#xff0c;進入host文件 然后按i鍵進入編輯模式&#xff0c;在最后一行添加&#xff1a;23.214.233.166 s.mzstatic.com 如下圖 添加完后&…

硬幣問題——固定終點的最長路和最短路

問題描述&#xff1a; 有n種硬幣&#xff0c;面值分別為V1,V2...,Vn,每種都有無限多。給定非負整數S&#xff0c;可以選用多少個硬幣&#xff0c;使得面值之和恰好為S&#xff1f;輸出硬幣數目的最小值和最大值。0 < n < 100, 0 < S < 10000, 1 < Vi < S。 …

讀取nas_NAS怎么玩?除了存放小姐姐,它竟然還有這些功能

自從有了電腦&#xff0c;就一直在折騰"存儲那點事兒"&#xff0c;說到底&#xff0c;電腦的本質就是存儲&#xff0c;而自己弄家用存儲方面的東西算下來也有幾年了。單機的硬盤存儲比較簡單&#xff0c;但是隨著家里各種設備的增多&#xff0c;各個設備間的文件共享…

ZK Web框架思想

我曾多次被要求提出一些有關ZK的意見。 因此&#xff0c;根據我作為ZK用戶4年的經驗&#xff0c;以下是一些想法&#xff1a; 總體開發人員經驗&#xff0c;社區和文檔 “就是這樣” ZK提供的大多數東西都能很好地工作&#xff0c;并且如果您以前開發過任何桌面Java應用程序&…

OC第一講:類和對象

今天終于開始進行OC的學習了 一.首先講了NSLog NSLog是oc里面的輸出語句&#xff0c;其用法和printf差不多&#xff0c;但是還是有差別的 1&#xff0c;NSLog是自動換行的&#xff0c;不用像printf那樣還需要加\n&#xff1b; 2&#xff0c;NSLog在引號面前需要添加符號&#x…