OpenJPA的增强器(Enhancer)能够在运行时对系统性能进行优化,并且提高惰性加载的灵活性,是OpenJPA与Hibernate最大不同之处。增强器能够自动为持久化的类添加一些代码,这些代码能够帮助二进制的类实现持久化类所必需的一些特性。可以用一个图表示增强器的作用,如图14-5 所示。
OpenJPA的增强器可以通过两种方式对持久化类进行优化,一是编译时强化;二是使用Java 5 提供的新特性Instrumentation,在运行时创建代理来强化。
— 编译时增强
在编译类时,使用 org.apache.openjpa.enhance.PCEnhancer类来编译,例如下面代码所示。
java org.apache.openjpa.enhance.PCEnhancer Magazine.java
这种方式适用于运行在 Java 5版本以下的环境中。其中编译时也可以指定一些参数,请读者参阅相关的文档,这里不做详细介绍。
— 运行时增强
Java 5 提供的新特性Instrumentation提供Java代理(Java Agent)在运行时对类文件进行修改,以达到增强的目的。例如下面代码所示。
java -javaagent:/home/dev/openjpa/lib/openjpa.jar com.xyz.Main
Java EE 5规范明确规定了,当部署时,持久化的类将会自动增强。如果运行在Java EE 5的应用服务器中,OpenJPA将自动增强。但要注意,如果编译后的类已经增强过,OpenJPA将不再增加此持久化类。
— 不使用增强器
虽然增强器能够提高持久化类的性能,但 OpenJPA中增强器是可选的,并不是必需的。在不同的运行环境中,增强器的处理也是不同的。
— 部署时增强
如果运行在Java EE 5容器中,或者其他支持JPA的容器中,OpenJPA将自动在部署时加强类。
— Java 6类修改(class retransformation):如果运行在Java 6环境中,OpenJPA将自动地注册ClassTransformer类,并强化持久化类。
— Java 5类修改(class retransformation):如果运行在Java 5环境中,并且运行时指定了OpenJPA代理(javaagent),OpenJPA将强化持久化类。由于默认时启用加强器,所以要禁用则需要将代理的 classLoadEnhancement参数设置为false。
分享到:
相关推荐
Apache OpenJPA 2.2.0是该项目的一个稳定版本,发布于2012年,提供了许多增强功能和错误修复。这个版本包含了所有必要的组件,使得开发者可以在他们的应用中轻松地集成和使用OpenJPA。以下是一些关键知识点: 1. **...
8. **OpenJPA增强**:OpenJPA还提供了动态生成器,可以在运行时自动为实体类生成代理类,提供懒加载和其他性能优化功能。这可以通过在`persistence.xml`中配置`openjpa.RuntimeUnenhancedClasses`属性来启用。 9. *...
1. **依赖注入**:Spring通过其强大的依赖注入机制,可以在运行时动态地配置OpenJPA的相关组件,如EntityManagerFactory、EntityManager等,无需硬编码,增强了代码的可测试性和可维护性。 2. **事务管理**:Spring...
Apache OpenJPA是Apache软件基金会开发的一个开源Java持久化项目,它实现了Java Persistence API (JPA),这是一个用于管理和持久化Java对象到关系数据库的标准API。OpenJPA 2.2.0是该项目的一个版本,提供了对Java ...
10. **拦截器和事件监听器**:OpenJPA允许自定义拦截器和事件监听器,可以在特定操作(如持久化、删除等)前后执行自定义代码,增强灵活性。 11. **性能优化**:OpenJPA提供了多种性能优化手段,如批处理操作、缓存...
### OpenJPA Guide #### 一、概述与文档说明 **OpenJPA**是Apache软件基金会维护的一个开源项目,它提供了对Java Persistence API (JPA) 的实现和支持。本指南旨在帮助开发人员理解和掌握如何使用OpenJPA进行数据...
在Java开发中,Spring框架和Java ...不过,实际项目中还可能需要其他依赖,例如Spring的AOP、ORM、Web模块等,以及数据库特定的驱动和JPA的其他实现(如EclipseLink或OpenJPA),具体依赖于项目的需求和配置。
常见的ORM工具有Hibernate、TopLink和OpenJPA等,而在JBoss 7.1中,JPA的实现选择了Hibernate作为默认的ORM工具。 2. **对象关系映射(ORM)** ORM技术的主要目标是消除对象模型和关系模型之间的差异。在ORM中,类...
JPA 2.0的2级缓存功能提高了数据访问性能,特别是在WebSphere ExtremeScale可用时,OpenJPA 2.0会利用这个二级缓存进一步提升数据存取效率。 关于SCA(Service Component Architecture),它是一种面向服务的组件...
3. **hibernate-jpa-2.1-api.jar**:这个JAR包含JPA 2.1规范的API,使得你的代码可以与不同实现(如EclipseLink、OpenJPA等)互换。 4. **mysql-connector-java.jar**:如果你的应用程序使用MySQL数据库,这个驱动...
5. 数据访问:研究如何通过JPA或MyBatis等技术访问数据库,了解实体类、Repository接口的使用。 6. 集成测试:了解SpringBoot如何进行单元测试和集成测试,如@Test、@SpringBootTest等注解的用法。 7. RESTful API...
#### 三十九、OpenJPA缓存(OpenJPA Caching) OpenJPA是Java Persistence API的一个开源实现。这部分内容介绍了如何将Ehcache与OpenJPA结合起来使用。 #### 四十、Grails缓存(Grails Caching) Grails是基于...
- `openjpa-0.9.7-incubating.jar`是开源的Java Persistence API(JPA)实现,提供ORM服务。 - `xwork-2.1.2.jar`是Struts2的基础,负责动作调度和处理逻辑。 - `ojdbc6.jar`和`ojdbc14.jar`是Oracle数据库的JDBC...
JPA支持注解和XML配置,可以与多种持久化提供商(如Hibernate、OpenJPA等)兼容。 **4. JMS(Java Message Service)** JMS是Java平台的消息传递标准,用于实现应用程序之间的异步通信。J2EE 5.0中,消息驱动Bean的...
- **JPA支持**:支持Java Persistence API,简化对象关系映射(ORM)的处理,如Hibernate和OpenJPA。 - **WS工具**:提供Web服务工具,包括WSDL编辑、SOAP客户端测试和Web服务发布,简化Web服务的开发和测试。 5....
不过,随着Open JDK的不断发展,很多特性也被整合进来,如ZGC垃圾收集器和JMC的开源。 在选择使用哪个版本时,如果希望使用最新特性且没有Oracle授权,Open JDK 11是一个不错的选择,因为Oracle的产品总监表示,从...
4. **Java Persistence API(JPA)工具**:用于处理对象关系映射,支持Hibernate、OpenJPA等ORM框架。 5. **Enterprise JavaBeans(EJB)支持**:提供EJB项目的创建、编辑和调试功能。 三、2020-09 R版本更新 ...
JPA支持多种ORM框架,如Hibernate、OpenJPA等,并且具有以下特点: - **ORM支持**:JPA支持对象关系映射,使得对象可以直接映射到数据库表中,减少了手动编写SQL语句的需求。 - **查询语言**:JPA定义了一种名为...
JPA允许开发者直接在Java对象上操作数据库,降低了数据访问的复杂性,同时支持ORM(对象关系映射)工具,如Hibernate和OpenJPA。 ### 4. **Java Transaction API (JTA)** JTA 1.1提供了分布式事务处理的标准接口,...