使用细粒度锁的代码示例(JCR Jackrabbit?)

2024-01-09

我正在进行一项学术研究,试图开发一种编程工具,帮助实现细粒度锁定功能,用于维护树状数据结构的并发程序。

例如,程序员可能会编写一些接收树根节点并修改树的函数(通过遍历某些路径并添加/删除节点),该工具将帮助他找到代码中节点应该被锁定的位置,以及它们可以在哪里被释放 - 因此这些函数可以在同一棵树上同时执行。

我正在寻找一些现实生活中的代码示例,其中使用了这种细粒度锁定,或者可以使用它来获得更好的性能,但程序员太懒而无法实现它(例如,他在函数期间锁定了整个树) -调用而不释放无用的节点)。

我读到了 JCR & Jackrabbit,它们使用树形数据库,并找到了一篇解释如何在 JCR 中锁定节点的文章(但没有示例):http://www.day.com/specs/jcr/2.0/17_Locking.html http://www.day.com/specs/jcr/2.0/17_Locking.html

我对数据库的了解非常少,并且我不完全了解 Jackrabbit 数据库和并发性方面允许什么和不允许什么。不允许从2个线程访问同一个节点,但是不同的存储库怎么办?如果 2 个不同的客户端尝试访问同一节点(例如,一个尝试删除它,另一个尝试修改它 - session.save() 会失败吗?)会发生什么?

谢谢, 奥伦


首先,不要混淆数据库/jackrabbit/锁定。 Jackrabbit 实现了自己的锁定,数据库也是如此。

Jackrabbit 允许您使用以下方式锁定节点LockManager.lock()。设置isDeep参数为 true 意味着下面的所有节点也将被锁定。锁定的节点可以被另一个会话读取,但不能修改。

从技术上讲,如果两个线程使用相同的会话,它们可以编辑相同的节点,但这是相当危险的,应该避免。

如果一个节点可能被 2 个并发会话修改,那么您应该始终锁定该节点。最后到达那里的会话应该等待锁被释放。如果您不锁定,那么至少有一个会话将引发异常。

我不确定您所说的访问不同存储库的节点是什么意思。一个节点只能属于一个存储库。如果您的意思是有 2 个 jackrabbit 实例访问同一数据库,那么也应该避免这种情况,或者您应该考虑使用集群。

实现锁定时,这将取决于您的设计和要求。如果您只进行一次会话,那么锁定就没有意义,反之亦然。锁定节点还是子树将取决于您的数据代表什么。例如,如果一个节点代表一个文件夹,您可能只想锁定该节点而不是整个子树。如果子树代表复杂的文档,那么您可能需要锁定子树。

至于锁定整棵树,我希望我不会遇到这样做的人!

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

