问题标签 [crx]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3498 浏览

unit-testing - 在 Adob​​e CQ5 CRXDE 中编译引用 Felix OSGI 捆绑 JUnit 代码的单元测试

我想编写一些在 Adob​​e CQ 5.4 中运行的单元测试。我正在做本文中描述的在 CQ 中进行测试的内容:

http://jtoee.com/2011/09/799/

但是,在我的 Java 代码中创建单元测试类之后,它不会在 CRXDE 中编译,因为它无法解析 org.junit 命名空间。我按照描述(Apache Sling JUnit Core)在 Felix 中安装并激活了 JUnit 包,但我猜我还需要做一些其他事情才能在 CRXDE 中找到这个活动的 Felix 包。我连接的 CQ5 实例中的 Felix 包显示了这些导出的包:

在下面的这个示例单元测试代码中,最后三个导入语句“无法解析”。

我的新手理解是,安装在 Felix 中的 OSGI 包应该可供我使用 CRXDE 在我的 Java 类中引用,但我安装的 JUnit 包没有发生这种情况。为什么不?我需要做什么才能让CRXDE找到 OSGI 包引用并在 CRXDE 中编译?

0 投票
2 回答
4164 浏览

jsp - 将外部 Java 库添加到 Adob​​e/Day CRX (2.2) 以用于 JSP 文件

我的公司正在研究使用 Adob​​e CQ5 作为新的内容管理系统,我的任务是弄清楚如何用它来做某些事情。

我们想做的一件事是使用我们为 JSP 页面内的 scriptlet 中的旧 Web 应用程序创建的一些 JAR,可能会调用服务或其他东西。

我考虑过使用 OSGi 捆绑包来做这件事,但我认为这不是我们想要做的。现在,我无法确定将要在我们的 JSP 文件中使用的外部库的位置。

我创建了一个只有一个泛型类的 JAR

那是罐子里唯一的东西。

我试着把它放在/crx-quickstart/server/lib/common

该文件夹的自述文件说

“将库放在应该在所有 Web 应用程序和服务器之间共享的文件夹中。”

但是当我尝试访问它时,我的 JSP 文件有一些问题。这是整个 JSP 文件:

当我在浏览器中导航到它时,我收到以下错误:

我可以通过将导入更改为 com.company.test.* 来修复关于包的第一个错误,但它不能修复其他两个错误。

我知道这不是使用服务的最佳“实践”,但我希望只是获得一个概念证明,表明我们可以根据需要使用这些库。任何帮助,将不胜感激。

0 投票
1 回答
401 浏览

osgi - 无法使用 Felix 环境中的 JCR API 连接到 CRX 存储库

我正在尝试使用 JCR API 连接到 CRX 存储库。我按照http://wiki.apache.org/jackrabbit/RemoteAccess的说明进行操作。如果我编写一个普通的 java 类并尝试使用访问 crx 存储库

它完美无缺。如果我将其创建为捆绑包并将其部署在 Felix 中,则它不起作用。我已将所有必需的依赖项放在那里。

0 投票
1 回答
2093 浏览

jackrabbit - Jackrabbit 跨连接节点搜索

我在 Jackrabbit 存储库中标记了对象(实际上是 Adob​​e/Day CQ 的 CRX,但我认为这是 Jackrabbit 代码):

  • 资产:标签= A,B
    • 子资产数据 1:标签 = A、C、E
    • 子资产数据 2:标签 = D、E

我想查询父资产的一组标签和一个孩子的并集,即“B C”将匹配资产,因为我们在父资产和孩子 1 中有这些,但“CD”不匹配,因为没有组合父节点和一个匹配的子节点,因为 C 和 D 被拆分为不同的子数据节点。

有没有办法在 Jackrabbit 中做到这一点?我们可以编写一个 XPath 查询

但这不起作用,因为 XPath 似乎不能保证*加入的子资产是相同的,即这意味着“任何孩子都有 C/D”,因此将匹配我的资产,因为 1+ 孩子有 C 和 1+孩子们有一个 D。相反,我可以使用 JCR-SQL2

