- 浏览: 22193 次
- 性别:
- 来自: 北京
文章分类
最新评论
Hibernate Core Reference Manual
Chapter 2. Architecture
Table of Contents
2.1. Overview
2.1.1. Minimal architecture
2.1.2. Comprehensive architecture
2.1.3. Basic APIs
2.2. JMX Integration
2.3. Contextual sessions
2.1. Overview
站在很高的层次看Hibernate,它是下面这个样子:
由于Hibernate架构十分的灵活,所以我们不可能提供所有可能的运行时架构。这里只介绍介绍两种特殊情况:
2.1.1. Minimal architecture
最简架构:应用程序自己管理它的JDBC连接,并把这些连接提供给Hibernate。同时,应用程序自己管理transaction。这种方式使用了Hibernate API的一个最小子集。
2.1.2. Comprehensive architecture
"comprehensive"架构使应用程序从底层的JDBC和JTA API抽象出来,并让Hibernate来管理这些细节。
2.1.3. Basic APIs
SessionFactory (org.hibernate.SessionFactory)
A thread-safe, immutable不可变的 cache of compiled mappings for a single database. A factory for org.hibernate.Session instances. A client oforg.hibernate.connection.ConnectionProvider. Optionally maintains a second level cache of data that is reusable between transactions at a process or cluster 集群level.
Session (org.hibernate.Session)
A single-threaded, short-lived object representing a conversation between the application and the persistent store. Wraps a JDBC java.sql.Connection. Factory fororg.hibernate.Transaction. Maintains a first level cache of persistent the application's persistent objects and collections; this cache is used when navigating the object graph or looking up objects by identifier.
Persistent objects and collections
Short-lived, single threaded objects containing persistent state and business function. These can be ordinary JavaBeans/POJOs. They are associated with exactly one org.hibernate.Session. Once the org.hibernate.Session is closed, they will be detached and free to use in any application layer (for example, directly as data transfer objects to and from presentation). Chapter 11, Working with objects discusses transient, persistent and detached object states.
Transient and detached objects and collections
Instances of persistent classes that are not currently associated with a org.hibernate.Session. They may have been instantiated by the application and not yet persisted, or they may have been instantiated by a closed org.hibernate.Session. Chapter 11, Working with objects discusses transient, persistent and detached object states.
Transaction (org.hibernate.Transaction)
(Optional) A single-threaded, short-lived object used by the application to specify atomic units of work. It abstracts the application from the underlying JDBC, JTA or CORBA transaction. A org.hibernate.Session might span several org.hibernate.Transactions in some cases. However, transaction demarcation, either using the underlying API or org.hibernate.Transaction, is never optional.
ConnectionProvider (org.hibernate.connection.ConnectionProvider)
(Optional) A factory for, and pool of, JDBC connections. It abstracts the application from underlying javax.sql.DataSource or java.sql.DriverManager. It is not exposed to application, but it can be extended and/or implemented by the developer.
TransactionFactory (org.hibernate.TransactionFactory)
(Optional) A factory for org.hibernate.Transaction instances. It is not exposed to the application, but it can be extended and/or implemented by the developer.
Extension Interfaces
Hibernate offers a range of optional extension interfaces you can implement to customize the behavior of your persistence layer. See the API documentation for details.
2.2. JMX Integration
JMX is the J2EE standard for the management of Java components. Hibernate can be managed via a JMX standard service. AN MBean implementation is provided in the distribution: org.hibernate.jmx.HibernateService.
2.3. Contextual sessions
大多数使用Hibernate的应用程序都需要某种形式的"contextual" session,在这个给定的context的scope中,session都是有效地。然而,通常情况下,应用程序对 “由什么组成context”的定义是不同的;由于对current的理解不同,导致不同的context定义不同的scope。
使用Hibernate 3.0(及以前)的应用程序通常会利用ThreadLocal-based contextual sessions和辅助类HibernateUtil,或者是利用第三方的框架,例如Spring和Pico,他们可以提供proxy/interception-based contextual sessions.
从Hibernate 3.0.1开始,Hibernate添加了 SessionFactory.getCurrentSession()方法。起初,这个方法假定使用JTA transactions,而JTA transaction定义当前session的scope和context。考虑到很多独立的JTA TransactionManager实现都很成熟,在绝大多数情况下,应用程序应该使用JTA transaction management。不论应用程序是否部署到J2EE容器中去。基于此,the JTA-based contextual sessions are all you need to use.
但是到了Hibernate 3.1,SessionFactory.getCurrentSession()底层的处理变成了可插拔的。为了实现这一目标,一个新的接口org.hibernate.context.spi.CurrentSessionContext和一个新的配置参数 hibernate.current_session_context_class被添加进来。这就允许你以可插拔的方式配置当前session的scope和context。
查看 org.hibernate.context.spi.CurrentSessionContext接口的Javadocs.可以看到它仅定义了一个方法currentSession()。它的实现类负责追踪current contextual session。同时Hibernate提供了对该接口的三种实现:
前两种实现提供了"one session - one database transaction"编程模型,也被用为session-per-request。一个Session的开始和结束由一个 database transaction来定义。If you use programmatic transaction demarcation in plain JSE without JTA,建议你使用Hibernate Transaction API来隐藏底层实现。如果你是用JTA,你可以利用JTA接口来界定transactions。如果你在支持CMT的EJB容器中运行,transaction的边界可以声明性的定义,而且在你的代码中不需要任何界定transaction和session的操作。
配置参数hibernate.current_session_context_class用来定义使用org.hibernate.context.spi.CurrentSessionContext的哪一个实现类。为了向后兼容,如果这个参数没有设置,但是设置了org.hibernate.transaction.TransactionManagerLookup的值,Hibernate就会使用org.hibernate.context.internal.JTASessionContext。通常hibernate.current_session_context_class的值就是你要使用的实现类的名字。对于上面提到的三个实现,它们各自有对应的短名字"jta", "thread", 和"managed".
发表评论
-
《Struts 2 in Action》读书笔记——part 2——核心概念之OGNL和类型转换
2013-02-04 17:00 1569第五章 数据转移:OGNL和类型转换 5.1 数据转移和 ... -
《Struts 2 in Action》读书笔记——part 2——核心概念之拦截器
2013-02-02 16:25 1121第四章 使用拦截器追加工作流 4.1 为什么要拦截 ... -
《Struts 2 in Action》读书笔记——part 2——核心概念之Action
2013-01-20 18:36 591第三章 使用Struts 2 Action3.1 Stru ... -
《Struts 2 in Action》读书笔记——part 1——Struts 2:一个全新的框架
2013-01-18 12:32 912第一章Struts 2 :现代Web框架1.1 Web应 ... -
Hibernate Core Reference Manual学习笔记——Chapter 4. Persistent Classes
2013-01-14 20:19 1035Chapter 4. Persistent ClassesT ... -
Hibernate Core Reference Manual学习笔记——Chapter 3. Configuration
2013-01-01 15:34 924Hibernate Core Reference Manual ... -
Hibernate Core Reference Manual学习笔记——Chapter 1. Tutorial
2012-12-25 11:51 1388Hibernate Core Reference Manual ... -
JMX JNDI JTA
2012-12-23 08:02 0JMX(Java Management Extension ... -
Bean named 'tmeMerchandiseInfoDAO' must be of type [com.lyg.oss.dao.TmeMerchandi
2012-12-12 15:14 0今天自己搭建框架的时候,出了这个问题,出现这个异常,sp ... -
classpath
2012-12-08 11:13 0User Liberary加到Eclipse中,只是ec ... -
JAVA持久化框架选择:EJB?JPA?Hibernate?TopLink?
2012-12-07 15:23 1647采用 Java 持久化框架:选择、时机和优缺点?这篇文章比较了 ... -
JDBC基础知识
2012-12-04 17:12 1219一、概念JDBC(Java Data Ba ...
相关推荐
【标题】"安卓Android源码——Hibernate4.zip" 提供的是关于在Android平台上使用Hibernate4框架的源代码示例。Hibernate4是一个流行的Java对象关系映射(ORM)工具,它允许开发者将数据库操作与Java对象模型相结合,...
2. **安装与配置**:学习如何设置开发环境,包括添加依赖库、配置Hibernate的XML文件(如hibernate.cfg.xml)以及数据库连接参数。 3. **对象关系映射(ORM)**:理解实体类(Entity)的概念,以及如何使用注解或...
在本学习笔记中,我们将深入探讨JavaEE中的Spring框架,这是一个强大的、全面的企业级应用程序开发框架,它简化了Java开发并提供了丰富的功能。Spring的核心特性包括依赖注入(DI)、面向切面编程(AOP)以及对Java ...
在提到提升Hibernate性能的魔方——IronTrack SQL时,我们必须首先了解IronTrack SQL的背景和功能。IronTrack SQL是基于Apache许可证的开源工具,通过与开源JDBC驱动p6spy合作,提供了一个增强的对基于Hibernate的...
2. **其他数据库工具的痛点** - **开发效率**:如Mybatis,需要配合额外工具提高效率,而像JOOQ这样的工具可能不适合复杂查询场景。 - **SQL管理**:复杂的SQL在Java中拼写和维护困难,调整时很不方便。 - **跨...
2. **序列化与反序列化**:在序列化和反序列化过程中,反射用于访问类的私有成员,实现对象状态的保存和恢复。 3. **动态代理**:Java的动态代理机制是基于反射的,可以创建一个代理类来实现多个接口,实现对目标...
【Java 开发简历范本——有经验】 在Java开发领域,一份详尽的简历是向潜在雇主展示技术能力和项目经验的重要途径。以下是一份典型的Java开发者简历中的关键知识点: 1. **基础技能**: - **Java编程**:熟练掌握...
《Hibernate3.3_学习笔记》是一份详细记录了Hibernate3.3版本特性和使用方法的文档,旨在帮助开发者深入理解和应用这一强大的对象关系映射(ORM)框架。Hibernate是Java开发中的一个明星库,它简化了数据库操作,...
2. **配置与环境搭建**:介绍了如何配置 Hibernate,包括设置数据库连接、配置日志等。 3. **映射策略**:详细阐述了 Hibernate 中的多种映射策略,例如一对一、一对多、多对多等映射方式,并提供了相应的示例代码。...
hibernate-core-5.4.24.Final.jar
- Struts2+Spring+Hibernate:经典的Web应用框架组合,提供了从视图到控制再到持久化的完整解决方案。 - Smarty模板引擎+XML+ADODB+MVC:适用于PHP环境下的Web开发,简化了页面渲染流程。 - PDO+二进制数据上传+...
《深入理解Hibernate Core 5.0.11.Final.jar:源码剖析与应用实践》 Hibernate,作为Java领域中最著名的对象关系映射(ORM)框架之一,极大地简化了数据库操作,使得开发者能够以面向对象的方式处理数据。本文将...
hibernate-core-4.1.12.Final.jar hibernate-ehcache-4.1.12.Final.jar hibernate-entitymanager-4.1.12.Final.jar hibernate-jpa-2.0-api-1.0.1.Final.jar hibernate-search-4.2.0.Final.jar hibernate-search-...
《Hibernate参考指南中文版》与《Hibernate中文手册》是学习Java领域中ORM(对象关系映射)框架Hibernate的重要参考资料。Hibernate作为一个开源的、强大的持久化框架,极大地简化了数据库操作,使得开发人员能够以...
Hibernate学习笔记整理 以下是 Hibernate 框架的详细知识点: Hibernate 介绍 Hibernate 是一个 ORM(Object-Relational Mapping)框架,用于将 Java 对象映射到数据库表中。它提供了一个简洁的方式来访问和操作...
《MLDN学习笔记——Annotation》这篇博文主要探讨的是在编程领域中,特别是Java语言中,关于Annotation(注解)的深入理解和应用。Annotation是Java语言提供的一种元数据,它为程序提供了额外的信息,这些信息可以被...
Hibernate学习笔记 Hibernate学习笔记 Hibernate学习笔记 Hibernate学习笔记