将 POJO 保存到 Jackrabbit JCR 中的最佳方法是什么?

2024-03-17

在 Jackrabbit 中,我经历了两种将 POJO 保存到存储库节点中以存储在 Jackrabbit JCR 中的方法:

  1. 写我自己的层 和
  2. 使用 Apache Graffito

事实证明,编写我自己的代码既耗时又费力(必须编写并运行大量丑陋的自动化测试),尽管相当灵活。

使用 Graffito 令人失望,因为它似乎是一个“死”项目停留在2006年 http://incubator.apache.org/graffito/news.html

有哪些更好的选择?


另一种选择是完全跳过 OCM 框架并简单地使用javax.jcr.Node作为一个非常灵活的 DAO 本身。 OCM 框架存在的根本原因是因为使用 RDBMS,您需要从对象到关系模型的映射。有了JCR,它已经非常面向对象(节点〜=对象),这个根本原因就消失了。剩下的就是,使用 DAO,您可以限制程序员可以在其代码中访问的内容(包括自动完成的帮助)。但这种方法并没有真正利用 JCR 概念,这意味着无模式且灵活的编程。直接在代码中使用 JCR API 是遵循该概念的最佳方式。

想象一下,您想要在应用程序生命周期的后期向现有节点/对象添加新属性 - 使用 OCM 框架,您还必须修改它并确保它仍然正常工作。通过直接访问节点,只需进行单点更改。我知道,这是解决例如拼写错误问题的好方法。财产名称;但这种担心并没有真正得到现实的支持,因为在大多数情况下,当您测试应用程序时,您很快就会注意到拼写错误或不匹配的名称。一个好的解决方案是使用字符串常量作为公共节点或属性名称,即使作为 API 的一部分(如果您在它们之间公开 JCR API)也是如此。这仍然使您可以灵活地快速添加新属性,而无需采用 OCM 层。

为了对允许的内容或强制的内容(即“半模式”)进行一些限制,您可以使用节点类型和混合(从 JCR 2.0 开始,您还可以更改现有内容的节点类型):因此您可以完全处理这个问题在存储库级别,除了捕获异常之外,不必关心应用程序代码中的类型和约束;-)

但是,当然,这种选择取决于您的要求和个人喜好。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 POJO 保存到 Jackrabbit JCR 中的最佳方法是什么? 的相关文章

