Failed to load/render property editor when assigning a Userlist from a process in LiveCycle Workbench ES3

0
In LiveCycle ES3 (and SP1) Workbench, you could encounter this error when attempting to view the participant’s property editor in the Multiple Assign Task service when attempting to provide a list of Users via a process:  If you look at the … Continue reading

How to resolve message “Invalid version: The current version of the XFA template model exceeds the capability of Acrobat/Reader” in your server log

0
In many cases, you will see messages like “ALC-XTG-029-487: [3472] Invalid version: The current version of the XFA template model exceeds the capability of Acrobat / Adobe Reader 9.0″ in your server log file on each render of your form … Continue reading

LiveCycle Designer accessibility resources

0

LiveCycle Designer allows designers to design accessible forms, that are usable by people with various disabilities. Accessible forms also help designers comply with various laws and accessibility standards, such as Section 508. LiveCycle Designer also provides support for creating accessible XHTML files (using LiveCycle Forms) and PDF forms.

If you are working with accessible forms, you will find the following official resources very useful:

Calling a LiveCycle Process from a PhoneGap Application

0


Calling a LiveCycle process from a PhoneGap application sounds complicated but in reality it couldn’t get much easier. Since LiveCycle ES 2.5 every LiveCycle process that is created automatically has a REST endpoint added. The REST endpoint will accept both GET and POST requests. By default the REST endpoint requires authentication but this can modified to allow anonymous access in the LiveCycle Administrator. (Modifying security settings for a service)

The REST endpoint makes invoking the LiveCycle Process a simple ajax call. The JavaScript code below is utilizing the jQuery ajax library (jQuery.ajax()) to invoke the LiveCycle Process and pass in the required input variable, inputXML, to the process.

var params = new Object();
params.inputXML = xml;
		
$.ajax({ 
type: "GET",
data: params,
url:"http://www.yourlivecycleserver.com/rest/async_invoke
/Digital Citizen/process/ScreeningApplicationProcess:1.0", 
success: function(data){        
//execute on success;
},
error: function(data){
//execute on error;
}
});

In this particular case the LiveCycle process is a long lived process and returns the process ID as the result of the ajax call. As I noted at the onset, calling a LiveCycle process from PhoneGap sounds way more complicated than it actually is!

Avoiding LiveCycle Kerberos based SSO problems for Active Directory users with large group memberships

0

Many LiveCycle customers implement kerberos based SSO in their deployments.

We recently came across an interesting customer situation where SSO did not work for some domain users. To recap working scenario – If LiveCycle SSO is configured correctly, when domain user opens workspace URL from  domain machine, workspace should directly open without asking for user credentials again.

In this case, it wasn’t working for some domain users; but worked for others.

Investigating further we found that non-working users were part of 100+ AD groups resulting in a large kerberos token size.

Customer was using JBoss 4.2.1 with LiveCycle ES2.5.

---

Read the complete post at Adobe LiveCycle Blog.

Debugging LiveCycle – Working with logs (Part 2)

0

- Ankush Kumar, Lead Software Engineer @ Adobe

In Debugging LiveCycle – Working with logs (part 1), we covered how to handle logs at application server level. In this blog, we will cover a few areas where we can fine tune the logging in applications itself.

 LCM Logs

As you might have noticed LCM logs are found at <LiveCycle Installation Location>/configurationManager/log. Default logging level of this is INFO. This is governed by properties file kept inside adobe-lcm.jar: \com\adobe\livecycle\lcm\logging\log.properties.

Using this property file, you can:

  • Change Logging Level
  • Define file location and file name.
  • Define rotation policy

If you want to overwrite the default location of this file to a more convenient location, you can do so by modifying <LiveCycle Installation Location>/configurationManager/bin/ConfigurationManager.bat and specifying following system property:

-Djava.util.logging.config.file=<path to file>

 Generating ORB Trace

While working with natives like XMLForms, you can sometimes run into issues where an application abnormally terminates. Following parameters help in generating extra trace information for debugging such issues.

These are required to be placed as argument to the native application:

-ORBtraceLevel 25 -ORBtraceThreadId 1 -ORBtraceInvocations 1 -ORBtraceInvocationReturns 1 -ORBtraceTime 1 –ORBtraceFile <Path to log file>

Also, when we are debugging an issue related to native applications, in System Out logs we can find system natives being invoked and a large IOR is passed to them as input. This IOR can be analyzed by many easily available IOR parsers. (Just Google for them). This can be first step towards debugging natives related problem.

Variable Logging

In order to better understand and debug an orchestration, LiveCycle offers excellent process debug feature. Using workbench, one can easily trace every step of a process and find what exact values any variable hold. For more information, one can refer this blog.

http://blogs.adobe.com/shwetank/2011/11/21/process-recording-feature-of-livecycle-workbench/

But sometimes this gets difficult due to environment constraints and performance overheads. One may want to introduce a step which will log current state of all variables in either System Out log or the log of your choice.