SELECT DISTINCT在 JCR-SQL2 中没有:如果我搜索“B E”,我将返回此资产两次,因为它与资产 + 子 1 和资产 + 子 2 匹配。

我可以在 Java 中对任一查询结果进行后处理,即过滤掉第一种情况的误报匹配或过滤掉第二种情况的重复结果,但我很担心这会如何影响分页性能:我需要扫描更多节点不需要清除坏节点,我需要扫描很多以计算分页的正确结果大小。对于第二个 SQL2 案例,这应该更便宜,因为如果我的搜索是有序的,我可以仅根据节点路径发现重复项,并且所有重复项都是连续的,所以我可以通过廉价扫描找到给定页面的数据价值,只希望不阅读每个结果的整个节点,但即使对于简单的仅路径情况,我也不知道扫描所有结果以获取分页计数的成本。

我们考虑的另一个选项是将标签非规范化为单个节点。在这种情况下,为了保持搜索准确,这意味着在每个子节点中创建一个新的 combine_tags 属性并仅针对该组子节点执行所有搜索。但是,如果我们匹配同一资产下的两个子节点,这仍然会遇到明显的问题。

感谢您的任何建议。这已经是一个大型实例,需要进一步扩展。我已经看到其他问题说 ModeShape 是一个 JCR 实现,SELECT DISTINCT但我认为切换到 ModeShape 必须是最后的手段,如果确实可以在 ModeShape 上托管 CQ。


我们现在提出的一个想法是计算资产标签和子标签的每个并集并将标签组合成单个字符串,然后将每个值写入资产的多值属性,即资产 + child1 = "ABC E"和资产 + child2 = "ABD E",所以我们得到

  • 资产:标签= A,B;tagUnions = "ABC E", "ABD E"

只要我们定义了将标签组合成字符串的固定顺序(例如字母顺序),我们就可以使用搜索任何组合tagUnions LIKE '%B%C%'(除了在实际情况下我会在标签之间使用适当的分隔符)。虽然这会起作用,但据我们所见,我真的不喜欢它:每个资产+子项可能有大量标签,所有标签的名称都比单个字母长,这意味着我们最终会得到长字符串来执行LIKE所有的查询它们可能无法有效地被索引。

另一种做法是制作位掩码:定义 A=1、B=2 等,并在此处存储一个多值整数数组,然后进行按位比较。然而,这可能仅限于 64 个不同的标签,并且由于我们有 1,000 多个标签,我认为我们无法做到这一点——即使 JCR 支持按位运算,我希望它不会。

因此,我仍在为此寻找类似数据库的干净解决方案。你已经错过了我提出的赏金,但仍有滴答声、投票和感谢任何帮助。

0 投票
1 回答
862 浏览

adobe - 关于如何在 adobe cq 5.4 中开始开发移动网站的任何建议

任何人都可以提供有关在 cq 日从哪里开始开发移动网站的任何指示吗?如果有教程的网站也请分享?任何帮助将不胜感激

0 投票
1 回答
865 浏览

lucene - 调试 Jackrabbit Lucene 重新索引中止/失败

我正在尝试在 Jackrabbit 2.0 实例(实际上是 Day CRX 2.1 实例)上重建 Lucene 搜索索引,以便我可以为相关性评分应用新的属性提升权重。然而,它在同一点重复中止索引,计数 3173000

*INFO * MultiIndex:索引... /content/xxxxxx/jcr:content (3173000)(MultiIndex.java,第 1209 行)
*INFO * RepositoryImpl:关闭存储库...(RepositoryImpl.java,第 1139 行)

(公司名称已编辑)让 CRX Web 实例显示

java.lang.IllegalStateException:存储库不可用。

日志中没有说明它关闭的原因。在任何更高级别的跟踪上,这两者之间没有更多的线。提到的路径存在并且不起眼。Jackrabbit 每 100 个节点记录一次路径,因此它可能是导致故障的下 100 个节点中的任何一个。

