首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何为OSGi中的所有持久化单元配置通用属性(例如envers配置)

OSGi(Open Service Gateway Initiative)框架允许模块化应用程序的开发,其中每个模块(称为Bundle)可以独立部署和管理。在OSGi环境中配置持久化单元(Persistence Unit)的通用属性,如Hibernate Envers配置,可以通过以下步骤实现:

基础概念

  1. OSGi Bundle: 模块化的软件组件,可以独立部署和管理。
  2. Persistence Unit: 定义了JPA(Java Persistence API)实体管理器工厂的配置,包括数据源、实体类、事务类型等。
  3. Hibernate Envers: Hibernate的一个扩展,用于实体版本控制和审计。

配置通用属性的优势

  • 集中管理: 通过配置文件统一管理所有持久化单元的通用属性,减少重复代码。
  • 易于维护: 修改一处配置即可影响所有相关持久化单元。
  • 灵活性: 可以根据需要动态调整配置,适应不同的应用场景。

类型与应用场景

  • 通用属性: 如数据库连接信息、事务管理、日志级别等。
  • 特定扩展配置: 如Hibernate Envers用于审计功能。

配置步骤

  1. 创建配置文件: 在OSGi框架中,通常使用META-INF/persistence.xml文件来定义持久化单元。
  2. 定义通用属性: 在persistence.xml中设置通用属性,如数据源、事务类型等。
  3. 集成Envers: 在实体类上添加Envers注解,并在persistence.xml中配置Envers。

示例代码

假设我们有一个OSGi Bundle,需要在其中配置持久化单元并启用Envers。

persistence.xml

代码语言:txt
复制
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" version="2.1">
    <persistence-unit name="myPersistenceUnit" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <class>com.example.MyEntity</class>
        <properties>
            <!-- 通用属性 -->
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/mydb"/>
            <property name="javax.persistence.jdbc.user" value="user"/>
            <property name="javax.persistence.jdbc.password" value="password"/>
            
            <!-- Hibernate Envers配置 -->
            <property name="hibernate.ejb.event.post-insert" value="org.hibernate.envers.event.AuditEventListener"/>
            <property name="hibernate.ejb.event.post-update" value="org.hibernate.envers.event.AuditEventListener"/>
            <property name="hibernate.ejb.event.post-delete" value="org.hibernate.envers.event.AuditEventListener"/>
            <property name="hibernate.ejb.event.pre-collection-update" value="org.hibernate.envers.event.AuditEventListener"/>
            <property name="hibernate.ejb.event.pre-collection-remove" value="org.hibernate.envers.event.AuditEventListener"/>
            <property name="hibernate.ejb.event.post-collection-recreate" value="org.hibernate.envers.event.AuditEventListener"/>
        </properties>
    </persistence-unit>
</persistence>

实体类

代码语言:txt
复制
import org.hibernate.envers.Audited;

@Entity
@Audited
public class MyEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    private String name;
    
    // Getters and Setters
}

常见问题及解决方法

  1. 属性未生效: 确保persistence.xml文件位于正确的位置(通常是META-INF目录下),并且Bundle正确加载。
  2. Envers配置错误: 检查Envers相关的属性是否正确设置,并确保实体类上添加了@Audited注解。
  3. 依赖冲突: 确保所有依赖库版本兼容,特别是Hibernate和JPA相关的库。

通过以上步骤和示例代码,可以在OSGi环境中为所有持久化单元配置通用属性,并成功集成Hibernate Envers进行版本控制和审计。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

hibernate5新特性展示

