2016-07-18 7 views
0

Я использую AEM 6.1 с Maven в качестве менеджера по строительству. Я обновил локальную папку .m2 с помощью unobfuscated UberJar, предоставленного Adobe. Я получаю следующее сообщение об ошибке:AEM 6.1 Uber Jar Maven Dependency

ERROR [JobHandler: /etc/workflow/instances/server0/2016-07-15/model_157685507700064:/content/myApp/testing/wf_test01] com.adobe.granite.workflow.core.job.JobHandler Process implementation not found: com.myApp.workflow.ActivatemyAppPageProcess com.adobe.granite.workflow.WorkflowException: Process implementation not found: com.myApp.workflow.ActivatemyAppPageProcess at com.adobe.granite.workflow.core.job.HandlerBase.executeProcess(HandlerBase.java:197) at com.adobe.granite.workflow.core.job.JobHandler.process(JobHandler.java:232) at org.apache.sling.event.impl.jobs.JobConsumerManager$JobConsumerWrapper.process(JobConsumerManager.java:512) at org.apache.sling.event.impl.jobs.queues.JobRunner.run(JobRunner.java:205) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745)

UberJar, кажется, не имеют com.adobe.granite.workflow.core.job пакет. Есть ли способ решить эту проблему?

.execute метод стадии процесса ActivatemyAppPageProcess:

public void execute(WorkItem workItem, WorkflowSession workflowSession, MetaDataMap args) throws WorkflowException { 
    Session participantSession = null; 
    Session replicationSession = null; 
    // ResourceResolver resourceResolver = null; 
    try { 
     log.info("Inside ActivatemyAppPageProcess "); 
     Session session = workflowSession.getSession(); 
     if (replicateAsParticipant(args)) { 
      String approverId = resolveParticipantId(workItem, workflowSession); 
      if (approverId != null) { 
       participantSession = getParticipantSession(approverId, workflowSession); 
      } 
     } 
     if (participantSession != null) 
      replicationSession = participantSession; 
     else { 
      replicationSession = session; 
     } 

     WorkflowData data = workItem.getWorkflowData(); 
     String path = null; 
     String type = data.getPayloadType(); 
     if ((type.equals("JCR_PATH")) && (data.getPayload() != null)) { 
      String payloadData = (String) data.getPayload(); 
      if (session.itemExists(payloadData)) 
       path = payloadData; 
      } 
      else if ((data.getPayload() != null) && (type.equals("JCR_UUID"))) { 
       Node node = session.getNodeByUUID((String) data.getPayload()); 
       path = node.getPath(); 
      } 
      ReplicationOptions opts = null; 
      String rev = (String) data.getMetaDataMap().get("resourceVersion", String.class); 
      if (rev != null) { 
       opts = new ReplicationOptions(); 
       opts.setRevision(rev); 
      } 
      opts = prepareOptions(opts); 

      if (path != null) { 
       ResourceCollection rcCollection = 
        ResourceCollectionUtil 
         .getResourceCollection(
          (Node) this.admin.getItem(path), 
           (ResourceCollectionManager) this.rcManager); 
       boolean isWFPackage = isWorkflowPackage(path, resolverFactory, workflowSession); 
       List<String> paths = getPaths(path, rcCollection); 
       for (String aPath : paths) 
        if (canReplicate(replicationSession, aPath)) { 
         if (opts != null) { 
          if (isWFPackage) { 
           setRevisionForPage(aPath, opts, data); 
          } 
          this.replicator 
            .replicate(replicationSession, 
                getReplicationType(), 
                 aPath, 
                  opts); 
          } else { 
           this.replicator 
             .replicate(replicationSession, 
                 getReplicationType(), 
                  aPath); 
         } 
        } else { 
         log.debug(session.getUserID() + " is not allowed to replicate " + "this page/asset " + aPath + ". Issuing request for 'replication"); 

         Dictionary properties = new Hashtable(); 
         properties.put("path", aPath); 
         properties.put("replicationType", getReplicationType()); 
         properties.put("userId", session.getUserID()); 
         Event event = new Event("com/day/cq/wcm/workflow/req/for/activation", properties); 
         this.eventAdmin.sendEvent(event); 
        } 
      } else { 
       log.warn("Cannot activate page or asset because path is null for this workitem: " + workItem.toString()); 
      } 
     } catch (RepositoryException e) { 
      throw new WorkflowException(e); 
     } catch (ReplicationException e) { 
      throw new WorkflowException(e); 
     } finally { 
      if ((participantSession != null) && (participantSession.isLive())) { 
       participantSession.logout(); 
       participantSession = null; 
      } 
     } 
    } 