使用细粒度锁的代码示例(JCR Jackrabbit?) 的相关文章

  • Scheme (Lisp) 中树的深度反转

    我对Scheme中的基本树数据结构进行了深度逆向 define deep reverse t cond null t not pair t t else cons deep reverse cdr t deep reverse car t
  • Python 多处理:全局对象未正确复制到子级

    前几天我回答了一个关于SO的问题 https stackoverflow com q 67047533 1925388关于并行读取 tar 文件 这是问题的要点 import bz2 import tarfile from multipro
  • scala.concurrent.blocking - 它实际上做了什么?

    我花了一段时间学习 Scala 执行上下文 底层线程模型和并发性的主题 你能解释一下通过什么方式吗scala concurrent blocking 调整运行时行为 and 可以提高性能或避免死锁 如中所述scaladoc http www
  • 最低共同祖先算法

    所以我一直在研究实现最低共同祖先算法 我研究了许多不同的算法 主要是 Trajan 解决方案的变体或 RMQ 的变体 我正在使用非二叉树 我的树经常会在查询之间发生变化 因此预处理不一定值得 树的节点数不应超过 50 75 个 我想知道的是
  • Python Pandas 按列对多索引进行排序,但保留树结构

    使用 pandas 0 20 3 我尝试按列 D 对数据帧的 n 个多级进行排序 其中的值 降序 以便维护组的层次结构 输入示例 D A B C Gran1 Par1 Child1 3 Child2 7 Child3 2 Par2 Chil
  • 如何从此 d3.js layout.tree 获取树祖先和树后代的列表?

    我正在尝试和修改this https bl ocks org mbostock 4339083d3 js 的示例 用于根据 JSON 树结构绘制树 这就是树的一部分开始时的样子 我正在尝试进行两个单独的修改 但我不知道该怎么做 当单击节点的
  • 无论线程如何,对象是否总是能看到其最新的内部状态?

    假设我有一个带有简单整数计数变量的可运行对象 每次可运行对象运行时该变量都会递增 该对象的一个 实例被提交以在计划的执行程序服务中定期运行 class Counter implements Runnable private int coun
  • 获取 Future 对象的进度的能力

    参考 java util concurrent 包和 Future 接口 我注意到 除非我弄错了 只有 SwingWorker 实现类才能启动冗长的任务并能够查询进度 这就引出了以下问题 有没有办法在非 GUI 非 Swing 应用程序 映
  • 将 Lambda 表达式树与 IEnumerable 结合使用

    我一直在尝试了解有关使用 Lamba 表达式树的更多信息 因此我创建了一个简单的示例 这是代码 如果作为 C 程序粘贴到 LINQPad 中 它可以工作 void Main IEnumerable
  • Scala 中用于阻止调用的 Future

    The Akka文档说 you may be tempted to just wrap the blocking call inside a Future and work with that instead but this strate
  • Goroutine 是如何工作的? (或者:goroutines 和操作系统线程的关系)

    其他 goroutine 如何在调用系统调用时继续执行 当使用 GOMAXPROCS 1 时 据我所知 当调用系统调用时 线程会放弃控制权 直到系统调用返回 Go 如何在不为每个阻塞系统调用 goroutine 创建系统线程的情况下实现这种
  • 为什么我会得到以下结果? [复制]

    这个问题在这里已经有答案了 我做了以下测试 看看如何 PriorityBlockingQueue
  • Windows 上的虚假唤醒。是否可以?

    我最近学习了 虚假唤醒 有人说这个问题只可能发生在某些类型的 Linux PC 上 我用的是窗户 我为虚假唤醒编写了测试 我得到的结果是这是可能的 但我想向您展示这个测试 也许我在某个地方犯了错误 我的初始变体 import java ut
  • 如何根据递归关系确定递归树的高度?

    如何确定在处理递归运行时时构建的递归树的高度 它与确定普通树的高度有何不同 替代文本 http homepages ius edu rwisman C455 html notes Chapter4 ch4 9 gif http homepa
  • 原子变量能保证内存可见性吗?

    关于内存可见性的小问题 代码示例1 class CustomLock private boolean locked false public boolean lock if locked locked true return true re
  • ThreadPoolExecutor 和队列

    我以为使用线程池执行器 http docs oracle com javase 6 docs api java util concurrent ThreadPoolExecutor html我们可以提交Runnables 要在以下位置执行B
  • XSLT 将平面树结构转换为列表

    我有一个描述eshop树结构的xml文件 我只需要获取所有子组的列表 我不知道结构中有多少个父 子级别 输入 xml 如下所示
  • 使用 C++ 和 BOOST 读取 JSON 文件

    HTTP 服务器向我发送一个 JSON 响应 字符串 如下所示 folders id 109 parent id 110 path 1 105 110 id 110 parent id 105 path 1 105 files id 26
  • 为什么 GetThreadTimes 返回

    我试图测量线程中花费的时间以用于进度报告目的 但我从 GetThreadTimes 系统调用中得到非常奇怪的结果 给出以下程序 在 VS 2013 中编译 针对 NET 4 5 using System using System Diagn
  • 为什么 i++ 不是原子的?

    Why is i Java 中不是原子的 为了更深入地了解 Java 我尝试计算线程中循环的执行频率 所以我用了一个 private static int total 0 在主课中 我有两个线程 主题 1 打印System out prin

