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

时间:2017-11-11 09:54:27

标签: java mongodb maven sling jackrabbit-oak

我也是Java和Apache Sling的新手。我一直在尝试将Sling与MongoDB联系起来,这些是我到目前为止所做的:

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

    1. 然后是Oak Document Node Store Service
    2. Oak config

      1. 最后我跑了java -Dsling.run.modes=oak_mongo -jar org.apache .sling.launchpad-9.jar -c sling -f -以mongodb模式运行吊索启动板。结果如下:
      2. Command Prompt

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

        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数据库中,但目前还没有存储在数据库中。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:3)

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

您尝试的方法是:

  1. 添加一个新的资源提供程序,它在存储库根目录中隐藏当前的资源提供程序我不确定实际效果,它可能被拒绝 - 请参阅吊索错误日志
  2. 配置一个使用Mongo的新的Oak NodeStoreService - 但由于已经有一个NodeStoreService正在运行,它可能没有被提取 - Sling需要一个启动。