知道可能出了什么问题,或者我该如何调试?

(不幸的是,这是我无法深入了解的问题之一——我不能告诉你更多,因为我不知道去哪里找。)

0 投票
1 回答
822 浏览

unit-testing - 在 CQ5 中回滚集成测试数据

我正在寻找在 CQ5 中进行集成测试后进行清理的解决方案。经过一段时间的研究后,我们确实设法在 CQ5 中运行 JUnit 测试(这是错误的记录)。现在一切都按预期工作,我们正在寻找一种解决方案,在 CQ5 服务器上使用 maven-deployment 运行这些测试,然后清理测试数据。例如,我们为测试目的创建的测试用户或测试页面,之后我们不想在系统中拥有。crx 中是否有解决方案来做类似的事情?到目前为止,我们还考虑过使用测试进行部署,然后再次不进行测试,或者立即使用快照进行部署,而不是运行测试并再次安装快照。但是所有这些解决方案都非常耗时,因为我们有很多服务器要部署,所以时间很宝贵:)

0 投票
1 回答
1081 浏览

aem - 通过 sling 重命名用户

我们有一个外部身份管理系统,它必须使用 Sling 和 REST 管理 CQ5 中用户的生命周期。

我们能够创建和删除用户和组

  • 创造

    /li>
  • 删除

    /li>

我们的问题是我们没有找到如何重命名用户(或组)。

我们如何重命名用户?

我们找到的唯一解决方案是

  1. 列出用户的所有组成员身份
  2. 删除用户
  3. 创建一个新用户
  4. 重新创建所有组成员身份

虽然这个解决方案可以工作,但它很可能会带来一些性能问题(我们有超过 70K 的用户和超过 15K 的组)。如果这是唯一的解决方案:我们如何通过 REST 有效地执行第一步(列出所有成员)

0 投票
1 回答
167 浏览

javascript - 理论上是否可以使用 chromium 的 installable-webapp API 构建纯 JS bittorrent?

我想我听说他们现在甚至允许有限/沙盒文件系统访问,那么有什么障碍吗?bittorrent 协议是否需要原始访问来启动不一定是 HTTP 的 TCP 连接?在 chromium JS 执行环境中是否有任何机制或设施?我记得有一个 bitfox XPI 客户端或其他东西,但我现在找不到它,我不确定它是否使用了 java 小程序或类似的东西。

NaCL 怎么样,这会改变一切吗?

0 投票
1 回答
1388 浏览

jackrabbit - 在 Jackrabbit 存储库之间复制 Lucene 索引

我有两个包含相同内容的 Jackrabbit 实例。重建 Lucene 索引很慢,需要 30 多个小时,而且集群中所需的停机时间是有风险的。是否可以只重新索引一个 Jackrabbit,然后将 Lucene 索引从该实例复制到另一个?

天真地复制工作区目录下的 Lucene 索引文件是行不通的。问题似乎是内容是由映射到 UUID 的文档编号索引的,该 UUID 映射到索引节点的 JCR 路径,但是对于 Jackrabbit 实例之间的给定路径,这些 UUID 不稳定。(两者实际上都是由 CQ 作者实例复制填充的 Day CQ 发布者实例。)

我已经设法在 /jcr:system/jcr:versionStorage/ 下的存储库中找到 UUID 到路径的映射,但是我看不到在存储库之间复制它以及 Lucene 索引的简单方法。然后我在文件中的任何地方都找不到 UUID->document ID 映射 - 这也是 Lucene 索引的一部分吗?

谢谢你的帮助。我倾向于单独重新索引第二个实例并接受停机时间,但任何降低风险的想法或重新索引集群所用的时间都值得赞赏!


最后,我们将采用 re-index-them-both 路线:我们已经设法将一个测试实例重新定位为一个额外的活动实例,我们可以暂时将其放入农场,同时我们将另外两个依次取出来重新-指数。但是,我仍然有兴趣听到更好的方法来做到这一点!