摘要: 在hibernate5中,有了一些新的变动: 新引导 API Spatial/GIS 支持 Java 8 支持 扩展 AUTO id 生成支持 命名策略分离 属性转换器支持 更好的 在hibernate5...从hibernate的古老版本到现在,它一直支持用户按任意的顺序添加新的配置和关系映射,并允许我们在程序运行过程中查询获取相应的状态和映射信息。但这也意味着我们不能根据一些实时配置高效地建立映射信息。...id 生成支持 JPA定义的GenerationType.AUTO属性仅支持数字类型.从5.0开始,hibernate高度扩展并支持更广泛的类型,包括内置支持数字类型(如整型(Integer)\长整型...整合了hibernate-envers 5. 集合数值,映射键值 6. 现在能够有效处理null值 7....OSGi支持经过了很多改善,这需要归功了来自Karaf和Pax开发者和用户的支持 改进 bytecode 增强功能 在hibernate5.0的文档中已经对此进行了很多工作,但它仍有很大的提升空间

1.4K40

「首席架构看领域驱动设计」领域驱动的设计和开发最佳实践

选择一个候选业务流程,并与业务领域专家合作,使用通用语言对其进行文档化。 标识候选业务流程所需的所有服务。这些服务可以是原子的(单个步骤),也可以是协调的(多步骤,有或没有工作流)。...注释有助于最小化实现远程服务(如EJB或Web服务)所需的构件。它们还简化了配置管理任务。...例如,贷款域对象的某些属性(如贷款金额和利率)在贷款通过贷款审批流程中的审批步骤后不能更改。但是,在为特定利率注册和锁定贷款时,可以更改相同的属性。...对属性进行任何分离(例如将客户名拆分为customer实体对象中的first和last name属性)。 将DTO数据分解为一个或多个域对象。 持久化域对象的状态。...一旦开发任务完成,在开发阶段创建的所有单元和集成测试(使用或不使用TDD实践)都将成为自动化测试套件的一部分。

1.6K30
  • 类设计的SOLID原则

    业务逻辑或领域层包含业务对象,而数据访问层会封装持久化的数据存储以及外部系统的访问。...外部配置   外部化配置增加了模块的可重用性,但是降低了可用性。...如下场景下会更好:第一种,在Web应用程序中,如果想在服务器启动的时候创建一些特定的类,可以使用Class类并且在启动属性文件中指定要实例化的具体类,通过指定新的类并将其全限定名设置在适当的属性文件中,...OSGi uService:OSGi框架中,在OSGi bundle 启动的时候,uService 能够动态实例化那些注册为uService 服务的类。 分离抽象模式   分离抽象有助于消除模块关系。...但是,也会导致要管理更复杂的结构,使用分离抽象时,会面临灵活性和复杂性之间的取舍。通用指导原则如下: 如果依赖抽象体的所有类都在同一个模块中,那么将这些类与抽象体放在同一个模块中。

    1.1K00

    插件式开发架构综述

    2.2 插件的注入、配置和初始化 2.2.1 插件配置信息 配置信息即插件的描述信息,可以在代码中设置,也可以通过XML文件实现,方式不同,目的一致。...支持事件分发(已定义标准事件清单),插件可以接收事件,并开发自定义的事件处理程序 用户在实际设计过程中针对模型、针对工程目录、针对绘图区域的操作,会分发到所有的插件中,类似于广播。...其中开发的基石Eclipse,就是基于OSGI规范进行开发。 4.1 OSGI简介 OSGi是基于java语言实现的开发期和运行期模块化技术。...它的核心部分是一个框架,其中定义了应用程序的生命周期模式和服务注册。OSGI框架定义了大量的OSGI通用服务:日志、配置管理,XML解析等通用服务。...模块层中bundle的特点: bundle 以 jar 包形式存在的模块化物理单元,包含了代码,资源文件和元数据(模块描述信息)。 bundle 是开发、部署 OSGi 应用的基本单元。

    3.2K20

    用 @Audited 注解增强 Spring Boot 应用,打造健壮的数据审计功能

    此依赖项提供了Hibernate Envers的支持,它负责实体版本控制和审计功能。实体配置将@Audited注解应用于您希望审计的实体类。...配置确保application.yml或application.properties文件中包含了必要的 spring-data-envers 配置。...它允许与实体的审计历史进行交互。findRevisions: 这是Hibernate Envers提供的方法,用于检索给定实体的所有修订记录。...在Hibernate Envers中,当为实体启用审计功能时,它会生成一个对应的审计实体,默认情况下带有后缀“_AUD”。这个审计实体会跟踪原始实体随时间的所有更改。...因此,这行代码实际上是在查询具有给定ID的实体的所有修订历史,并将结果存储在审计实体的列表中。然后,可以使用该列表来分析或显示不同修订版本对实体所做的更改。

    20310

    ONOS架构之子系统介绍

    OSGi框架规范提供了一个通用的安全的Java框架,Bundle服务应用的部署、扩展全都依赖于该框架。 OSGi体系架构: ?...2.可配置性:灵活的配置能实现灵活的架构,同时也能提高可定制性。 3.问题的分离:每个模块负责自身所属的工作内容。如果子系统间有明确的界限,就可以充分利用模块化的好处。...; 一个提供给已经注册的Provider用来对manager收发信息的ProviderService南向接口; 在core中有一个Store的组件,与Manager紧密结合,它主要负责索引、持久化和同步来自...本地的状态分段由节点管理,在集群中以事件传播。事件被Store生成,它们通过分布式储存与集群中的所有节点共享。...但是同步的只是一部分的状态,如,对于DeviceStore,它只知道设备的状态而不了解其他的,如怎样跟踪链接状态的信息。 目前除了拓扑管理这部分,其他所有服务都要访问分布式储存。

    1.5K60

    HIBERNATE 持久化基础

    1.1 持久化与持久层 1.1.1 什么是持久化 Hibernate是一个优秀的java持久层解决方案,是当今主流的对象-关系映射工具但是何为持久化。...创建持久化类​ 首先定义用户实体类(持久化类)Person.java,代码如示例1.3所示。...从根本上来说,Hibernate对映射文件的名称和路径并无强制要求,可以把所有实体类在一个映射文件中配置,也可以分开多个映射文件进行配置,但原则上我们推荐每个持久对象创建一个映射文件并以class_name.hbm.xml...在 Hibernate应用中,Session接口的使用最为广泛,也称为持久化管理器,提供与持久化相关的操作,如添加、更新、删除、加载及查询对象 ,可以简单理解session为jdbc中Connection...即创建与销毁无须消耗过多的资源,可以经常在程序中创建或销毁 Session对象。例如,为每个客户请求分配单独的 Session实例,或者为每个工作单元分配单独的Session实例。

    11010

    技术角 | 架构学习书摘总结(四)可扩展架构模式(下)

    例如“服务发现”“服务路由”等其实都是ESB的功能,只是在微服务中剥离出来成了独立的基础系统。...因此必须通过自动化测试系统来完成绝大部分测试回归的工作。 自动化测试涵盖的范围包括代码级的单元测试、单个系统级的集成测试、系统间的接口测试,理想情况是每类测试都自动化。...自动化部署系统包括版本管理、资源管理(例机器管理、虚拟机管理)、部署操作、回退操作等功能。 配置中心 微服务需要一个统一的配置中心来管理所有微服务节点的配置。...配置中心包括配置版本管理(例同样的微服务,有10个节点是给移动用户服务的,有20个节点给联通用户服务的,配置项都一样,配置值不一样)、增删改查配置、节点管理、配置同步、配置推送等功能。...其他相关摘要 OSGi中,插件被称为Bundle。

    52550

    CTK Plugin Framework简介

    基于OSGI核心框架定义了大量的OSGi服务:日志、配置管理、HTTP(运行servlet)、XML分析、设备访问、软件包管理、许可管理、用户管理、IO连接、连线管理、Jini和UPnP。...二、可读信息(可选):帮助更好地理解和使用Plugin,不对模块化特性产生任何的影响。可选信息如Plugin-Name、Plugin-Vendor。...3.3、版本控制 在CTK Plugin Framework中,所有的插件都经过严格的版本控制,只有能够协作的插件才会被连接在一起。...标准化的管理API 使得在现有和未来的系统中集成CTK Plugin Framework变得非常容易。 3.8、懒加载 OSGi技术有很多的机制来保证只有当类真正需要的时候才开始加载插件。...例如,插件可以用饿汉式启动,但是也可以被配置为仅当其它插件使用它们时才启动。服务可以被注册,但只有在使用时才创建。懒加载场景可以节省大量的运行时成本。

    3K21

    OSGi 基本原理

    OSGi联盟已经开发了例如像HTTP服务器、配置、日志、安全、用户管理、XML等很多公共功能标准组件接口。这些组件的兼容性插件实现可以从进行了不同优化和使用代价的不同计算机服务提供商得到。...OSGi的主要职责就是为了让开发者能够创建动态化、模块化的Java系统。 OSGi 框架 OSGi框架从概念上可以分为三层:模块层、生命周期层和服务层。...模块层 模块层是 OSGi 框架中最基础的部分。 OSGi 的模块化,是通过为 Jar 包添加metadata 来定义哪些类该暴露,哪些类该隐藏,其控制单元叫做 Bundle(jar 包)。...bundle 是以 jar 包形式存在的一个模块化物理单元,里面包含了代码,资源文件和元数据(metadata),并且jar包的物理边界也同时是运行时逻辑模块的封装边界。 ?...服务层 一个OSGi 服务就是注册到 OSGi 框架中的一个 Java 对象。注册的时候可以设置这个 Service 的属性。而在获取 Service的时候可以根据属性进行过滤。

    3.3K90

    JClouds的命令行界面

    开发者,我在JCloud上做的第一件事情之一是在让JCloud支持OSGi(Java动态化模块化系统的一系列规范)。...当然,这个集成项目大多是面向那些熟悉OSGi和Apache Karaf的人,不能被认为是一个通用工具,不像我在序幕中所梦想的那样。...扩展 你可以添加你自己的命令。 你可以添加额外的项目。 例如:从Whirr 0.8.0起,您可以将其安装到任何基于Karaf的环境中。所以你也可以把它添加到CLI中。...1040141990.jpg 配置命令输出 刚开始使用时,命令输出以最常见的云提供商为标准,来进行设计和格式化的。但是,这样的输出对于所有提供者(不同的宽度等)不一定是最佳的。...每个表实例用数据进行填充,这些数据是能表示表格行的集合。列名是从配置文件中读取的。每个单元格的实际值是使用JSR-233脚本表达式(默认情况下使用groovy)来计算的。

    2.1K90

    JClouds的命令行界面

    当然,这个整合项目大多是针对那些熟悉OSGi和 Apache Karaf的人 ,不能被认为是一个通用工具,就像我在序幕中所梦想的那样。...操作:对类别执行的操作。例如:列表,创建,销毁,运行脚本,信息等 不管是计算服务或blobstore的所有操作将需要提供者或API和该提供者/ API的有效凭证。所有这些都可以指定为命令的选项。...扩展 可以添加你自己的命令。 可以添加额外的项目。 例如:从Whirr 0.8.0起,您可以将其安装到任何基于Karaf的环境中。所以你可以把它添加到cli中。...特别强调,在这个例子中,身份和提供者没有通过,而是作为环境变量提供。 交互模式的模块化本质 如上所述,交互式外壳也是模块化的,允许您在运行时添加/删除模块。...此外,命令的输出是完全可配置的。 每个表实例都将显示数据作为代表表格行的集合进行提供。列标题是从配置文件中读取的。

    1.5K70

    关于Java持久化相关的资源汇集:Java Persistence API

    通常来说,这是一件好事,配置安全性、远程处理和事务的粒度应该比持久化数据的粒度粗很多。JPA着重关注持久化数据,以及与EJB的其他部分和Java EE规范集成起来照管其他企业关注点。...默认情况下,Collection和Map类型的字段是惰性检索的,而其他所有字段都是主动获取的。通过在字段的持久化注解中指明“fetch”属性,可以基于各个字段静态地控制该行为。...回答:持久化单元是类和配置设置的集合,可以根据该集合创建EntityManagerFactory。它在 persistence.xml 文件中作为一个条目出现。...该服务器不执行会话bean持久化单元注入,但是在10.0服务器中可以这么作,并且在9.2中,没有任何Kodo控制台集成。...可以在orm.xml文件中定义命名查询,然后使您的持久化单元指向该orm.xml文件,JPA规范允许将任意数目的orm.xml文件合并到一起。 问题:JPQL支持多数据库查询吗?

    2.5K30

    模块化服务规范——OSGI

    基于这个框架定义了大量的OSGi服务:日志、配置管理、偏好,HTTP(运行servlet)、XML分析、设备访问、软件包管理、许可管理、星级、用户管理、IO连接、连线管理、Jini和 UPnP。...OSGi服务平台的应用包括:服务网关、 汽车、移动电话、 工业自动化、建筑物自动化、 PDA 网格计算、娱乐(如iPronto)、和 IDE。...您可以通过这些容器,把您的应用程序劈分为多个模块单元,这样,您就可以更容易地管 理这些模块单元之间的交叉依赖关系。 OSGi的主要职责就是为了让开发者能够建动态化、模块化的Java系统。...因为企业应用的模块化程度不高,即Java EE的模块化更多地是停留在逻辑概念层面。通常,我们会将企业应用以单个WAR包形式存在,其中内置了当前应用所有的内容,包括.class、.jsp、.js等资源。...5、开发不具备模块化的特性,一般企业中项目往往是放到一个工程中,这样造成的后果是模块化能力不强,难于维护,越大越不容易维护。

    1.6K30

    Spring实战6-利用Spring和JDBC访问数据库主要内容

    在企业级应用开发中不可避免得会涉及到数据持久化层,在数据持久化层的开发过程中,可能遇到很多陷阱。你需要初始化数据库访问框架、打开数据库连接、处理各种异常,最后还要记得关闭连接。...这是因为SQLException是一个代之所有数据库访问相关问题的异常,而不是针对每个可能的问题定义一个异常类型。 一些持久化框架提供了丰富的异常体系。...但是,所有这些持久化框架都需要依赖于具体的数据源,因此在开始学习templates和repositories之前,需要学习在Spring中如何配置数据源——用于连接数据库。...BasicDataSource中还有其他的属性,可以设置数据连接池的属性,例如,initialSize属性用于指定连接池初始化时建立几个数据库连接。...(如OSGi容器)中可能遇到的类加载问题。

    81210

    Java架构-一些设计上的基本常识

    比如Spring的ApplicationContext,Dubbo的ServiceManager等, 服务域的对象通常会比较重,而且是线程安全的,并以单一实例服务于所有调用。...会话域:就是一次交互过程, 会话中重要的概念是上下文,什么是上下文?...8、可配置一定可编程,并保持友好的CoC约定 因为使用环境的不确定因素很多,框架总会有一些配置, 一般都会到classpath直扫某个指定名称的配置,或者启动时允许指定配置路径, 做为一个通用框架,应该做到凡是能配置文件做的一定要能通过编程方式进行...比如get某个属性值,或查询一条数据库记录。...比如:远程调用框架,肯定少不了序列化功能,功能很简单,就是把流转成对象,对象转成流, 但因有些地方可能会使用osgi,这样序列化时,IO所在的ClassLoader可能和业务方的ClassLoader是隔离的

    64720

    应用对持久数据的管理 | 从开发角度看应用架构7

    例如,您想要将TodoItem类对象存储在TodoItem数据库表中; ORM将Java类名映射到数据库表名,并且该类中的属性将自动映射到表中的相应字段。 ?...主键字段用于将实体实例映射到数据库表中的行。 所有非瞬态属性都映射到数据库表中的字段。 在数据库表中,entity的每个持久实例都有一个持久性标识,该标识在表中唯一标识。...声明为临时的属性不存储在数据库表中,并且被称为非持久性。...持久性单元是存储在应用程序存档中的所有实体类和persistence.xml文件的集合。 persistence.xml是一个配置文件,其中包含有关实体类,数据源,事务类型和其他配置信息的信息。...持久性单元在应用程序的META-INF目录中的persistence.xml文件中配置。 每个使用持久性的应用程序都至少有一个持久性单元。 持久性单元包含有关持久性单元名称,数据源和事务类型的信息。

    2.7K40

    架构设计 11-可扩展架构之微内核架构

    关注本公众号 回复 “架构设计” 获取架构设计笔记完整思维导图 基本架构 两类组件 核心系统(core system) 负责和具体业务功能无关的通用功能: 模块加载 模块间通信 插件模块(plug-in...常见的连接机制有 OSGi(例如Eclipse )、消息模式、依赖注入(例如Spring ),甚至使用分布式的协议也是可以的,比如 HTTP Web或RPC 的方式。...高效率:规则引擎系统一般提供可视化的规则定制、审批、查询及管理,方便业务人员快速配置新的业务。 基本架构 开发人员将业务功能分解提炼为多个规则,将规则保存在规则库中。...业务人员根据业务需要,通过将规则排列组合,配置成业务流程,保存在业务库中。 规则引擎执行业务流程实现业务功能。 实现 插件管理 规则引擎中的规则就是微内核架构的插件,引擎就是微内核架构的内核。...此外,一些框架、平台类型的服务,个人理解都是这中架构,将核心逻辑抽象化,具体功能插件化,按照核心框架提供的插件规范实现所需功能的插件即可,典型的如:Nginx等。

    76220

    几种Java热插拔技术实现总结

    一般Java开发人员所说的OSGI是指由OSGi Alliance组织制定的Java模块化规范,该规范的核心部分是一个框架,其中定义了应用程序的生命周期模式和服务注册。...在OSGI框架中,每一个Bundle实际上都是可热插拔的,因此,对一个特定的Bundle进行修改不会影响到容器中的所有应用,运行的大部分应用还是可以照常工作。...3、可复用性强,OSGI框架本身可复用性极强,很容易构建真正面向接口的程序架构,每一个Bundle 都是一个独立可复用的单元。...使用OSGI的缺点如下: 1、每个Bundle都由单独的类加载器加载,与一些Java EE项目中使用比较多的框架整合比较困难,如Spring MVC、Struts2等,例如笔者尝试在OSGI应用中整合...2、目前OSGI框架提供的管理端不够强大,现在的管理端中仅提供了基本的Bundle状态管理、日志查看等功能,像动态修改系统级别的配置(config.ini)、动态修改Bundle的配置(Manifest.mf

    2.4K10
    领券