【问题标题】:where does p:insert() install the pipeline?p:insert() 在哪里安装管道?
【发布时间】:2016-02-16 13:31:27
【问题描述】:

我有一个 XQuery 函数,用于以编程方式安装 CPF 管道。我正在通过从查询控制台执行函数调用来测试这一点,其中我的内容源设置为启用 CPF 的内容数据库。

我正在执行以下操作来解决正在发生的事情。 $processsed_pipline_config 包含管道配置 XML。返回只返回插入的管道,所以在我看来,管道被插入到只有一个管道的数据库中?

let $pipeline_id := p:insert($processed_pipeline_config)

return
  for $pipeline in p:pipelines()
    return $pipeline

当我进入管理控制台时,这个插入的管道没有显示在内容数据库的管道列表中。

更新

我还尝试在模式 db 的上下文中调用它,如下所示。也没有运气。

  let $pipeline_id :=
    xdmp:invoke-function(
      function() {
         p:insert($processed_pipeline_config)
      },
      <options xmlns="xdmp:eval">
        <database>{ xdmp:schema-database() }</database>
        <transaction-mode>update-auto-commit</transaction-mode>
        <isolation>different-transaction</isolation>
      </options>
    )

【问题讨论】:

    标签: marklogic marklogic-8


    【解决方案1】:

    您应该针对内容数据库的架构数据库运行管道 API,而不是内容数据库:CPF 将在其中查找它。

    p:insert 会将管道插入到具有默认权限的管道集合中。

    我认为您的问题是您在添加管道时在同一事务中获取管道列表。事务不会看到自己提交的结果。如果您在单独的查询中运行查找,您应该会看到您的管道。

    【讨论】:

    • 当我使用 p:pipelines() 进行查询时,我确实看到了我添加的管道,但当我在 CPF=>Pipelines 下的管理控制台中查看管道时,我只是没有看到它。很可能是将管道插入错误的位置。我将尝试在模式 db 的上下文中运行插入。
    • 我尝试按照您的建议对模式数据库运行它。没有成交。当我在插入后使用 p:pipelines() 函数进行查询时,我将其视为唯一的管道。
    • 您确定您也在单独的事务中运行查询吗?我认为最简单的是只使用两个 QC 查询,一个用于插入,另一个用于读取。
    • 考虑使用管理 API 来管理 CPF 资源 - docs.marklogic.com/REST/management/… - 您只需发出 HTTP 请求,而不是直接处理 CPF API。如果您倾向于使用 Java,也请查看 ml-gradle - 这是配置 CPF 的示例项目 - github.com/rjrudin/ml-gradle/tree/master/examples/cpf-project
    • @rjrudin 感谢您的建议。我希望在服务器端 XQuery 中执行此操作,作为我正在开发的库中的一个便利功能,以便在内部使用以根据一些预定义的规则授予角色。
    【解决方案2】:

    解决方案是应该针对触发器数据库而不是内容或架构进行 p:insert() 调用。本质上:

          xdmp:invoke-function(
            function() {
             p:insert($processed_pipeline_config)
            },
            <options xmlns="xdmp:eval">
              <database>{ xdmp:triggers-database() }</database>
              <transaction-mode>update-auto-commit</transaction-mode>
              <isolation>different-transaction</isolation>
            </options>
          )
    

    执行此操作后,管道会显示在管理控制台的列表中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-14
      • 2010-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多