JBoss JPA hibernate hibernate level two cache Web application
Directory (?) [+] Overview
JBoss Series 56: The JBoss 7/wildfly cluster Java persistence API (JPA)-I discusses the basic JPA-related theories of jboss clustering, and the JPA implementation of JBoss is hibernate, So the JBoss cluster JPA is mainly hibernate cluster, in the basic theory we describe the hibernate cache (query cache) and level two cache, this article gives a hibernate cache (query cache) and a two-level cache example, the example is roughly architecture as shown in the following figure:
As with the two-node cluster, the Web application provides the rest interface for outside access to manipulate the database, and the rest syntax is as follows: http://<ip>:<port>/cluster-demo-jpa/test/addusers/{ Number} is used to add user Http://<ip>:<port>/cluster-demo-jpa/test/getuserbyname/{name} for querying users
The application uses the Jpa/hibnernate operation database, Hibernate level two cache is based on the database. JBoss End and database-side configuration Add Oracle Database driver module to JBoss
Create the Com/oracle/main directory under the jboss_home/modules/directory, copy the Oracle driver Jar (OJDBC6.JAR) to this directory, and create the Module.xml file with this directory, add the following:
[HTML] view plain copy <?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> Add driver configuration to JBoss server configuration file
Edit the Jboss_home/standalone/configuration/standalone-ha.xml file in <subsystem xmlns= "Urn:jboss:domain: DataSources datasources,drivers Add the following:
[HTML] view plain copy <driver name= Oracle module= "Com.oracle" > <xa-datasource-class> oracle.jdbc.xa.client.oraclexadatasource</xa-datasource-class> </driver>
Note that this part of the configuration is mentioned in our previous series of JBoss 7/wildfly configuration using the Oracle database.
Oracle Database-side configuration
Connect to the Oracle Database console using the DBA user, create the Demo_user/soong, and assign the appropriate permissions, as follows:
[HTML] view plain copy 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;
Start JBoss
With the above configuration complete, we started two JBoss nodes to form a cluster, as follows: [HTML] view plain copy./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
deployment applied to JBoss
This sample code is located at (HTTPS://GITHUB.COM/KYLINSOONG/CLUSTER/TREE/MASTER/DEMO/JPA), using the method described in Software Installation and data download to download the sample code and compile the code. We need to make some configuration changes before compiling. Configure DataSource
Configure the DataSource file to point to an Oracle database, with the specific edit Jpa/src/main/webapp/web-inf/cluster-jpa-ds.xml file pointing to the Oracle database: [HTML] View plain copy <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>
Configure Persistence-unit
Configuration Persistence-unit, including datasource related, cache equivalent, specific edit jpa/src/main/resources/meta-inf/persistence.xml, configuration content as follows:
[HTML] View Plain copy <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" /> &Nbsp; <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>
Compiling build deployment Packages
Using the methods described in Software installation and data downloading, perform
[HTML] view plain copy mvn clean install
deployment applications and testing
The completion of the steps above will generate the Jpa/target/cluster-demo-jpa.war file and deploy the application using the 4-way deployment application to the Jboss7/wildfly description method. Test Add User
Add users to Node 1 after successful deployment:
Http://10.66.218.46:8080/cluster-demo-jpa/test/addUsers/1
After adding success, the page returns a string that resembles: "Add 1 users to database spend 154 milliseconds" Test query user
Using http://10.66.218.47:8080/cluster-demo-jpa/test/getUserByName/name-449
Querying user name-499 through Node 2 will return a string similar to: "Get 164 users spend 614 milliseconds" understanding invalidation
In this example, the cluster two nodes are invalidation (invalidated) to ensure data continuity, and the failure mode is a cluster cache, but in fact the nodes in the cluster do not share any data, but only from the running node in the removal may be outdated data, detailed understanding of the reference JBoss Data Grid (Infinispan) caching mode.