gpt4 book ai didi

java - 用于并发访问的 Jackrabbit 存储库锁定

转载 作者:搜寻专家 更新时间:2023-10-31 20:34:39 25 4
gpt4 key购买 nike

我们有一个 REST 层和后端作为 Jackrabbit 实现。我们使用了默认设置的 TransientRepository。当同时触发两个请求(仅用于读取节点)时,我们将面临以下错误:

:RepositoryLock.acquire(134)::检测到现有锁文件 {tomcat}/.lock。存储库未正确关闭。javax.jcr.RepositoryException:存储库主页 {tomcat} 似乎正在使用中,因为名为 .lock 的文件已被当前进程锁定。

长耳兔维基页面:http://wiki.apache.org/jackrabbit/RepositoryLock提到当存储库已经在同一进程中打开但在另一个类加载器中(例如,在另一个 Web 应用程序中)时,就会发生这种情况。在这种情况下,您需要确保在停止 Web 应用程序时关闭存储库。

我们使用以下代码获取存储库和创建 session :

try {
Repository repository = new TransientRepository(REPO_CONFIG_FILE, REPO_HOME_DIR);
session = repository.login(new SimpleCredentials(REPOSITORY_USERNAME, REPOSITORY_PASSWORD.toCharArray()));
} finally {
if(session != null){
session.logout();
}
}

以上代码是针对 Jackrabbit 的每一次操作,因此每次操作后 session 都会关闭。而且只有一个 Web 应用程序访问 Jackrabbit 存储库。

RepositoryLock页面给出的解决方案建议使用Repository Server。这是这里唯一的解决方案,还是我在配置或编码时遗漏了什么?

最佳答案

也许你应该使用方法

loggedOut(SessionImpl session) Removes the given session from the set of open sessions. which is specificto this repositiry or use a Repository Server in an application listener and have it accessible through JNDI so you could start / stop it cleanly ?

关于java - 用于并发访问的 Jackrabbit 存储库锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20146053/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com