Y
yyanghhong
Unregistered / Unconfirmed
GUEST, unregistred user!
hibernate是java的一个很好的OR mapping框架, http://hibernate.bluemars.net/
在对他研究后, 提出了几个移植hibernate的关键技术问题
1. 动态生成class和interface.
OR Mapping需要实现persistence和domain层, hibernate用persistence object (PO)来实现persistence, java old plain object(JOPO) 来实现domain, JOPO因为需要包含business logic, 得由programmer来手写. PO给JOPO提供一个数据库存储代理, 它对programmer来说是透明的. hibernate根据XML格式的HBM配置文件在运行期动态生成PO. 生成的手段是用CGLib(Code Generation Library), 一个java的开源库. http://cglib.sourceforge.net/
2. 提供一个类似Sql, 但支持面向对象特性(inheritence, polymorphism and association)的OR mapping查询语言HQL.
OR Mapping工具需要提供给programmer一种这样的语言, 比如EJB用EJBQL, 他会带来两方面的好处, 一是数据库无关, 用HQL查询, 用户不用考虑不同数据库查询SQL的差异, ibernate提供很多不同的数据库方言类, 他会用数据库方言把HQL翻译成不同的数据库查询SQL. 这样程序数据库移植时只要更改数据库方言配置就可以了.
二是当hibernate从数据库得到数据后, 可很容易把HQL中的反映的对象间关系抽取出来.. 根据关系把数据放到不同的PO中.
3. 事务支持,
hibernate同时支持本地事务和分布式事务. 对本地事务, 他是用JDBC的事务机制来解决的, programmer需要在代码中控制, 对分布式事务, 他是用JTA来解决.这象com+事务处理, 需要容器的支持.
另外hibernate对长事务还提供了versioning 和Optimistic Locking的手段, 这也是EJB design pattern的标准模式
4. 线程同步处理
hibernate提供了session factory和session来解决这个问题, session factory是一个线程安全但开销大的对象, 它可被多个线程同时访问, session是线程不安全但开销小的对象, 只可被一个线程访问. 这样hibernate把需要线程共享的东西放在session factory,不需共享的放在session中.
对上面hibernate的简单介绍可看出, 个人认为移植的难点是CGLib和HQL在delphi或.net的实现上, 希望大家给提供好意见, 另外由于对hibernate的了解不足, 介绍不对的地方或其他重要特性还望指出
在对他研究后, 提出了几个移植hibernate的关键技术问题
1. 动态生成class和interface.
OR Mapping需要实现persistence和domain层, hibernate用persistence object (PO)来实现persistence, java old plain object(JOPO) 来实现domain, JOPO因为需要包含business logic, 得由programmer来手写. PO给JOPO提供一个数据库存储代理, 它对programmer来说是透明的. hibernate根据XML格式的HBM配置文件在运行期动态生成PO. 生成的手段是用CGLib(Code Generation Library), 一个java的开源库. http://cglib.sourceforge.net/
2. 提供一个类似Sql, 但支持面向对象特性(inheritence, polymorphism and association)的OR mapping查询语言HQL.
OR Mapping工具需要提供给programmer一种这样的语言, 比如EJB用EJBQL, 他会带来两方面的好处, 一是数据库无关, 用HQL查询, 用户不用考虑不同数据库查询SQL的差异, ibernate提供很多不同的数据库方言类, 他会用数据库方言把HQL翻译成不同的数据库查询SQL. 这样程序数据库移植时只要更改数据库方言配置就可以了.
二是当hibernate从数据库得到数据后, 可很容易把HQL中的反映的对象间关系抽取出来.. 根据关系把数据放到不同的PO中.
3. 事务支持,
hibernate同时支持本地事务和分布式事务. 对本地事务, 他是用JDBC的事务机制来解决的, programmer需要在代码中控制, 对分布式事务, 他是用JTA来解决.这象com+事务处理, 需要容器的支持.
另外hibernate对长事务还提供了versioning 和Optimistic Locking的手段, 这也是EJB design pattern的标准模式
4. 线程同步处理
hibernate提供了session factory和session来解决这个问题, session factory是一个线程安全但开销大的对象, 它可被多个线程同时访问, session是线程不安全但开销小的对象, 只可被一个线程访问. 这样hibernate把需要线程共享的东西放在session factory,不需共享的放在session中.
对上面hibernate的简单介绍可看出, 个人认为移植的难点是CGLib和HQL在delphi或.net的实现上, 希望大家给提供好意见, 另外由于对hibernate的了解不足, 介绍不对的地方或其他重要特性还望指出