JBoss 系列六十三:JBoss 7/WildFly 集群之 Java Persistence API (JPA) - II(Hibernate查询缓存和二级缓存示例)

转载 2013年12月16日 17:05:11


目录(?)[+]

概述

JBoss 系列五十六:JBoss 7/WildFly 集群之 Java Persistence API (JPA) - I 中讨论了JBoss集群情况下JPA相关的基本理论,JBoss的JPA实现是Hibernate,所以JBoss集群JPA主要是Hibernate集群,在基本理论中我们说明了Hibernate的一级缓存(查询缓存)和二级缓存,本文给出一个Hibernate一级缓存(查询缓存)和二级缓存示例,示例大致架构如下图所示:


如上为两个节点的集群,Web应用提供REST接口,供外界访问来操作数据库,REST语法如下:

  • http://<IP>:<PORT>/cluster-demo-jpa/test/addUsers/{number} 用来添加用户
  • http://<IP>:<PORT>/cluster-demo-jpa/test/getUserByName/{name}用来查询用户

应用使用JPA/hibnernate操作数据库,Hibernate 二级缓存基于数据库之上。

JBoss端以及数据库端的配置

添加Oracle数据库驱动模块到JBoss

在JBOSS_HOME/modules/目录下创建com/oracle/main目录,将Oracle驱动jar(ojdbc6.jar)拷贝到此目录下,并同在此目录下创建module.xml文件,添加内容如下:

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <module xmlns="urn:jboss:module:1.1" name="com.oracle">  
  3.     <resources>  
  4.         <resource-root path="ojdbc6.jar"/>  
  5.     </resources>  
  6.     <dependencies>  
  7.         <module name="javax.api"/>  
  8.         <module name="javax.transaction.api"/>  
  9.     </dependencies>  
  10. </module>  

添加驱动配置到JBoss服务器配置文件

编辑JBOSS_HOME/standalone/configuration/standalone-ha.xml文件,在<subsystem xmlns="urn:jboss:domain:datasources处datasources,drivers中添加如下内容:

  1. <driver name="oracle" module="com.oracle">  
  2.     <xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-class>  
  3. </driver>  

注意,此部分配置,我们在之前的系列JBoss 7/WildFly中配置使用Oracle数据库中有所提及。

Oracle数据库端的配置

使用DBA用户连接到Oracle数据库控制台,创建demo_user/soong,并分配相应的权限,如下:

  1. sqlplus / as sysdba  
  2. create tablespace TESTSPACE datafile '/oracle/oradata/TESTSPACE.DBF' size 100M  
  3. create user demo_user identified by soong default tablespace TESTSPACE;  
  4. grant connect,resource,dba to demo_user;  

启动JBoss

以上配置完成,我们启动两个JBoss节点构成一个集群,如下:

  1. ./standalone.sh -c standalone-ha.xml -b 10.66.218.46 -bmanagement=10.66.218.46 -u 239.255.100.100 -Djboss.node.name=node1  
  2.   
  3. ./standalone.sh -c standalone-ha.xml -b 10.66.218.47 -bmanagement=10.66.218.47 -u 239.255.100.100 -Djboss.node.name=node2  

部署应用到JBoss

