AEM запускает развертывание через Java-класс
Как запустить процесс развертывания в AEM программно?
Благодарю.
2 ответа
После некоторых исследований я обнаружил, как программно запустить развертывание:
В этом конкретном случае я сделал это внутри рабочего процесса:
@Reference
private RolloutManager rolloutManager;
@Reference
private ResourceResolverFactory resourceResolverFactory;
private Session session;
private ResourceResolver resolver;
private PageManager pageManager;
public class MyWorkflow implements WorkflowProcess {
@Override
public void execute(WorkItem workItem, WorkflowSession workflowSession, MetaDataMap dataMap) throws WorkflowException {
//get the payload page from the workflow data
WorkflowData workflowData = workItem.getWorkflowData();
String payload = workflowData.getPayload().toString();
final Map<String, Object> authInfo = new HashMap<String, Object>();
authInfo.put(JcrResourceConstants.AUTHENTICATION_INFO_SESSION, workflowSession.getSession());
resolver = resourceResolverFactory.getResourceResolver(authInfo);
//Get Instance of PageManager
pageManager = resolver.adaptTo(PageManager.class);
final Page targetPage = pageManager.getPage(payload);
final RolloutParams params = new RolloutParams();
params.isDeep = false;
params.master = targetPage;
params.reset = false;
params.trigger = RolloutManager.Trigger.ROLLOUT;
params.delete = false;
rolloutManager.rollout(params);
}
}
Это работает как ожидалось, выкатывая страницу к соответствующим живым копиям
Вот фрагмент кода, который можно использовать для развертывания с уровня JSP, так же, как вы можете сделать это на уровне JAVA.
<%@page import="com.day.cq.wcm.msm.api.RolloutManager"%>
<% Page rolloutthispage = pageManager.getPage("/content/geometrixx/en/toolbar"); //source page
RolloutManager.RolloutParams rolloutparams = new RolloutManager.RolloutParams();
rolloutparams.master = rolloutthispage;
rolloutparams.isDeep = true;
//rolloutmanager is an OSGI service so using here sling.getService to have a reference
com.day.cq.wcm.msm.api.RolloutManager rolloutManager = sling.getService(com.day.cq.wcm.msm.api.RolloutManager.class);
rolloutManager.rollout(rolloutparams);
%>
Чтобы проверить этот фрагмент кода
Я создал живую копию из /content/geometrixx/en/
в /content/geometrixx/in
Добавлены / обновлены некоторые данные текстового компонента, как показано ниже
Создан компонент, только что использованный для вызова этой логики jsp, называемый логикой JSP с некоторой другой страницы проекта. как только логика jsp была вызвана, /content/geometrixx/in
живая копия.
Ознакомьтесь с приведенными ниже API-интерфейсами, чтобы использовать дополнительные параметры RolloutManager, Trigger, RolloutParams
Надеюсь, поможет