如何设置 Apache Sling 以使用关系数据库

Posted

技术标签:

【中文标题】如何设置 Apache Sling 以使用关系数据库【英文标题】:How to set up Apache Sling to use a relational DB 【发布时间】:2019-05-02 18:15:43 【问题描述】:

我在使用 Jackrabbit Oak 作为内容存储库的 Sling 11。我想知道如何设置 Sling 以将 JCR 存储库存储在 RDBMS(具体为 DB2)上。

我在Jackrabbit Persistence 上找到了这个链接,但看起来它不适用于 Oak 并且 Oak 文档主要是关于 MongoDB 的。

还找到了Cassandra Resource Provider 的实现,尽管它似乎旨在访问映射到 Cassandra 的特定路径而不使用 Oak。

谢谢,

【问题讨论】:

sling 是作为 jcr 的 Web 界面开发的,并且与 Oak (jcr repo) 硬连线,oak 可以使用不同的持久性后端,例如基于 tar 的段存储、mongodb、aws s3 等。afaik 任何关系数据库不支持 ootb。 我认为是,[oak 1.8 发行说明] (apache.org/dist/jackrabbit/oak/1.8.9/RELEASE-NOTES.txt) 提到了 PostgreSQL 和 RDB*Store 的修复,之前的更新也参考了 DB2。 [RDBDocumentStore] (github.com/apache/jackrabbit-oak/blob/trunk/oak-store-document/…) 源代码也是如此 确实支持DB2。如果您查看 Oak 测试用例或 Oak-run,您将看到如何设置它的示例。 哦..我不知道这一点。 看来我需要将 DB 驱动程序打包到 OSGi 包中,修改 Sling 的配置脚本以将该包推送到 Felix,然后我可以开始在 DocumentNodeStoreService 中设置参数。 【参考方案1】:

在这里回答,但归功于Sling user's mailing list

    将 DB 驱动程序打包在 OSGi bundle 中 下载 Sling 的入门项目

    在 boot.txt 中添加一个新的运行模式(在我的情况下是 Oak_db2)

    [设置] sling.run.mode.install.options=oak_tar,oak_mongo,oak_db2

    下载Sling的数据源项目并编译。

    在 Oak.txt 中配置运行模式(这将在 Felix 中为您加载包):

    [工件 startLevel=15 runModes=oak_db2] com.h2database/h2-mvstore/1.4.196 com.ibm.db2/jcc4/11.1 org.apache.sling/org.apache.sling.datasource/1.0.3-SNAPSHOT

并设置将管理持久性的服务:

[configurations runModes=oak_db2] 
org.apache.jackrabbit.oak.plugins.document.DocumentNodeStoreService
documentStoreType="RDB"

org.apache.sling.datasource.DataSourceFactory   
url="jdbc:db2://10.1.2.3:50000/sling"            
driverClassName="com.ibm.db2.jcc.DB2Driver"     
username="****"     
password="****"     
datasource.name="oak"
    创建一个名为“sling”的数据库。 使用 java -jar -Dsling.run.modes=oak_db2 sling-starter.jar 运行

【讨论】:

以上是关于如何设置 Apache Sling 以使用关系数据库的主要内容,如果未能解决你的问题,请参考以下文章

Apache Sling 中的摘要身份验证是不是可行?

Sling vs CMIS 作为 Apache jackrabbit 的 REST 接口

使用Sling Pipes比其他方式修改内容有什么好处?

使用 Sling Launchpad 进行生产

Sling/OSGi 请求范围对象问题。如何访问过滤器和服务类中对象的相同实例(在相同的请求上下文中)?

从 Sling API JSON Post 获取代码 500