This can be accomplished using Variable Logger service. One can introduce this while designing the orchestration. Now each time the orchestration runs, the values of variables will be logged as the step is executed.

Other Application Logging Locations

Content Services and CMSA Logs

Content Services and CMSA logs are created in working directory of the application server.

LiveCycle Installer Logs

Installer logs can be found in following two locations

  • <LiveCycle Installation Home>
  • <LiveCycle Installation Home>/logs

Service Pack Logs

Service pack logs can be found at <LiveCycle Installation Home>/patch/<Patch Name>/log

CRX and Correspondence Management Logs

From ES3 onwards, you will find CRX and CM logs at <CRX Repository Directory>/logs. (More on this will be covered in next part of blogs)

PDFG Configuration Logs

  • PDFG System Readiness Testing Logs:  <LiveCycle Installation Home>/pdfg_srt/reports
  • PDFG Config Logs: <LiveCycle Installation Home>/logs

LiveCycle forums have gone thinner!

0

Adobe LiveCycle forum is a platform where LiveCycle community meets, learns, and discusses experiences about using LiveCycle. We are committed to provide the best user experience to the community when they are on the forum, and we have taken a step in that direction.

The LiveCycle forum, until sometime ago, comprised of 70 forums and sub-forums. We monitored the forums and found that the unnecessary bulk is making it difficult for the community to manage discussions and participate on the forum. As a result, most of the are inactive as it was unintuitive to drill-down to the correct forum for discussions.

As we understand the importance of a close-knit community, we have optimized the forum structure, so that it is easier for the community to search, post, and participate on the forum. The new forum structure is thin, focused, searchable, and easy to manage.

In its new look, the LiveCycle forum has relatively flat hierarchy, but with a logical grouping of discussions. The streamlined new structure includes seven top-level forums, including one forum with 14 sub-forums. The flat hierarchy relies on the tags for filtering discussions related to a specific area of LiveCycle.

---

Read the complete post at Adobe LiveCycle Help blog.

LiveCycle ES2 onwards performance issue and its resolution

0

 

Almost 2 years back I did a quick post rejoicing about JMS removal from LiveCycle and Work Manager API introduction in LiveCycle ES2. It’s been a while since then and this post summarises what benefits we get with Work Manager and what is critical to do in any LiveCycle ES2 + installations so Work Manager works in favor of you and not the other way around.

Important: ALL of the below information is based on my observations and testing against different LiveCycle ES2+ version on different platforms (os/database/app servers). ALL of the below information is related to LONG LIVED processes only. Repeat, LONG LIVED processes. The way short-lived processes are executed in LiveCycle is totally different to long-lived processes and are working the same way and are out-of-scope for this discussion.

Background:

  1. Before LiveCycle ES2 came out LiveCycle used JMS to facilitate the Long Lived process execution.
  2. When someone or any program invoked a Long Lived process the calls to start a process execution was delivered via JMS message to process engine.
  3. This didn’t work perfectly on high load on the servers.
  4. Then, we got LiveCycle ES2 version with Work Manager API which replaced JMS (my previous post on it is here)
  5. This work manager API (JSR-237) which was a good move forward (in my opinion) to allow container-manageable programming model for concurrent execution of work.
  6. Since that LiveCycle ES2 release it uses this work manager API to facilitate the Long-lived process execution. The latest release of LiveCycle is ES3.

 

The Performance degradation issue

As part of a project I did some investigation into how a long-lived process is executed from start to end. The complaints I heard at that time from some of my colleagues were around LiveCycle 2.5 takes much longer to execute our processes compared to LiveCycle 8.2.

As usual I did process analysis and tried to identify pain points into the process logic… etc but what stuck out the most was the same process took much shorter time on LiveCycle 8.2 compared to default turnkey LiveCycle 2.5 installation. This problem is visible and interesting when you have lot of steps in a process or have lot of sub-process calls.

There is definitely a performance degradation (from total time taken point of view) into the long-lived process execution when your process involves sub-process calls. What it comes down to is around Default value and how Work Manager works.

 

So this is how work manager works in simplest terms -

  1. A request for Long-lived process execution is made. From LC java API or any of the End-Point (aka Start-Point) etc.
  2. A job id returned to the caller and a record is created in LC database for Work Manager.
  3. Work Manager looks at this queue and starts process execution by doing some other inserts and updates in database tables and work is handed over to Process Manager etc etc…
  4. At any point of process execution if it has any sub-process calls then the same process is followed where a message/record is created for new job, work manager looks at that queue and executes the process and returns the results to caller if needed…

Note: For the curious minds.. I’ve attached a mind map file here to provide details on how database level details work. This is based on a blog post done by LiveCycle team.

 

So now coming back to what the problem is..and why the long-lived process executions are slower in ES2+.

Finding:

As the Work Manager looks at a queue once every minute by default it causes the degraded performance in ES2+ versions. This is a big problem once you have large LiveCycle Application where you have around 40-80 processes getting called to do some work. For small little long-lived processes (without not many sub-process calls) its not that bad.