随机推荐

  • 使用强命名程序集进行插件安全吗?

    我正在寻找一种方法来防止未知方将他们自己的包含恶意代码的插件附加到我的应用程序中 我偶然发现了这篇文章 NET 程序集插件安全性 https stackoverflow com q 932339 1462656 它建议对程序集进行强命名 并
  • next.js 和 mongodb atlas - 收到“配置限制的连接百分比已超过 80”警报

    我在 MongoDB Atlas 上看到了很多关于此警报的帖子和文章 配置限制的连接百分比已超过 80 但不知道如何在我的 Next js 应用程序中解决它 我在处理程序函数之外创建数据库连接 我使用了中间件withDatabase js
  • 在phonegap中打开软键盘时,showkeyboard/hidekeyboard事件不会在ios 7上触发

    我有一段非常简单的代码 只是为了尝试在软键盘打开时发出警报 我只是想证明这是显示键盘打开的可行方法 document addEventListener deviceready function app deviceReady documen
  • 用于 RSSI 距离近似的卡尔曼滤波器

    我目前正在开发一个项目 该项目利用 RSSI 信号来确定用户与三个信标之间的距离 虽然我有粗略的三角测量公式 但我正在努力使一些东西更加准确 通过我所有的研究 我发现了卡尔曼滤波器 从我读到的有关它们的内容来看 它们似乎正是我想要使用的 然
  • Android 手机通话流

    Android 是否可以在发送电话数据之前对其进行实时操作 例如 通过创建一个缓冲区来记录语音然后发送 或者它是否不可访问 并且必须始终是 实时 抱歉 没有 Android 应用程序不支持通过电话与音频流交互的方式
  • Javascript:更改复选框上的标签背景颜色

    我试图根据复选框的选中 未选中状态更改表单中每个复选框中标签的背景颜色 到目前为止 我最初更改了它 但当我取消选中时它不会变回来 http jsfiddle net 7wnCL 4 http jsfiddle net 7wnCL 4 jav
  • 同步和异步通信到底如何工作

    我试图理解术语同步和异步通信 但我有点困惑 我试着深入研究一下this https stackoverflow com questions 1596589 why are asynchronous processes not called
  • Java 脚本无法在 html 电子邮件模板中运行

    我有一个场景 我需要使用 c 发送电子邮件 这可以使用 SMTP 轻松完成 但挑战是将 Web 服务合并到 html 邮件中 因此我在邮件正文中使用了 java 脚本来访问 Web 服务发出按钮点击声 作为一个 html 网页 它工作得很好
  • 以编程方式更改过期的 Oracle 数据库密码?

    在我工作的地方 一些数据库会从生产环境复制到测试环境 但 DBA 在复制后立即将 新 测试数据库上的所有密码设置为过期 以便不知道生产密码 因此 如果我运行 sqlplus 并使用特定用户名连接到测试数据库 它会立即提示我输入新密码 有没有
  • 使用 RDCOMClient 通过 R 中的 Outlook 发送电子邮件附件

    我正在运行每日分析 生成一个我想通过我的 Outlook 电子邮件发送的文件 我使用的代码在这里 并且工作得很好 但它的附件部分从来没有工作过 library RDCOMClient OutApp lt COMCreate Outlook
  • 增加 Windows 上的堆栈大小 (GCC)

    有没有办法在使用 GCC 编译 链接时增加 Windows 应用程序的堆栈大小 IIRC 在 GCC 中 您可以向 ld 提供 stack bytes 参数 E g gcc Wl stack 16777216 o file exe file
  • Grails 外部配置。无法访问外部变量。总是[:]

    我无法让 文件夹 外部变量工作 我总是得到 我正在 Windows 下使用 Grails 进行开发 这就是为什么外部配置文件看起来像 file C path to file 我在另一个项目中使用外部配置没有问题 与下面显示的方式相同 我有这
  • 基于数组项获取集合给出“FAILED_PRECONDITION:查询需要索引”[重复]

    这个问题在这里已经有答案了 我试图获取所有具有 数学 标签的问题 但它没有成功 而是转移到失败的监听器 db collection questionCollection orderBy questionID Query Direction
  • 如何从 SQuirreL SQL 调用带有 OUT 参数的 DB2 存储过程?

    我真的很喜欢 SQuirreL SQL 作为 SQL 查询工具 但我一直无法让它调用我们的 AS 400 DB2 数据库中的存储过程 我总是收到错误 设置或注册的参数值的数量与参数的数量不匹配 我已经仔细检查了参数的数量 但没有运气 这是我
  • BufferedReader 在 read() 处阻塞

    我试图创建一个简单的聊天程序 带有 服务器 和客户端 现在我的问题是程序在从服务器读取消息到客户端时阻塞 反之亦然 此示例解决了从客户端到服务器的消息问题 我在服务器端的示例 private Reader input private Wri
  • 使用 tomcat7 maven 插件中的“运行”目标的 Eclipse maven 运行配置不尊重默认上下文路径

    我正在本地开发一个 Web 服务 使用 maven 构建并部署到 tomcat 我正在使用 Maven 插件在本地运行 使用mvn tomcat run作为我的运行配置 现在 我的服务正在使用默认项目名称作为上下文路径进行部署 http l
  • 如果我在脚本仍在执行文件 I/O 操作时突然关闭脚本,会发生什么情况?

    这是我的问题 我正在编写一个脚本来检查我的网站是否运行正常 基本思想是每隔 5 分钟左右获取服务器响应时间和类似的东西 并且脚本每次检查后都会记录信息服务器状态 我知道在检查 写入日志的过程中关闭脚本是没有好处的 但我很好奇如果有很多服务器
  • SQLite 错误:无法删除WhereListIterator`1:它没有 PK

    我尝试在 Visual Studio 2012 中使用 SQLite C 从数据库中删除记录 每当我尝试删除记录时 都会收到以下错误 SQLite 错误 无法删除WhereListIterator 1 它没有 PK 我想使用两种不同的方法删
  • 使用本地 Python 脚本启动本地 PHP 脚本

    我正在编写的 Python 程序需要在 Python 进程之外启动本地 PHP 脚本 该程序还需要将参数传递给 PHP 脚本 到目前为止 这似乎启动了脚本 os system path to script here param param
  • 将 POJO 保存到 Jackrabbit JCR 中的最佳方法是什么?

    在 Jackrabbit 中 我经历了两种将 POJO 保存到存储库节点中以存储在 Jackrabbit JCR 中的方法 写我自己的层 和 使用 Apache Graffito 事实证明 编写我自己的代码既耗时又费力 必须编写并运行大量丑