JBoss 系列六十三:JBoss 7/WildFly 集群之 Java Persistence API (JPA) - II(Hibernate查询缓存和二级缓存示例)
来源:互联网 发布:哪类商品淘宝禁止出售 编辑:程序博客网 时间:2024/05/15 06:08
目录(?)[+]
概述
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文件,添加内容如下:
- <?xml version="1.0" encoding="UTF-8"?>
- <module xmlns="urn:jboss:module:1.1" name="com.oracle">
- <resources>
- <resource-root path="ojdbc6.jar"/>
- </resources>
- <dependencies>
- <module name="javax.api"/>
- <module name="javax.transaction.api"/>
- </dependencies>
- </module>
添加驱动配置到JBoss服务器配置文件
编辑JBOSS_HOME/standalone/configuration/standalone-ha.xml文件,在<subsystem xmlns="urn:jboss:domain:datasources处datasources,drivers中添加如下内容:
- <driver name="oracle" module="com.oracle">
- <xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-class>
- </driver>
注意,此部分配置,我们在之前的系列JBoss 7/WildFly中配置使用Oracle数据库中有所提及。
Oracle数据库端的配置
使用DBA用户连接到Oracle数据库控制台,创建demo_user/soong,并分配相应的权限,如下:
- sqlplus / as sysdba
- create tablespace TESTSPACE datafile '/oracle/oradata/TESTSPACE.DBF' size 100M
- create user demo_user identified by soong default tablespace TESTSPACE;
- grant connect,resource,dba to demo_user;
启动JBoss
以上配置完成,我们启动两个JBoss节点构成一个集群,如下:
- ./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
- ./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数据库:
- <datasource jndi-name="java:jboss/datasources/JBossClusterDemoJPADS"
- pool-name="tasks-rs-xml-quickstart" enabled="true"
- use-java-context="true">
- <connection-url>jdbc:oracle:thin:@//10.66.192.144:1521/JBOSS</connection-url>
- <driver>oracle</driver>
- <security>
- <user-name>demo_user</user-name>
- <password>soong</password>
- </security>
- </datasource>
配置persistence-unit
配置persistence-unit,包括Datasource相关,缓存相当,具体编辑jpa/src/main/resources/META-INF/persistence.xml,配置内容如下:
- <persistence-unit name="primary">
- <jta-data-source>java:jboss/datasources/JBossClusterDemoJPADS</jta-data-source>
- <shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>
- <properties>
- <!-- Properties for Hibernate -->
- <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/>
- <property name="hibernate.default_schema" value="demo_user"/>
- <!-- use 'create' or 'create-drop' first time -->
- <property name="hibernate.hbm2ddl.auto" value="validate" />
- <property name="hibernate.show_sql" value="false" />
- <property name="hibernate.cache.use_second_level_cache" value="true"/>
- <property name="hibernate.cache.use_query_cache" value="true" />
- </properties>
- </persistence-unit>
编译生成部署包
使用软件安装及资料下载中描述的方法,执行
- 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) - II(Hibernate查询缓存和二级缓存示例)
- JBoss 系列六十三:JBoss 7/WildFly 集群之 Java Persistence API (JPA) - II(Hibernate查询缓存和二级缓存示例)
- JBoss 系列五十六:JBoss 7/WildFly 集群之 Java Persistence API (JPA) - I(基本理论)
- JBoss 系列六十六:JBoss 7/WildFly 集群之无状态会话Bean集群 - II(示例)
- JBoss 系列六十八:JBoss 7/WildFly 集群之有状态会话Bean集群 - II(示例)
- JBoss 系列五十四:JBoss 7/WildFly 集群之 HornetQ Messaging - II(示例)
- JBoss 系列五十五:JBoss 7/WildFly 集群之 HornetQ Messaging - III(示例补充说明)
- JBoss 系列六十五:JBoss 7/WildFly 集群之无状态会话Bean集群 - I(基本理论)
- JBoss 系列六十七:JBoss 7/WildFly 集群之有状态会话Bean集群 - I(基本理论)
- JBoss 系列五十三:JBoss 7/WildFly 集群之 HornetQ Messaging - I(基本理论)
- JBoss 系列四十八:JBoss 7/WildFly 使用TCP构建集群
- JBoss 系列四十九:JBoss 7/WildFly 中端口使用列表
- JBoss 系列五十七:JBoss 7/WildFly Virtual Directory Mapping
- JBoss 系列六十四:部署JMX MBean到JBoss 7/WildFly
- httpd+wildfly jboss集群搭建
- JBoss 系列四:JBoss7/WildFly中EJB调运示例
- JBOSS EAP 6 系列七 JPA/hibernate
- fseek函数与ftell函数联系与区别
- 模式识别或智能视频处理常用的视频库素材库
- UIView的layoutSubviews和drawRect方法何时调用
- 【Java并发编程】之十:使用wait/notify/notifyAll实现线程间通信的几点重要说明
- 这是我见过分析人生最透彻的一篇佳作
- JBoss 系列六十三:JBoss 7/WildFly 集群之 Java Persistence API (JPA) - II(Hibernate查询缓存和二级缓存示例)
- sharepoint网站如何发布到外网
- Linux设备驱动模型kobject
- 深入浅出 - Android系统移植与平台开发(六)- 为Android启动加速
- 设置powerdesigner的连接线为斜线
- Oracle查询表空间使用情况
- sprint4
- Win32核心编程 读书笔记二 进程线程的注意事项
- 哈夫曼树(Huffman Tree) 实现