Solution/Workaround:

So the solution or workaround for this situation is to tell Work Manager to look out for new work more often. Luckily the LiveCycle startup parameters have this setting which you can tweak. I set the parameter to 50 from its default value 1000 (the unit is milisecond) after testing what I needed. So the parameter looks like below on our Weblogic servers.

-Dadobe.work-manager.queue-refill-interval=50

Here are the full set of parameters that you can review and tweak based on need.

  • adobe.work-manager.queue-refill-interval
  • adobe.workmanager.debug-mode-enabled
  • adobe.workmanager.memory-control.enabled
  • adobe.workmanager.memory-control.high-limit
  • adobe.workmanager.memory-control.low-limit

Huh?:

I was surprised to not see this mentioned in the install guide or any other docs that are published for LiveCycle Es2 onwards. The default is set to so large value that there isn’t any ‘same as before’ performance for bigger LiveCycle deployments.

 

Few words for friends who work with LiveCycle:

These details provided above are my observations and findings on what we faced on a client project. Please share your experience on above item as I’m really interested to find out if you haven’t got the same issue (where Work Manager queue refill interval is set to too high by default) or tweaking that value has helped in your project.

Let me know if you need sample LCA and I’m happy to provide simple LCA which can be used to measure the outcome before and after the tweaks.

 

As always, ping me on @pandyaparth on twitter if you want to have a conversation on this or any other LiveCycle stuff!!

Removing Sample Data and Users from Correspondence Management Solution

0

- Mayank Gupta, Computer Scientist at Adobe

Adobe LiveCycle Correspondence Management Solution provides some sample collateral and creates some sample users so that developers can start using the application and make use of these samples to know about and learn the product capabilities. It is highly recommended to remove these sample assets and sample users when the solution is deployed on to a production server.

Steps to remove sample assets and sample users:

1. Removing sample assets by uninstalling them from package manager:

  • Go to http://[hostname:port]/lc/crx (on author instance)
  • Login as admin
  • Click Package Manager
  • Click on Package with name “cm-sampleassets.zip”
  • Click More dropdown in action bar (This action bar has other actions like Edit Build etc.,. , More option is in the right most area of this bar)
  • Click Uninstall
  • Click Uninstall again on confirmation dialog
  • Wait for sometime till you see a message like “Package uninstalled in <some>ms” in the Activity Log
  • Now if you log on to CM Manage Assets UI , you will not see any sample assets. If you are still seeing them then restart the server.

2. Removing sample users from CRX user administration:

  1. Go to http://[hostname:port]/lc/crx (on author instance)
  2. Login as admin
  3. Click User Administration.
  4. Note: Correspondence Management creates Todd Goldman (tgoldman), Caleb Lopez (clopez), Gloria Rios (grios), Frank Kricfalusi (fkricfalusi), Jocelyn Robinson (jrobinson), and Heather Douglas (hdouglas) as the sample users.
  5. In the user administration dialog , Navigate to each of these users and click Remove user. Now you cannot log in to the Manage Assets UI with any of the above usernames.

Follow the steps mentioned above in 2 and remove sample users from publish instance as well. There is no need to uninstall sample assets from publish instance as they are installed on author instance only.

Adding a custom service in Correspondence Management Solution

0

- Mayank Gupta, Computer Scientist @ Adobe

Steps to add a custom service in Correspondence Management solution are as follows:

  1. The implementation for this user story involves code changes and rebuilt. So, one is required to setup the development environment via steps mentioned @ Setting up development environment.
  2. Add your sample custom service interface and implementation class in the CorrespondenceManagementSolutionTemplate/Services project for example @ com.adobe.icc package in the source code. See the sample @ http://blogs.adobe.com/LiveCycleHelp/files/2012/06/SampleCustomService1.zip.
  3. Now define your service as a spring bean. For this, add the following entry in your CorrespondenceManagementSolutionTemplate\Services\resources\META-INF\spring\cm\adobe-cm-spring-config.xml file: <bean id=”sampleCustomService” class=”com.adobe.icc.SampleCustomServiceImpl” />
  4. Now expose your spring bean as a osgi-service. For this, add the following entry in your CorrespondenceManagementSolutionTemplate\Services\resources\META-INF\spring\osgi-context.xml file: <bp:service interface=”com.adobe.icc.SampleCustomService” ref=”sampleCustomService” > <bp:service-properties><entry key=”connectors.httpinvoker” value=”true” /> <entry key=”connectors.httpinvoker.alias” value=”/sampleCustomService” /> <entry key=”connectors.remoting” value=”true” /> <entry key=”connectors.remoting.id” value=”sampleCustomService” /> </bp:service-properties> </bp:service>
  5. Rebuild and redeploy the Solution template to view the changes. For information on rebuilding and redeploying, see Building and deploying the Solution Template.
 
Go to Top