小编ave*_*joe的帖子

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

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

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

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

我们使用下面的代码来获取存储库和创建会话:

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();
    } 
}
Run Code Online (Sandbox Code Playgroud)

以上代码适用于Jackrabbit的每个操作,因此会话在每次操作后关闭.并且只有一个Web应用程序可以访问Jackrabbit存储库.

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

java jackrabbit jcr

5
推荐指数
1
解决办法
1703
查看次数

标签 统计

jackrabbit ×1

java ×1

jcr ×1