將Ehcache添加到Openxava應用程序

介紹

本文介紹如何在Openxava應用程序上快速啟用Ehcache,從而提高性能。

查看實體及其圖時,將加載關系。 添加第二級緩存可加快關聯元素的檢索速度,因為已加載的元素是從緩存而不是數據庫中檢索的。

最終,該頁面解釋了分鐘項目如何遵守諾言:不寫任何內容。
例如,我們將以Lazuly分鐘項目展示為例。

Openxava-Ehcache集成

在Openxava中,您可以使用Java注釋的POJO來描述模型。注釋來自標準的JPA2 ORM和特定于Openxava的注釋。
但是沒有什么可以阻止您添加其他人。 完成添加緩存的操作。 還有一些配置可以啟用緩存。

行動清單

  1. 在源的根目錄添加ehcache.xml配置文件
  2. 修改persistence.xml以包括二級緩存
  3. 添加緩存注釋(與JPA2一起)

備注:

Openxava帶有ehcache.jar,因此無需添加依賴項。

    詳細動作

    添加ehcache.xml

    在/ persistence處的ehcache.xml文件中

    <ehcache><defaultCachemaxElementsInMemory="1000"eternal="false"timeToIdleSeconds="300"timeToLiveSeconds="300"overflowToDisk="false"diskPersistent="false"diskExpiryThreadIntervalSeconds="300"memoryStoreEvictionPolicy="LRU"/><cachename="your.domain.object"maxElementsInMemory="5000"eternal="false"timeToIdleSeconds="300"timeToLiveSeconds="600"overflowToDisk="false"/>
    </ehcache>

    修改persistence.xml

    Persistence.xml文件包含與永久單元有關的信息,例如連接池信息,
    類或配置加載。 'persistence.xml'位于/ persistence / META-INF中

    我們將附加L2緩存的屬性。

    <properties><property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/><property name="hibernate.cache.provider_class" value="net.sf.ehcache.hibernate.SingletonEhCacheProvider" /><property name="net.sf.ehcache.configurationResourceName" value="/ehcache.xml" /><property name="hibernate.cache.use_query_cache" value="true" /><property name="hibernate.cache.use_second_level_cache" value="true" /><property name="hibernate.generate_statistics" value="true" />   </properties>

    添加緩存注釋

    這里使用的是休眠注釋,而不是標準注釋(實際上,可緩存似乎不起作用)
    將緩存注釋放置在域對象的類級別。

    @org.hibernate.annotations.Cache(usage = org.hibernate.annotations.CacheConcurrencyStrategy.READ_WRITE)

    懶惰的應用

    Lazuly是一個示例數據庫,其中包含用于MinuteProject展示目的的會議信息。
    Minuteproject生成了一組綜合的偽像,以加快OX應用程序的發布。
    可以在Minuteproject 4 Openxava Lazuly展示柜中找到更多信息。 在這一部分,我們重點介紹為特定于緩存生成的偽像。 用于生成的Minuteproject本身基于配置文件,我們在其中定義數據模型以進行反向工程。 在此配置中,有一個擴充部分,您可以在其中添加信息。 處理實體類型中包含的內容類型的信息之一。 有4種可能性(參考數據,主數據,偽靜態數據,實時業務數據) 如果您使用content-type =“ master-data”或“ reference-data”豐富您的實體,MinuteProject 4 Openxava將生成關聯的緩存。

    這是針對國家實體在這里完成的。

    <entity name="COUNTRY" content-type="reference-data">

    這是與緩存有關的偽像

    ehcache.xml

    <ehcache><!--Sets the path to the directory where cache files are created.If the path is a Java System Property it is replaced by its value in therunning VM.The following properties are translated:* user.home - User's home directory* user.dir - User's current working directory* java.io.tmpdir - Default temp file pathSubdirectories can be specified below the property e.g. java.io.tmpdir/one-->
    <!--MP-MANAGED-UPDATABLE-BEGINNING-DISABLE @ehcache-main-config-conference@--><diskStore path="java.io.tmpdir"/><!--Mandatory Default Cache configuration. These settings will be applied to cachescreated programmtically using CacheManager.add(String cacheName)--><defaultCachemaxElementsInMemory="1000"eternal="false"timeToIdleSeconds="300"timeToLiveSeconds="300"overflowToDisk="false"diskPersistent="false"diskExpiryThreadIntervalSeconds="300"memoryStoreEvictionPolicy="LRU"/>
    <!-- The unnamed query cache --><cachename="org.hibernate.cache.StandardQueryCache"maxElementsInMemory="1000"eternal="false"timeToLiveSeconds="300"overflowToDisk="false"/>
    <!--MP-MANAGED-UPDATABLE-ENDING--><!--MP-MANAGED-UPDATABLE-BEGINNING-DISABLE @cache-entity-country-conference@--><cachename="net.sf.mp.demo.conference.domain.admin.Country"maxElementsInMemory="5000"eternal="false"timeToIdleSeconds="300"timeToLiveSeconds="600"overflowToDisk="false"/>
    <!--MP-MANAGED-UPDATABLE-ENDING--><!--MP-MANAGED-ADDED-AREA-BEGINNING @custom-cache-definition@-->
    <!--MP-MANAGED-ADDED-AREA-ENDING @custom-cache-definition@--></ehcache>

    Persistence.xml

    <persistence xmlns="http://java.sun.com/xml/ns/persistence"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"version="1.0"><!-- Tomcat + Hypersonic --><persistence-unit name="default"><non-jta-data-source>java:comp/env/jdbc/conferenceDS</non-jta-data-source><class>org.openxava.session.GalleryImage</class><properties><property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/><property name="hibernate.cache.provider_class" value="net.sf.ehcache.hibernate.SingletonEhCacheProvider" /><property name="net.sf.ehcache.configurationResourceName" value="/ehcache.xml" /><property name="hibernate.cache.use_query_cache" value="true" /><property name="hibernate.cache.use_second_level_cache" value="true" /><property name="hibernate.generate_statistics" value="true" />   
    <!--MP-MANAGED-ADDED-AREA-BEGINNING @properties@-->
    <!--MP-MANAGED-ADDED-AREA-ENDING @properties@--></properties>
    <!--MP-MANAGED-ADDED-AREA-BEGINNING @persistence-unit@-->
    <!--MP-MANAGED-ADDED-AREA-ENDING @persistence-unit@--></persistence-unit>       <!--MP-MANAGED-ADDED-AREA-BEGINNING @persistence@-->
    <!--MP-MANAGED-ADDED-AREA-ENDING @persistence@--></persistence>

    類注解

    @org.hibernate.annotations.Cache(usage = org.hibernate.annotations.CacheConcurrencyStrategy.READ_WRITE)
    //MP-MANAGED-ADDED-AREA-BEGINNING @class-annotation@
    //MP-MANAGED-ADDED-AREA-ENDING @class-annotation@
    public class Country {@Hidden @Id @Column(name="id" )@GeneratedValue(strategy = GenerationType.AUTO)private Integer id; 
    ...

    生成的代碼備注

    生成的代碼在文件擴展名注釋中包含標記。

    在MP-MANAGED-ADDED-AREA-BEGINNING和MP-MANAGED-ADDED-AREA-ENDING中,您可以放置??自定義代碼
    在MP-MANAGED-UPDATABLE-BEGINNING-DISABLE和MP-MANAGED-UPDATABLE-ENDING中,您可以更改代碼。 要保留您的修改,請將MP-MANAGED-UPDATABLE-BEGINNING-DISABLE更改為MP-MANAGED-UPDATABLE-BEGINNING-ENABLE。 可更新的代碼可防止您連續幾代丟失定制。

    有關可更新代碼的更多信息,請參見Minuteproject可更新代碼 。

    • 將以下文件mp-config-LAZULY-OPENXAVA.xml放在/ mywork / config中
    • 在提示符下執行mp-model-generation(.sh / cmd)mp-config-LAZULY-OPENXAVA.xml
    • / DEV / output / openxava / conference中產生的人工制品

    要生成,請使用mp-config-LAZULY-OPENXAVA.xml的更新版本

    <!DOCTYPE root>
    <generator-config><configuration><conventions><target-convention type="enable-updatable-code-feature" /></conventions>  <model name="conference" version="1.0" package-root="net.sf.mp.demo"><data-model><driver name="mysql" version="5.1.16" groupId="mysql" artifactId="mysql-connector-java"></driver><dataSource><driverClassName>org.gjt.mm.mysql.Driver</driverClassName><url>jdbc:mysql://127.0.0.1:3306/conference</url><username>root</username><password>mysql</password></dataSource><!--for Oracle and DB2 please set the schema <schema> </schema>--><primaryKeyPolicy oneGlobal="true"><primaryKeyPolicyPattern name="autoincrementPattern"></primaryKeyPolicyPattern></primaryKeyPolicy></data-model><business-model><!--<generation-condition> <condition type="exclude"startsWith="DUAL"></condition> </generation-condition>--><business-package default="conference"><condition type="package" startsWith="STAT" result="statistics"></condition><condition type="package" startsWith="COUNTRY" result="admin"></condition><condition type="package" startsWith="ROLE" result="admin"></condition>    </business-package><enrichment><conventions><column-naming-convention type="apply-strip-column-name-suffix"pattern-to-strip="_ID" /><reference-naming-conventiontype="apply-referenced-alias-when-no-ambiguity" is-to-plurialize="true" /></conventions><entity name="COUNTRY" content-type="reference-data"><semantic-reference><sql-path path="NAME" /></semantic-reference></entity><entity name="CONFERENCE_MEMBER"><semantic-reference><sql-path path="FIRST_NAME" /><sql-path path="LAST_NAME" /></semantic-reference><field name="STATUS"><property tag="checkconstraint" alias="conference_member_status"><property name="PENDING" value="PENDING" /><property name="ACTIVE" value="ACTIVE" /></property></field><field name="EMAIL"><stereotype stereotype="EMAIL" /></field></entity><entity name="SPEAKER"><field name="BIO"><stereotype stereotype="HTML_TEXT" /></field><field name="PHOTO"><stereotype stereotype="PHOTO" /></field><field name="WEB_SITE_URL"><stereotype stereotype="WEBURL" /></field></entity><entity name="PRESENTATION"><field name="STATUS"><property tag="checkconstraint" alias="presentation_status"><property name="PROPOSAL" value="PROPOSAL" /><property name="ACTIVE" value="ACTIVE" /></property></field></entity><entity name="SPONSOR"><field name="STATUS"><property tag="checkconstraint" alias="sponsor_status"><property name="PENDING" value="PENDING" /><property name="ACTIVE" value="ACTIVE" /></property></field><field name="PRIVILEGE_TYPE"><property tag="checkconstraint" alias="sponsor_privilege"><property name="GOLDEN" value="Golden" /><property name="SILVER" value="Silver" /><property name="BRONZE" value="Bronze" /></property></field></entity><!-- views --><entity name="stat_mb_per_ctry_conf" alias="MEMBER_PER_COUNTRY_AND_CONFERENCE"><virtual-primary-key isRealPrimaryKey="true"><property name="virtualPrimaryKey" value="ID" /></virtual-primary-key></entity><entity name="stat_mb_by_role" alias="MEMBER_PER_ROLE_COUNTRY_AND_CONFERENCE"><virtual-primary-key isRealPrimaryKey="true"><property name="virtualPrimaryKey" value="id" /></virtual-primary-key><field name="stat_mb_per_ctry_conf_ID" linkToTargetEntity="stat_mb_per_ctry_conf"linkToTargetField="id"></field></entity></enrichment></business-model></model><targets><!-- openxava --><target refname="OpenXava" name="OpenXava"fileName="mp-template-config-openxava-last-features.xml"outputdir-root="../../DEV/output/openxava/conference"templatedir-root="../../template/framework/openxava"></target><target refname="JPA2-LIB" fileName="mp-template-config-JPA2-LIB.xml"templatedir-root="../../template/framework/jpa"></target><target refname="BSLA-LIB" fileName="mp-template-config-bsla-LIB-features.xml"templatedir-root="../../template/framework/bsla"></target><target refname="CACHE-LIB" fileName="mp-template-config-CACHE-LIB.xml" templatedir-root="../../template/framework/cache"></target></targets></configuration>
    </generator-config>

    測試
    為確保緩存正常工作:

    • 啟用休眠日志記錄。 將以下代碼段作為額外屬性添加到persistence.xml中。
    <property name="hibernate.show_sql" value="true" /><property name="hibernate.format_sql" value="true" />
    • 導航到引用國家/地區的實體(示例地址)
    • 當您查看此實體的詳細信息時,您會注意到相關實體“國家”的負載很大
    • 但是,第二次訪問該實體(或引用同一國家/地區實例的另一個實體)的詳細信息時,該國家/地區不會從數據庫中加載兩次。

    參考: JCG合作伙伴 將Ehcache添加到Openxava應用程序 ? 分鐘項目博客上的 Florian Adler。


    翻譯自: https://www.javacodegeeks.com/2012/03/adding-ehcache-to-openxava-application.html

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

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

    相關文章

    java mongodb 返回所有field_JAVA高級之反射

    更多精彩&#xff0c;請點擊上方藍字關注我們&#xff01;今天跟大家分享JAVA高級之反射的知識。一、什么是反射反射就是把Java類中的各個成分映射成一個個的Java對象。即在運行狀態中&#xff0c;對于任意一個類&#xff0c;都能夠知道這個類的所以屬性和方法&#xff1b;對于…

    Linux入門筆記——cal、date、free、clear、history、man、whatis、uname

    1、cal 顯示日歷2、date 顯示系統當前的日期和時間3、df查看磁盤剩余空間的數量&#xff0c;常用參數 -h &#xff08;human&#xff09;人性化顯示內容4、free顯示空閑內存的數量&#xff0c;常用參數 -h &#xff08;human&#xff09;人性化顯示內容5、clear清除控制終端顯示…

    使用ASM 4處理Java類文件–第一部分:世界,您好!

    什么是ASM &#xff1a;ASM是一個用于處理Java字節碼的開源Java庫。 因此&#xff0c;它具有與Apache BCEL相同的目的。 由于本文假定讀者具有Java類文件格式的某些知識&#xff0c;因此建議在此處進行閱讀。 那么它與BCEL有何不同&#xff1f; 首先&#xff0c;它允許使用事件…

    (轉)C#程序開發中經常遇到的10條實用的代碼

    原文地址&#xff1a;http://www.cnblogs.com/JamesLi2015/p/3147986.html 1 讀取操作系統和CLR的版本 OperatingSystem os System.Environment.OSVersion; Console.WriteLine(“Platform: {0}”, os.Platform); Console.WriteLine(“Service Pack: {0}”, os.ServicePack); …

    Ueditor的配置及使用

    Ueditor官網&#xff1a;http://ueditor.baidu.com/website/ &#xff08;項目需要JSP版本&#xff1a;UTF-8版&#xff09; 1.配置 <script type"text/javascript" charset"utf-8">window.UEDITOR_HOME_URL "${ctx}/assets/plugins/uedi…

    努比亞z17s刷原生安卓_電腦運行手機APP,不會沒關系,我推薦你使用顯卡服務器運行安卓模擬器...

    很多人都想用電腦端運行手機APP&#xff0c;但是又不知道怎么操作。縱橫170yun小編推薦大家使用顯卡服務器&#xff0c;在顯卡服務器上運行安卓模擬器。讓你輕輕松松在電腦端運行手機APP&#xff0c;甚至還可以多開噢 。如果你的電腦沒有顯卡&#xff0c;也沒有關系&#xff0c…

    Linux入門筆記——系統目錄結構

    目錄 評論 / 根目錄&#xff0c;萬物起源。 /bin 包含系統啟動和運行所必須的二進制程序。 /boot 包含 Linux 內核&#xff0c;最初的 RAM 磁盤映像&#xff08;系統啟動時&#xff0c;由驅動程序所需&#xff09;&#xff0c;和 啟動加載程序。 有趣的文件&#xff1a; /boot/…

    線程故事:關于健壯的線程池

    我的主題系列的另一個博客。 這次是關于線程池&#xff0c;尤其是可靠的線程池設置。 在Java中&#xff0c;線程池由Java 5中引入的ThreadPoolExecutor類實現。該類的Javadoc組織得很好。 因此&#xff0c;我不遺余力地在此處進行概述。 基本上&#xff0c; ThreadPoolExecutor…

    css縮寫

    顏色&#xff1a; 16進制的色彩值為六位數&#xff0c;如果每兩位的值相同&#xff0c;可以縮寫一半。 如&#xff1a;#000000#000&#xff1b; #223344#234&#xff1b; 盒子的尺寸&#xff1a; 如margin:value; 一個值表示所有邊&#xff0c;兩個值表示上下&#xff0c;左右&…

    win10改成ubundu主題_如何將ubuntu引導win10,修改為win10引導ubuntu

    、首先用LiveCD進入ubuntu2、打開終端&#xff0c;輸入&#xff1a;fdisk -l 查看自己linux的分區情況&#xff0c;我的分了4個區&#xff0c;swap&#xff0c;boot&#xff0c;/&#xff0c;home&#xff0c;對應的分別是&#xff1a;/dev/sda9 swap/dev/sda10 boot/dev/sda11…

    Linux入門筆記——文件操作命令1

    pwd Print name of current working directory&#xff08;打印出當前工作目錄名&#xff09; cd Change directory&#xff08;更改目錄&#xff09;例子&#xff1a;cd 更改工作目錄到你的家目錄&#xff08;和cd ~命令的運行結果是等同的 &#xff09;cd - 更…

    使用MJRefresh自定義下拉刷新,上拉加載動畫

    有時候我們需要自己設置下拉刷新,上拉加載動畫的實現,這里主要是記錄下使用MJRefresh自定義下拉刷新,上拉加載動畫..... 下拉刷新我們只需要繼承MJRefreshGifHeader即可: 實現代碼如下: - (void)prepare{[super prepare];self.stateLabel.hidden NO;self.lastUpdatedTimeLabel…

    2.mybatis入門實例 連接數據庫進行查詢

    1.新建項目&#xff0c;添加mybatis和mysql的jar包 2.在mysql中新建表user[id,name,age] CREATE TABLE users (id int(11) NOT NULL auto_increment,NAME varchar(50) default NULL,age int(11) default NULL,PRIMARY KEY (id)) ENGINEInnoDB DEFAULT CHARSETutf8 3.新建User類…

    使用JacpFX和JavaFX2構建富客戶端

    創建快速且可擴展的桌面客戶端始終是一個挑戰&#xff0c;特別是在處理大量數據和長時間運行的任務時。 盡管Eclipse RCP和Netbeans RCP是已建立的平臺&#xff0c;但其想法是建立一個輕量級的框架來異步處理組件&#xff0c;類似于Web組件。 開發人員在線程主題上的工作應較少…

    lob移表空間 oracle_Oracle數據庫(1)Oracle體系結構概述(一)

    Oracle數據庫的體系結構主要包括&#xff1a;物理存儲結構、邏輯存儲結構、內存結構和實例進程結構。了解了Oracle的體系結構&#xff0c;就可以對Oracle數據庫有一個整體認識&#xff0c;這樣有利于后續Oracle的學習。下面我們分別來了解邏輯存儲結構、物理存儲結構、內存結構…

    Linux入門筆記——文件操作命令2

    cp Copy files and directories&#xff08;復制文件和目錄&#xff09; cp 選項&#xff1a; 選項 意義 -a, --archive 復制文件和目錄&#xff0c;以及它們的屬性&#xff0c;包括所有權和權限。 通常&#xff0c;復本具有用戶所操作文件的默認屬性。 -i, --interactive 在…

    java 對象的上轉型對象(父類)

    Example5_10.java class 類人猿 {void crySpeak(String s) {System.out.println(s); } } class People extends 類人猿 {void computer(int a,int b) { int ca*b;System.out.println(c); }void crySpeak(String s) {System.out.println("***"s"***"); }…

    EnglishLeaning

    今天看了些hadoop官方reference感覺自己詞匯量和語法真是又回到解放前了。于是&#xff0c;痛下決心要好好學習英語。找到了一些學習的方法&#xff0c;自己記錄下來&#xff0c;也和大家一起借鑒 努力目標&#xff1a; 掌握大量的計算機英語術語和縮略語&#xff1b;熟練掌握計…

    雇用Java EE開發人員的一些面試問題

    互聯網上充斥著Java開發人員的面試問題。 這些問題的主要問題是&#xff0c;它們僅證明候選人具有良好的記憶力&#xff0c;并且記住所有語法&#xff0c;結構&#xff0c;常量等。對他/她的邏輯推理沒有真正的評估。 我在下面列舉了一些面試問題的示例&#xff0c;這些示例根據…

    手機mstsc遠程工具_遠程桌面連接,只需3步,輕松遠程操控電腦!

    遠程桌面的好處遠程桌面有很多好處的1.對于運維技術人員來說&#xff0c;可以隨時隨地管理遠程主機&#xff0c;查看系統信息和硬件信息等系統性能診斷&#xff0c;遠程應用管理內存、CPU等敏感信息報警提醒&#xff0c;對遠程主機的一切盡收眼2.對于客戶服務來說&#xff0c;可…