本示例代码位于(https://github.com/kylinsoong/cluster/tree/master/demo/jpa),使用软件安装及资料下载中描述的方法下载示例代码,编译代码。在编译之前我们需要做一些修改配置。

配置DataSource

配置DataSource文件指向Oracle数据库,具体编辑jpa/src/main/webapp/WEB-INF/cluster-jpa-ds.xml文件指向Oracle数据库:

  1. <datasource jndi-name="java:jboss/datasources/JBossClusterDemoJPADS"  
  2.    pool-name="tasks-rs-xml-quickstart" enabled="true"  
  3.    use-java-context="true">  
  4.    <connection-url>jdbc:oracle:thin:@//10.66.192.144:1521/JBOSS</connection-url>  
  5.    <driver>oracle</driver>  
  6.    <security>  
  7.       <user-name>demo_user</user-name>  
  8.       <password>soong</password>  
  9.    </security>  
  10. </datasource>  

配置persistence-unit

配置persistence-unit,包括Datasource相关,缓存相当,具体编辑jpa/src/main/resources/META-INF/persistence.xml,配置内容如下:

  1. <persistence-unit name="primary">  
  2.    <jta-data-source>java:jboss/datasources/JBossClusterDemoJPADS</jta-data-source>  
  3.    <shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>  
  4.    <properties>  
  5.       <!-- Properties for Hibernate -->  
  6.       <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/>  
  7.       <property name="hibernate.default_schema" value="demo_user"/>  
  8.       <!-- use 'create' or 'create-drop' first time -->  
  9.       <property name="hibernate.hbm2ddl.auto" value="validate" />  
  10.       <property name="hibernate.show_sql" value="false" />  
  11.       <property name="hibernate.cache.use_second_level_cache" value="true"/>    
  12. <property name="hibernate.cache.use_query_cache" value="true" />    
  13.    </properties>  
  14. </persistence-unit>  

编译生成部署包

使用软件安装及资料下载中描述的方法,执行

  1. mvn clean install  

部署应用及测试

上面步骤完成会生成jpa/target/cluster-demo-jpa.war文件,使用使用4种方式部署应用到JBoss7/WildFly描述方法部署应用。

测试添加用户

部署成功后在节点1上添加用户:

http://10.66.218.46:8080/cluster-demo-jpa/test/addUsers/1

添加成功后页面会返回字符串,类似:“Add 1 users to database spend 154 milliseconds

测试查询用户

使用http://10.66.218.47:8080/cluster-demo-jpa/test/getUserByName/name-449

通过节点2查询用户name-499,将会返回字符串类似:“Get 164 users spend 614 milliseconds

理解Invalidation

本示例中集群两个节点之间通过Invalidation(失效)来确保数据连续性,失效模式是一种集群缓存,但实际上集群中各个节点之间并没有共享任何数据,而仅仅是从运行节点上在移除可能是过时的数据,详细理解参照JBoss Data Grid(Infinispan)缓存模式

相关文章推荐

JBoss 系列六十三:JBoss 7/WildFly 集群之 Java Persistence API (JPA) - II(Hibernate查询缓存和二级缓存示例)

概述 JBoss 系列五十六:JBoss 7/WildFly 集群之 Java Persistence API (JPA) - I 中讨论了JBoss集群情况下JPA相关的基本理论,JBoss的JPA...

JBoss 系列五十四:JBoss 7/WildFly 集群之 HornetQ Messaging - II(示例)

概述 本实验演示说明JBoss 7/WildFly 集群中HornetQ Messaging的本实验演示说明JBoss 7/WildFly 集群中HornetQ Messaging的高可用性。本实验运...

JBoss 系列六十八:JBoss 7/WildFly 集群之有状态会话Bean集群 - II(示例)

概述 本文分两个部分:有状态会话Bean集群和有状态会话Bean集群示例 有状态会话Bean集群 我们通过如下五句话来明白无状态会话Bean集群的基本理论。 状态 有状态会话Bean的状态指的是每一...

5 Hibernate:Java Persistence API (JPA) 入门

5 Hibernate:Java Persistence API (JPA) 入门

JPA规范:Java Persistence API 标准规范用法示例

JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。 JPA 是 JCP定义的一种规范,要使用此...

hibernate二级缓存与查询缓存之间的关系

我们先看一下什么样的hibernate操作会将数据存入到一级缓存中去,当调用下边这些方法的时候会将数据存入到一级缓存中 一级缓存 save、update、saveOrupdate、load、lis...

Hibernate-二级缓存与查询缓存

Hibernate-二级缓存与查询缓存简述Hibernate提供了基于应用程序级别的缓存(作用在SessionFactory范围内的), 可以跨多个session,即不同的session都可以访问缓存...

Hibernate中 一 二级缓存及查询缓存(2)

缓存:缓存是什么,解决什么问题?  位于速度相差较大的两种硬件/软件之间的,用于协调两者数据传输速度差异的结构,均可称之为缓存Cache。缓存目的:让数据更接近于应用程序,协调速度不匹配,使访问速度...

hibernate的查询缓存和二级缓存的配合使用

只开启查询缓存,不开启二级缓存是没有意义的。上一篇博客可以看出,不开启二级缓存,iterate()方法存在N+1次数据库查询问题,list方法最多只能命中id,也需要N次数据库查询,无论是哪儿种情况,...

Hibernate中 一 二级缓存及查询缓存(1)

最近趁有空学习了一下Hibernate的缓存,其包括一级缓存,二级缓存和查询缓存(有些是参照网络资源的): 一、一级缓存     一级缓存的生命周期和session的生命周期一致,当前sess...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JBoss 系列六十三:JBoss 7/WildFly 集群之 Java Persistence API (JPA) - II(Hibernate查询缓存和二级缓存示例)
举报原因:
原因补充:

(最多只允许输入30个字)