读书人

跟小弟我学OpenJPA之三(更快、更高、

发布时间: 2012-12-24 10:43:13 作者: rapoo

跟我学OpenJPA之三(更快、更高、更强)

上节跟我学OpenJPA之二(Hello OpenJPA)

?

昨天打开ITEYE,发现我的两篇文章上了首页兴奋ing....

上ITEYE不短时间,同时上两篇还是第一次,感谢大家的支持,谢谢!

?

本来昨天考虑好了第三节的题目和内容,可惜出了趟差,回来的时候又冒雨开了两个多小时的车,高速上精神太紧张回来直接倒头睡觉,今天虽然晚上时间也不多,但是有大家的支持再累也得补上。嘿嘿 废话多了些,归正传先

?

=================废话的分割线===================

?

奥林匹克五个圈圈的精神:更高、更快、更强,同样我们的OpenJPA也有这样的需求,因此有了Enhance(参见http://book.51cto.com/art/200806/76766.htm)。这个东西非常奇特,借用参考里面的解释:


------OpenJPA的增强器(Enhancer)能够在运行时对系统性能进行优化,并且提高惰性加载的灵活性,是OpenJPA与Hibernate最大不同之处。增强器能够自动为持久化的类添加一些代码,这些代码能够帮助二进制的类实现持久化类所必需的一些特性。OpenJPA的增强器可以通过两种方式对持久化类进行优化,一是编译时强化;二是使用Java 5 提供的新特性Instrumentation,在运行时创建代理来强化。
跟小弟我学OpenJPA之三(更快、更高、更强)

?

这个是OpenJPA的一大特点,很多人在刚开始接触的时候很容易因为这个出错,因为OpenJPA默认是开启了编译时强化,我最开始使用OpenJPA的时候就经历了下面的过程。

?

我们现在修改上次Test代码:

运行后报错如下:

?

第二,在persistence.xml中增加如下:

这个方法最简单,可惜不能发挥OpenJPA的最大效能,所以也不推荐

?

第三,终极解决方案(参考http://www.ibm.com/developerworks/cn/java/j-lo-openjpa2/)对每个持久化类执行

?

2、右键项目,选择属性,进入Builders
跟小弟我学OpenJPA之三(更快、更高、更强)

?

3、在Main选项卡,新建一个Ant Builder,Buildfile的点“Browse Workspace”,选择上面的那个xml文件
跟小弟我学OpenJPA之三(更快、更高、更强)

?

Base Directory的点“Variables ”,选择build_project
跟小弟我学OpenJPA之三(更快、更高、更强)

?

最后填写Arguments的内容如图:
跟小弟我学OpenJPA之三(更快、更高、更强)

?

4、在Targets选项卡中为Manual Build 和 Auto Build点“Set Targets..”添加enhance
跟小弟我学OpenJPA之三(更快、更高、更强)


跟小弟我学OpenJPA之三(更快、更高、更强)

?

5、保存后控制台提示Ant Build的信息如下(不能显示的话刷新项目):

Buildfile: /simen/ramwork/StrongOpenJPA/enhance.xmlopenjpa.libs.check:build.dir.check:enhance:        [echo] /simen/ramwork/StrongOpenJPA/target/classes:/simen/ramwork/StrongOpenJPA/openjpa_libs/openjpa-all-2.2.0.jar    [openjpac] 299  StrongOpenJPAPU  INFO   [Worker-44] openjpa.Tool - Enhancer running on type "com.strong.module.txx.jpa.TXx".BUILD SUCCESSFULTotal time: 1 second

这里提示TXx类在编译的时候被增强,再次运行Test,运行通过

?

本节成功的把TXx增强了起来,如果大家觉得麻烦也可以直接枪毙了这个增强,或者在开发过程中不增强只是在发布的时候增强一下,恩这个主意不错!

可能大家会发现一个问题,刚才的Test执行了,但是数据库的内容没有变化,为什么?当然是事务的问题,这个问题下节我们继续。

?

本节资源:

OpenJPA官方提供的Eclipse增强xml:enhance.xml.tar.gz

本节的源码(内含openjpa-2.2.0.jar,上节源码在maven中没有MySQL的JDBC,本节已默认增加):StrongOpenJPA.tar.gz

?

?

?

?

?

?

?

?

?

?

?

读书人网 >编程

热点推荐