ehcache 程序_将Ehcache添加到Openxava应用程序

ehcache 程序

介绍

本文介绍如何在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>

    添加缓存注释

    此处使用的是Hibernate注释,而不是标准注释(实际上,可缓存似乎不起作用)
    将缓存注释放置在域对象的类级别。

    @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>

    测试
    为确保缓存正常工作:

    • 启用Hibernate日志记录。 将以下代码段添加为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

    ehcache 程序

    本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/357335.shtml

    如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

    相关文章

    Diff 算法核心原理

    什么是虚拟DOM 讲Diff算法前&#xff0c;我先给大家讲一讲什么是虚拟DOM吧。这有利于后面大家对Diff算法的理解加深。 虚拟DOM是一个对象&#xff0c;一个什么样的对象呢&#xff1f;一个用来表示真实DOM的对象&#xff0c;要记住这句话。我举个例子&#xff0c;请看以下真实…

    比较Java 8中的命令式和功能性算法

    Mario Fusco的流行推文令人印象深刻&#xff0c;显示了类似算法的命令性和功能性方法之间的主要区别实际上是&#xff1a; 势在必行–功能分离pic.twitter.com/G2cC6iBkDJ — Mario Fusco&#xff08;mariofusco&#xff09; 2015年3月1日 两种算法都做同样的事情&#xff0…

    mvc的视图中显示DataTable的方法

    mvc的视图中显示DataTable的方法&#xff1a; 不断的循环画出table {ViewBag.Title "ShowDataTable"; } using System.Data; model Models.ConModel{var table Model.ExcelTable as DataTable; }<script src"~/Scripts/My97DatePicker/WdatePicker.js"…

    rem,em,px,rpx等

    1、任意浏览器的默认字体高都是16px。谷歌浏览器显示的最小字体大小是12px。 exp&#xff1a;突破谷歌浏览器显示12px限制。 &#xff08;1&#xff09;、<div>文本</div> 文本嵌套块标签&#xff0c;这是因为缩放只对有宽高的标签有效&#xff0c;缩放的时候也是…

    python 列表 字典 读写文件:pickle模块的基本使用

    建议大家使用cPickle&#xff0c;速度更快&#xff01;&#xff01;&#xff01; python数据持久存储&#xff1a;pickle模块的基本使用&#xff08;转载&#xff09; 作者: pzxbc出处: http://pzxbc.cnblogs.com/本文版权归作者和博客园共有&#xff0c;欢迎转载&#xff0c;但…

    first-child、first-of-type等属性的差别

    1、xxx:first-child 伪类 xxx作为第一个子元素 //p元素作为第一个子元素的都会变色 p:first-child { background:yellow; } //p作为父元素的 第一个子元素。不要求第一个元素的类型 p>:first-child {background:yellow; }//p作为父元素的 第一个子元素。要求第一个元素的类…

    js 手机端触发事事件、javascript手机端/移动端触发事件

    处理Touch事件能让你跟踪用户的每一根手指的位置。你可以绑定以下四种Touch事件: touchstart: // 手指放到屏幕上的时候触发 touchmove: // 手指在屏幕上移动的时候触发 touchend: // 手指从屏幕上拿起的时候触发 touchcancel: // 系统取消touch事件的时候触发。至于系统…

    java 8 lambda_Java 8的烹调方式– Lambda项目

    java 8 lambda什么是project lambda &#xff1a;Project lambda是用于以Java语言语法启用lambda表达式的项目。 Lambda表达式是功能编程语言&#xff08;如lisp&#xff09;中的主要语法。 Groovy将是支持lambda表达式&#xff08;也称为闭包&#xff09;的java的最接近亲戚。…

    我的Serverless实战——引领云计算的下一个十年

    前言&#xff1a;如今&#xff0c;越来越多的大厂企业开始大规模使用Serverless&#xff0c;处于变革中的开发者&#xff0c;大多已从观望状态转向尝试阶段&#xff0c;越来越多Serverless落地场景被解锁。作为基础研发底座&#xff0c;越来越多企业开始接受Serverless&#xf…

    各种边距clientWidth、offsetWidth、scrollWidth、clientLeft、getBoundingClientRect详解

    1、clientWidth、offsetWidth、scrollWidth <!DOCTYPE html> <html><head><meta charset"utf-8" /><style>#box1 {padding: 50px;position: static;}#box {border: 1px solid red;overflow: scroll;height: 200px;width: 500px;}#con…

    encodeURIComponent的使用

    URL 元字符&#xff1a;分号&#xff08;;&#xff09;&#xff0c;逗号&#xff08;,&#xff09;&#xff0c;斜杠&#xff08;/&#xff09;&#xff0c;问号&#xff08;?&#xff09;&#xff0c;冒号&#xff08;:&#xff09;&#xff0c;at&#xff08;&#xff09;&a…

    如何以及何时使用枚举和注释

    本文是我们名为“ 高级Java ”的学院课程的一部分。 本课程旨在帮助您最有效地使用Java。 它讨论了高级主题&#xff0c;包括对象创建&#xff0c;并发&#xff0c;序列化&#xff0c;反射等。 它将指导您完成Java掌握的过程&#xff01; 在这里查看 &#xff01; 目录 1.简…

    花了两天时间用html+css+js做了一个网页版坦克大战游戏

    大家好&#xff0c;我是孙叫兽&#xff0c;本期内容给大家分享如何用htmlcssjavaScript去做一个简易网页版坦克游戏。 目录 坦克游戏玩法及介绍 项目结构 源码地址&#xff1a; 坦克游戏玩法及介绍 我们先来看一下首页。 打开这个首页很简单&#xff0c;基本是上面这个样子&…

    软件工程第一次冲刺进度条(1-10天)

    第一天&#xff08;4.20&#xff09;昨天做了什么今天做了什么遇到的问题配置安装所需要的环境和相关软件 查询android关于界面编程与视图的相关资料并且初步编写代码 配置虚拟机的时候电脑上总是失败第二天&#xff08;4.21&#xff09;昨天做了什么今天做了什么遇到的问题查询…

    css基础过渡与动画与应用于vue、react

    一、css属性过渡transition 1、解释&#xff1a; 使用该属性后变化不会在一瞬间完成&#xff0c;会有一个连续的变化效果。第一个参数设置哪些属性变化时需要有连续的效果。 不论用什么方式使属性的值发生变化&#xff0c;transition都会生效。 2、语法&#xff1a; trans…

    Android项目开发填坑记-Fragment的onAttach

    背景 现在Android开发多使用一个Activity管理多个Fragment进行开发&#xff0c;不免需要两者相互传递数据&#xff0c;一般是给Fragment添加回调接口&#xff0c;让Activity继承并实现。 回调接口一般都写在Fragment的onAttach()方法中&#xff0c;Fragment 3.0 的onAttach()方…

    前端开发——移动端及响应式布局解决办法总结(适配)

    问题分析:前端开发一个产品(网站、系统、APP等)会遇到的一个难点就是适配问题,比如开发一个网站,你在一个页面开发的时候从视觉看起来没什么异样,换个不同分别率的设备,电脑,手机等,发现样式全乱了,这个不是我们想要的结果,所以,浏览器适配,响应式布局就显得尤为重…

    来点小技巧,Array.filter(Boolean)、 [].slice.call(this)等等

    1、Array.filter(Boolean) 移除所有的 ”false“ 类型元素 (false, null, undefined, 0, NaN or an empty string)。 Boolean 是一个函数相当于直接传了个函数进去 Array.filter(Boolean)Array.filter(i>Boolean(i)) Array.filter(i>i) let a [1, 2, b, 0, {}, , N…

    设置文字多行显示溢出显示省略号

    #news_text { border: 1px solid red; width: 200px; word-break: break-all; text-overflow: ellipsis; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; /*这里可以设置文本显示的行数*/ overflow: hidden; }<div id"news_text"&g…

    vue项目有几个接口content Download时间特别长的解决办法

    做的可视化地图项目&#xff0c;有几个接口加载比较慢&#xff0c;大概16S左右&#xff0c;第一次加载接近一分钟&#xff0c;这谁能受得了。 对比了正式环境和测试环境&#xff0c;这个接口数据量一样&#xff0c;就是在测试服务器比较慢&#xff0c;排除滚动插件及其它的影响…