Expand my Community achievements bar.

Dive into Adobe Summit 2024! Explore curated list of AEM sessions & labs, register, connect with experts, ask questions, engage, and share insights. Don't miss the excitement.

How do I make a process/service asyncronous.

Avatar

Level 4

When I invoke a long-lived process from another process, I get the following run-time error:

"The Long Lived Service x cannot be invoked synchronously."

How can I change the process/service so that is invoked asynchronously?

Thanks.

{NOTE:  It'd be really nice to be able to copy-n-paste into these forum windows.}

9 Replies

Avatar

Employee Advisor

You should also change the calling process to be long-lived, with this you'll be able to invoke it asynchronously. In workbench, right click the process, select configure, click on Advanced tab and change the "Type" to "long-lived".

Hope this helps.

Thanks,

Wasil

Avatar

Level 4

Thanks for the answer.  It appears to be *part* of the solution.

However, I am now getting a run-time error "Long lived operation and is not supported on transient branches".

Unfortunately, it doesn't "point' to a specific process or sub-process that I need to change.

Any ideas?

I am not allowed to post my code or files, at least not w/o special permission; however, one long-term process is invoking another long-term process ....

Avatar

Employee Advisor

I am not sure what's the version of LiveCycle you are using  . In case, it is 7.x, please refer to this : http://ncifrederick.cancer.gov/about/readingroom/css/COTS/LiveCycle/Adobe-LiveCycle-Workflow.pdf

If not, just try to find the branch which is transient/synchronous and change it to asynchronous(you can also refer to server log file to get some more info).

Thanks,

Wasil

Avatar

Level 4

I am using Live Cycle Workbench ES3, version 10.0.2.x

Avatar

Employee Advisor

Can you please share your lca through Acrobat.com ?

Avatar

Level 5

You can use a Script Object within your Short-Lived process to invoke a long-lived process, if that is the issue.

import javax.servlet.ServletException;

import java.util.*;

import com.adobe.idp.dsc.clientsdk.ServiceClientFactory;

import com.adobe.idp.dsc.clientsdk.ServiceClientFactoryProperties;

import com.adobe.idp.dsc.InvocationRequest;

import com.adobe.idp.dsc.InvocationResponse;

import com.adobe.idp.dsc.clientsdk.ServiceClient;

import com.adobe.idp.Document;

String strResultFlg = "FAIL";  //Assume failure status until completed successfully

Document inXML = patExecContext.getProcessDataDocumentValue("/process_data/formData");

System.out.println("formData =  " +  inXML);

      try

      {

            // Create the service client factory

            ServiceClientFactory myFactory = ServiceClientFactory.createInstance();

            //Create a ServiceClient object

            ServiceClient myServiceClient = myFactory.getServiceClient();

           

            //Create a Map object to store the XML input parameter value

            Map params = new HashMap();

            params.put("formData", inXML);

           

            //Create an InvocationRequest object

            InvocationRequest lcRequest =  myFactory.createInvocationRequest(

                "<app_Name>/processes/<Process_Name>", //Specify the long-lived process name

                    "invoke",           //Specify the operation name   

                    params,               //Specify input values

                   false);               //Create an asynchronous request

           

            //Send the invocation request to the long-lived process and

            //get back an invocation response object

            InvocationResponse lcResponse = myServiceClient.invoke(lcRequest);

            String invocationId = lcResponse.getInvocationId();

         // Print the verification message

          System.out.println(invocationId + " was successfully invoked." );

             strResultFlg = "DONE";

           

        }catch (Exception e) {

            System.out.println("Exception thrown while trying to invoke process " +      e.getMessage());

      }

patExecContext.setProcessDataValue("/process_data/@strResultFlg", strResultFlg);

Hope this helps

Mark

Avatar

Level 7

@JosephDoggie

Did you get the solution of your posted problem?

Regards

Sunil

Avatar

Level 9

How about making a custom event of the short lived process of event Throw type and use the same event as an Event start point in the long lived process?

Lets say you have 1 Short Lived process which will accept a document variable as an input and you have one Longlived process which will use that document variable for creating a Task in workspace.

So what gonna you do is create a custom event in the short lived process and capture the document variable. Then in the long lived process use the same event as a Event start point use Xpath to map the event data value to a process variable.

One more thing you can try i.e invoking the long lived process through a webservice.

Does this help?

Thanks,

Bibhu.

Avatar

Level 3

I think it is a bug or a limitation in ES3.

I quickly tested this scenario (long-lived process calling another long-lived process) in ES2 SP2 and it is working.

On ES3, its not working and "Long lived operation and is not supported on transient branches" exception is thrown in server logs.

Request you to open a Support case for this issue by contacting Adobe LiveCycle Support and we can take it from there.

Regards,

Varun Nohria