【发布时间】:2017-02-17 09:33:05
【问题描述】:
是否可以检测当前 AEM Workbench Process 在 Adobe AEM Workflow 中运行在哪台服务器上?仅当工作流在非生产服务器上运行并且我们希望在生产和非生产服务器上具有相同的工作流时,我们才希望对文档进行水印。
【问题讨论】:
是否可以检测当前 AEM Workbench Process 在 Adobe AEM Workflow 中运行在哪台服务器上?仅当工作流在非生产服务器上运行并且我们希望在生产和非生产服务器上具有相同的工作流时,我们才希望对文档进行水印。
【问题讨论】:
推荐的方法是为此服务器/环境级别的隔离使用运行模式。
见: https://docs.adobe.com/docs/en/aem/6-2/deploy/configuring/configure-runmodes.html
简而言之,您在启动时将运行模式运行时参数传递给您的实例,API 将运行模式暴露给您的逻辑,这些逻辑可以针对特定的运行模式进行更改。这就是 AEM 区分作者和出版商的方式。您可以根据需要传递任意数量的运行模式。例如,一个实例可以有生产和作者或生产和发布模式。
【讨论】:
您可以使用org.apache.sling.settings.SlingSettingsService 来完成此操作
示例代码 sn-p 可以在您的 JSP 中打印运行模式,如下所示,同样可以在您的 OSGI JAVA 逻辑中使用。
<%@page import="org.apache.sling.settings.SlingSettingsService%>
<%
pageContext.setAttribute("runModes", sling.getService(SlingSettingsService.class).getRunModes().toString());
%>
<%= pageContext.getAttribute("runModes") %>
上面的代码 sn-p 将 JSP 中的输出打印为[samplecontent, author, crx3tar, crx3],其中我的本地实例在作者模式下运行,带有示例内容。可以在您的实例中找到/system/console/status-slingsettings。
【讨论】:
使用“SlingSettingsService”。可以在您的流程步骤中引用它,如下所示:
@Component(service = WorkflowProcess.class)
public class YourWorkflow implements WorkflowProcess{
@Reference private SlingSettingsService slingSettings; ...
您可以使用以下方法检查您的环境:
@Override
public void execute(WorkItem workItem, WorkflowSession wfSession, MetaDataMap args) throws WorkflowException {
if(slingSettings.getRunModes().contains("non-production-run-mode-name")) {
//TODO: apply watermark
}
}
【讨论】: