Java持久性API(JPA)是在Java项目中使用持久性的标准。Java EE 6的应用程序使用Java Persistence2.0规范。的Hibernate EntityManager的实现了JPA规范定义的程序编程接口及生命周期规则,它为JBoss 7提供一个完整的Java持久性解决方案。JBoss 7是100%兼容JPA2.0规范的,Hibernate也提供了除JPA规范外额外的功能。
当在JBoss集群中使用JPA,数据通常被存储在中央数据库或数据库集群中,与JBoss集群是独立的,分离的。因此,请求在JBoss集群中的任何一个节点上的失败或JBoss实例的毁坏都不影响数据库中的数据。这也是JPA规范所考虑的范畴,为了这一目的,JPA本身被认为是无状态的,因为状态在JPA系统之外,是独立的。
JPA中的一级缓存(First-level caching)涉及到持久化上下文,在JBoss中指的是Hibernate的Session,这个缓存是本地的,并认为它是短暂的,适用于单个的请求。它不会改变JPA技术的无状态特性,并不会对JPA应用的水平扩展和集群造成风险。
JPA的二级缓存(SECOND-LEVEL CACHING)指的是对传统数据库的缓存。它是JPA实体的一个本地数据存储,通过减少所需的往返数据库的次数来提高性能。使用了二级缓存,可以理解数据库中的数据在同一个集群中可以仅通过JPA进行修改。任何一个节点上数据的改变,对应的在其他节点上是数据的失效,这样保证的数据的连续性。尽管这样,有时候二级缓存还是会为JPA带来状态,这些问题需要注意解决。