随机推荐

  • 如何在 Android 手机上模拟 NFC 标签

    我有一部 Android 手机 nexus s sdk v15 它应使用标签仿真将字符串发送到在 nfc 读取器 写入器模式下运行的开发板 我知道这不是 Android 官方支持的 所以我可以通过直接访问驱动程序来本地完成它 是否有任何人以
  • 如何从 Uri 获取位图?

    如何从 Uri 获取 Bitmap 对象 如果我成功将其存储在 data data MYFOLDER myimage png or file data data MYFOLDER myimage png 在我的应用程序中使用它 有谁知道如何
  • 如何对 MongoDB 中的字段进行加密

    我需要加密 mongo 文档中的一个字段 最好的方法是什么 我用弹簧 有spring注解吗 目前只能通过 java 进行加密 here https stackoverflow com questions 28936242 encrypt p
  • IE8异步文件上传

    我试图找到在 IE8 中异步上传文件 通过 Ajax 的示例代码 上传进度也很好 但不是强制性的 我希望 PHP 代码能够处理文件服务器端 我不断遇到其他浏览器使用 FormData 的示例 但我无法使用它 有人可以指出我正确的方向吗 这是
  • 为什么 :required => true 不适用于 collection_select?

    我想确保用户在提交之前在我的表单中选择一个类别 但是 required gt true似乎不起作用 这是选择 有什么建议吗 Try this 解释 根据 Rails 文档 语法为collection select函数看起来像这样 colle
  • scipy 树形图转 json 用于 d3.js 树可视化

    我正在尝试将 scipy 层次聚类的结果转换为 json 以在 d3 js 中显示一个例子 http bl ocks org mbostock 4063550 以下代码生成具有 6 个分支的树状图 import pandas as pd i
  • Java 到 JavaScript 编译器 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 除了 GET 之外 还有其他 Java 到 JavaScript 编译器吗 目前我所有的工作都是用 Ja
  • 在 C++ 中存储任意对象的列表

    在 Java 中 您可以拥有一个对象列表 您可以添加多种类型的对象 然后检索它们 检查它们的类型 并针对该类型执行适当的操作 例如 如果代码不完全正确 我深表歉意 我是凭记忆写的 List list new LinkedList list
  • Python 中的本地导入语句

    我认为将 import 语句放置在靠近使用它的片段的位置 可以使其依赖关系更加清晰 从而提高可读性 Python 会缓存这个吗 我应该关心吗 这是一个坏主意吗 def Process import StringIO file handle
  • SplunkMint 上传 dSym

    每次尝试运行以下脚本 SplunkMint 脚本自动上传 dsym 文件以进行符号化 时 我都会收到此错误 SCRIPT usr bin find SRCROOT name splunkmint postbuild dsym upload
  • SQL Server CE 密码允许使用的字符吗?

    在我们开发的 Web 应用程序中 我们生成 SQL Server CE 数据库文件 并为这些文件生成密码 密码是使用 System Web Security Membership GeneratePassword 生成的 我认为Genera
  • 如何在 Tomcat 中启用 java 断言

    我想使用Javaassert我的 Spring Web 应用程序中的关键字 主要是在我的域类上 检查构造函数内的不变量 但我看不到如何启用运行时断言检查 对于普通的java应用程序 我会使用 ea使用 java 命令进行切换 但我不知道如何
  • 如何处理 jQuery UI Selectmenu 更改事件

    我使用 jquery ui 选择菜单自定义渲染选项 http jqueryui com selectmenu custom render 我该如何处理change event i try filesA on change function
  • 如何在 ng-repeat (AngularJS) 中绑定多个 JSON 文件?

    我有多个 JSON 文件 主要 json MainRegister name Name1 url url1 json name Name2 url url2 json url1 json SubInformation description
  • 使用 scipy.spatial 的数据类型问题

    我想使用 scipy spatial 的 KDTree 来查找二维数组中的最近邻对 本质上是一个列表列表 其中嵌套列表的维度为 2 我生成列表列表 将其通过管道传输到 numpy 的数组中 然后创建 KDTree 实例 然而 每当我尝试对其
  • 使用 Mockito 模拟 Jersey 客户端

    您好 我正在使用 JUnit 和 Mockito 测试 Jersey Client 1 19 版本 我正在努力获取或阅读该实体 我不知道如何从那里继续 而且我也收到 IllegalStateException 下面是我用来为客户端响应创建模
  • 如何在AWS上自动部署带有子模块的git存储库?

    我的 git 存储库中有一个子模块 我的目录结构如下 app folder1 folder2 submodule 5855 我已使用自动部署服务在 AWS 上部署了我的代码 现在 在服务器上 我的父目录中有代码 但子模块目录为空 Q1 如何
  • 量角器 - 查找所有元素和找到的元素的循环长度,然后单击按钮

    所以我一直在试图弄清楚如何根据 find All 元素的数量来单击按钮 x 次 这意味着如果同一个类名找到 3 个元素 那么我们循环 3 次 这应该单击按钮 3 次 我做了这样的事情 新更新 请查看底部的编辑帖子 通常情况下element
  • StrictMode java.lang.Throwable:检测到未标记的套接字

    启用 StrictMode 后 我刚刚开始收到此异常 java lang Throwable 检测到未标记的套接字 使用 TrafficStats setThreadSocketTag 跟踪所有网络使用情况 有几种方法可以处理此异常 首先
  • 使用细粒度锁的代码示例(JCR Jackrabbit?)

    我正在进行一项学术研究 试图开发一种编程工具 帮助实现细粒度锁定功能 用于维护树状数据结构的并发程序 例如 程序员可能会编写一些接收树根节点并修改树的函数 通过遍历某些路径并添加 删除节点 该工具将帮助他找到代码中节点应该被锁定的位置 以及