如何在 MongoDB 中存储 Apache Sling 内容?

How to store Apache Sling content in MongoDB?

我也是 Java 和 Apache Sling 的新手。我一直在尝试 link 使用 MongoDB 吊索,这些是我到目前为止所做的:

  1. 我在 Sling 控制台中配置了 NoSQL MongoDB Resource Provider

  1. 然后 Oak Document Node Store Service:

  1. 最后,我 运行 java -Dsling.run.modes=oak_mongo -jar org.apache .sling.launchpad-9.jar -c sling -f - 在 mongodb 模式下 运行 吊索发射台。这是结果:

因此,在 MongoDB 中创建了一个名为 "sling" 的数据库,我可以通过 Robo-3T(一个 MongoDB 管理工具)看到它:

在使用以下插件通过我的 Maven 应用程序创建一些内容并将其部署到 Sling 后,我能够在 Sling 浏览器中看到我新创建的节点和资源 (http://localhost:8080/bin/browser.html):

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <extensions>true</extensions>
            <version>3.3.0</version>
            <configuration>
                <instructions>
                    <Sling-Nodetypes>
                        SLING-INF/nodetypes/nodetypes.cnd
                    </Sling-Nodetypes>
                    <Sling-Initial-Content>
                        SLING-INF/scripts;overwrite:=true;uninstall:=true;path:=/apps/test1/nodes,
                        SLING-INF/content;overwrite:=true;uninstall:=true;path:=/content/test1
                    </Sling-Initial-Content>
                </instructions>
            </configuration>
        </plugin>
    </plugins>
</build>

但是,我需要将所有内容存储在 MongoDB 数据库中,但目前,数据库中没有存储任何内容。我怎样才能做到这一点?

最简单的方法是使用以下参数启动 Sling Launchpad:-Dsling.run.modes=oak-mongo。这将确保 Oak 配置为使用 Mongo。您必须删除 sling 目录,否则 运行 模式将不会更改。


您所做的尝试是:

  1. 添加一个新的资源提供者,它会隐藏存储库根目录中的当前资源提供者。不知道实际效果如何,估计是被拒了-请看sling error log
  2. 配置一个使用 Mongo 的新 Oak NodeStoreService - 但它可能没有被拾取,因为已经有一个 NodeStoreService 在运行 - Sling 需要一个来启动。