+0

Как вы добавили зависимость uber-jar? Можете ли вы добавить копию части вашего пом? –

+0

я добавил зависимость POM следующим образом: com.adobe.aem супер-банку 6.1.0 APIs при условии Redman

+0

кажется правильным. См. Мой ансер ниже, пакет просто недоступен. –

ответ

2

com.adobe.granite.workflow.core.job не экспортируется в AEM вообще. Это означает, что вы не можете использовать его, потому что он невидим для вашего кода.

com.adobe.granite.workflow.core комплект только экспорт com.adobe.granite.workflow.core.event. Если вы работаете с рабочими процессами AEM, вы должны придерживаться пакета com.adobe.granite.workflow.api.

Следующие пакеты экспортируются в этой связке, и поэтому полезной:

com.adobe.granite.workflow,version=1.0.0 
com.adobe.granite.workflow.collection,version=1.1.0 
com.adobe.granite.workflow.collection.util,version=1.0.0 
com.adobe.granite.workflow.event,version=1.0.0 
com.adobe.granite.workflow.exec,version=1.0.0 
com.adobe.granite.workflow.exec.filter,version=1.0.0 
com.adobe.granite.workflow.job,version=1.0.0 
com.adobe.granite.workflow.launcher,version=1.0.0 
com.adobe.granite.workflow.metadata,version=1.0.0 
com.adobe.granite.workflow.model,version=1.0.0 
com.adobe.granite.workflow.rule,version=1.0.0 
com.adobe.granite.workflow.serialization,version=1.0.0 
com.adobe.granite.workflow.status,version=1.0.0 

Даже если uber.jar есть пакеты, если вы посмотрите на экземпляр AEM на /system/console/bundles и нажмите на com.adobe.granite.workflow.core пакет, вы увидите что в «экспортированных пакетах» нет com.adobe.granite.workflow.core.job. Поэтому, даже если ваша IDE, Maven и/или Jenkins могут справиться с этим, AEM не сможет выполнить ваш код.

В AEM вы можете использовать только пакеты, которые экспортируются в один из доступных пакетов или включены в ваш комплект - что было бы плохой идеей. Тогда у вас будет две версии одного и того же кода, что приведет к дальнейшим проблемам.

Увидев код, я бы сказал, что здесь есть еще одна проблема. И решение этого поможет вам избавиться от другого.

Вы пытаетесь запустить другой WF (запрос на активацию) для пути, который уже используется в рабочем процессе. Чтобы выполнить это, вам необходимо завершить текущий экземпляр рабочего процесса.

Пример для чистого способа сделать это было бы:

Workflow workflow = workItem.getWorkflow(); 
WorkflowData wfData = workflow.getWorkflowData(); 
workflowSession.terminateWorkflow(workflow); 
Map<String, Object> paramMap = new HashMap<String, Object>(); 
if (!StringUtils.isEmpty(data.getNextParticipantUid())) { 
    paramMap.put("nextParticipant", "admin"); 
} 
workflowSession.startWorkflow(
    workflowSession.getModel(WORKFLOW_MODEL_PATH, wfData, paramMap); 
+0

Убер-банка, которую я использую, имеет указанные пакеты .. так что с помощью пакета com.adobe.granite.workflow.api не решает проблему. – Redman

+0

Даже если у uber.jar есть пакеты (я никогда не говорил, что у них их нет), если вы посмотрите на свой экземпляр AEM в/system/console/bundles и нажмите com.adobe.granite.workflow.core пакета, вы увидите, что в «экспортированных пакетах» нет com.adobe.granite.workflow.core.job. Поэтому, даже если ваша IDE, Maven и/или Jenkins могут справиться с этим, AEM не сможет выполнить ваш код. –

+0

Да, имеет смысл .. спасибо за это направление .. но теперь, чтобы реорганизовать код, чтобы использовать экспортированные пакеты, что является подходящей альтернативой службе JobHandler, которая дает ошибку – Redman

0

Возможная причина ошибки может быть, что ваш рабочий процесс com.myApp.workflow.ActivatemyAppPageProcess службы/компонент не активен из-за чего его не связан с JobHandler-х список доступных процессов, вызывающих это исключение.

У вас есть аккаунт /system/console/components, в котором ваш пользовательский компонент процесса активен? Если нет, вам придется разрешить зависимость, которая вызывает недоступность службы/компонента.

+0

мой пользовательский компонент процесса находится в состоянии «удовлетворен». – Redman

+0

Вы хотите сказать, что компонент активен, и все зависимости удовлетворены? –

+0

Можете ли вы поделиться снимком информации о компоненте (расширенный) –