Main

April 16, 2008

A Brief History of Adobe LiveCycle

"LiveCycle" is a pun on the words “life cycle”. At least for Adobe's branding team, it is meant to suggest the life cycle of business processes and customer interactions.

To IT operations teams the world over, Adobe's LiveCycle is Java J2EE-based server-side software that runs on most major server operating systems (Windows, Linux, Solaris, AIX) and three major J2EE application servers (IBM WebSphere, BEA WebLogic, Red Hat JBoss). It is designed to integrate with and fit into existing enterprise infrastructure software such as databases (Oracle, IBM DB2, Microsoft SQL Server, Sun MySQL), directories (Microsoft Active Directory, Sun ONE, IBM Tivoli, Novell eDirectory) and e-mail (Microsoft Exchange, IBM Lotus Notes).

The name itself had its beginnings in "Live Paper Server". Along the way, it was also the "Intelligent Document Platform" or IDP.

Here is Google's News Archive Timeline for the word. First mention (in an Adobe context) occurs on June 8, 2004.

People who have installed and configured LiveCycle would have noticed "IDP" in the JNDI name of the LiveCycle data source IDP_DS. That stands for Intelligent Document Platform_Data Source. What is today 'Rights Management' was 'Policy Server' at one time and started life as "Enterprise Document Control" or EDC. Hence the JNDI name for the data source EDC_DS.

For Internet history buffs, the Wayback Machine is a good place to go snoop. Many of the links in this blog entry are to the Wayback Machine. If you get an error on your first try, it is probably because of trouble with intermediate proxy servers and caching. Try again and again and chances are that your requests will eventually succeed.

Four distinct stages are evident in LiveCycle's evolution so far although these stages overlap one another from a timeline perspective.

ONE-OFF SERVERS (2001 and earlier)
-------------------------------------------------------
Adobe's early efforts produced one-off server products that fit desktop functionality into a server model.

Content Server
April 10, 2001 press release announcing Content Server 2.0

Graphics Server
September 9, 2002 press release announcing Graphics Server 2.0

Distiller Server
December 17, 2001 press release announcing Distiller Server 5.0

Document Server
Oct 21, 2002 press release announcing Document Server.

Acrobat Elements Server
November 17, 2003 press release announcing Acrobat Elements Server.

ENTERPRISE PLAY WITH ACQUISITIONS (Jan 2002 - May 2004)
-----------------------------------------------------------------------------------------
Adobe starts implementing a planned enterprise strategy, driven by acquisitions.

Accelio Corporation (formerly JetForm)
http://www.accelio.com
February 1, 2002
Announces plan to acquire Accelio Corporation of Ottawa, Canada. It described itself as "a leading global provider of Web-enabled business process solutions". Accelio's technology and experience formed the basis for Form Server and Form Designer. Accelio's sizable Professional Services team also formed the core of Adobe's Professional Services team, since renamed Adobe Consulting.
April 15, 2002
Completes the acquisition.
For a detailed story on the acquisition, please see the September 2004 issue of Canadian Business magazine online.

Yellow Dragon Software
http://www.yellowdragonsoft.com
November 5, 2003
Adobe acquires Yellow Dragon Software of Vancouver, British Columbia, a self-described " leader in the development and implementation of ebXML, an open standard technology".

Q-Link Technologies, Inc.
http://www.qlinktech.com
May 3, 2004
Adobe acquires Q-Link, a privately held company based in Tampa, Florida. At their website, it claimed to have the "leading Business Process Management development platform and the fastest solution for delivering process-driven applications." This technology formed the basis of LiveCycle Workflow/Process Management.

6.0 Release August 2004
First release was numbered 6.0 to synchronize with the then shipping version of Adobe Acrobat which was 6.0 (PDF 1.5). Also, the previous release of Form Server from Accelio (C++ based) was 5.0 although Form Server 6.0 was a re-write.
- Form Manager
- Form Server (history at Anthony Rumsey's blog)
- Reader Extensions Server

BRAND LIVECYCLE WITH INDIVIDUAL PRODUCTS (June 2004 to May 2007)
--------------------------------------------------------------------------------------------------------
The brand "LiveCycle" is devised and introduced. All products are now prefixed with LiveCycle, for example, LiveCycle Policy Server.

7.0 Release July 2005
Form Server renamed to Forms, and the word "Server" removed from Reader Extensions Server.
New products added to the family :
- Policy Server
- Document Security
- Workflow
- Assembler
- Barcoded Forms ST (stand alone, non-Java (C++), Windows-only)

An Adobe press release from September 6, 2005

7.2 Release November 2006
J2EE Clusters now supported although configuration is manual.
New products added to the family:
- Print
- PDF Generator

COMMON SERVICE ARCHITECTURE (June 2007 to present)
--------------------------------------------------------------------------------
Enterprise Suite (ES) (8.0) June 2007
Major re-architecture towards SOA, document service container introduced, Form Manager shelved, added Flex-based Workspace user desktop and Eclipse-based Workbench developer IDE. Installation simplified with a robust LiveCycle Configuration Manager (LCM). Solution Components (formerly called "products") now are aware of one another.

Policy Server renamed to "Rights Management". Document Security renamed to "Digital Signatures". Barcoded Forms ported to J2EE and runs on all supported operating system platforms.

All solution components now have a "LiveCycle prefix and an "ES" suffix, for example, LiveCycle Rights Management ES.

ES Update 1 (8.2)
Not yet released, LiveCycle enters the 64-bit world with support for 64-bit JDKs from Sun (HotSpot), IBM (J9) as well as BEA (JRockit). It will be IP v6-compliant. LiveCycle Configuration Manager (LCM) will now automatically configure a J2EE cluster.

April 03, 2008

Monitor LiveCycle JVM Heap Utilization Using JConsole

The 1.5 (or 5.0) versions of JDKs from Sun (HotSpot), IBM (J9) as well as BEA (JRockit) come with JConsole, a very user-friendly tool that can be used to monitor heap usage within the JVM. It can also be used to monitor a limited number of LiveCycle metrics (such as the number of invocations).

In the next release of LiveCycle (8.2.1, also known as LiveCycle ES Update 1) slated for the latter half of 2008, there will be a lot more LiveCycle JMX metrics you can track. Please see Adobe Technical Guide. Don't be spooked by the warning you get on opening it ("the author of this document may have chosen to audit your intearactions with it"). It is Adobe LiveCycle Rights Management ES in action.

JBoss
-------
1) First, you have to re-start JBoss with remote JMX monitoring enabled.
2) Figure out a port that is not used on the server.
3) Add the following entries to JBoss' run.bat or run.sh

rem --------------------------------------
rem Enable Remote JMX Monitoring
rem -------------------------------------
set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote.port=50050
set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote.authenticate=false
set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote.ssl=false

for run.sh (Linux)

# -------------------------------------
# Enable Remote JMX Monitoring
# ------------------------------------
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.port=50050"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.authenticate=false"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.ssl=false"

4) Run JConsole from the /bin folder of the JDK.

If you are running JConsole on the same server as JBoss, the JVM will be listed in the 'Local' tab of the JConsole 'Connection' dialog. If JBoss is running on a remote server, click on the 'Remote' tab, and provide the IP address and JMX port (50050 in the example above). If com.sun.management.jmxremote.authenticate is set to true, you would need to provide the userID and password.

5) Click on the 'Memory' tab. You will see real-time charts you can display for heap memory usage, non-heap memory usage, and memory allocated to the 'survivor', 'eden', 'old generation' and 'permanent generation' memory areas. At the bottom, it will also provide you with the frequency and duration of garbage collections. To learn more about generational heap areas, please see article titled "Tuning Garbage Collection with the 5.0 Java Virtual Machine" at the Sun Developer Network.

Since IBM's J9 JDK does not implement generational garbage collection, its JConsole display for the 'Memory' tab will look slightly different.

Running JConsole is not as intrusive as running full-fledged java profilers such as Quest JProbe. Keeping JConsole running during your functional and/or load testing will provide you with valuable insight on the behavior of LiveCycle.

Clicking on the 'MBeans' tab will let you track some LiveCycle-specific metrics. For example, expand the adobe.com node on the left. Navigate to adobe.com->XMLFormService->RequestCount->AdobeStat. The value of the 'Count' field will tell you how many times the XMLFormService has been invoked since JBoss was started.

April 02, 2008

Videos on Customizing Form Guides

One of the engineers on the Form Guides team has put together a great series of videos on how to customize form guides. Gilles Maurice takes you step-by-step through the process of customizing guide wrappers, panels and components in these videos which are posted on the Adobe Developer Network. They are a great companion to the customizing form guides documentation.

March 24, 2008

LiveCycle Client Libraries

If you plan to build custom applications that invoke LiveCycle services via its API, you should include references to the LiveCycle client libraries in your project. Also remember to configure the project in such a way that these libraries (JAR files) will be exported and thus included in the WAR or EAR files of the application.

These client library JAR files can be found under the \LiveCycle_ES_SDK\client-libs\ folder of both your Workbench (client desktop) or server installations. For example, if you installed LiveCycle ES server to /opt/adobe/livecycle8/ on AIX, these library JARs will be available at /opt/adobe/livecycle8/LiveCycle_ES_SDK/client-libs/. All are platform-agnostic except adobe-utilities.jar which is application server-specific. The platform-independent ones can be found under the folder /common/.

These client JARs are named in such a way as to indicate their functionality. For example, to call the Forms ES API, you need to include adobe-forms-client.jar You also need other JARs in addtion to this, such as adobe-livecycle-client.jar. Since it only requires 2.9 MB for all of the JARs in the /common/ folder, you can play it safe and include ALL of them in your project to be exported.

For a simple servlet that calls renderPDFForm(), the following imports are required:

import com.adobe.livecycle.formsservice.client.FormsResult;
import com.adobe.livecycle.formsservice.client.FormsServiceClient;
import com.adobe.livecycle.formsservice.client.PDFFormRenderSpec;
import com.adobe.livecycle.formsservice.client.URLSpec;
import com.adobe.livecycle.formsservice.client.RenderAtClient;
import com.adobe.livecycle.formsservice.exception.RenderFormException;
import com.adobe.idp.Document;
import com.adobe.idp.dsc.DSCException;
import com.adobe.idp.dsc.clientsdk.ServiceClientFactory;

To understand what these import statements really accomplish, use jar, WinZip, WinRAR, or similar tool to open and extract the adobe-forms-client.jar to C:\TEMP\. Navigate to C:\TEMP\com\adobe\livecycle\formsservice\client\ and you will find the FormsResult.class file (see first import statement).

Similarly, do the same for adobe-livecycle-client.jar and you will see the Document.class file in C:\TEMP\com\adobe\idp\ (see import statement #7) and the ServiceClientFactory.class in C:\TEMP\com\adobe\idp\dsc\clientsdk\ (see import statement #9).

In fact, to determine which JAR file contains a particular class, use a grep tool such as BareGrep and let it loose on \LiveCycle_ES_SDK\client-libs\

March 18, 2008

New Technical Guides Available on Devnet

We have just published a six new technical guides which provide best practices and recommendations on a variety of LiveCycle topics. The guides cover topics such as collaborative development, digital signatures, monitoring LiveCycle deployments and connecting to enterprise content management systems. Additional topics will be covered in the near future. You can find the technical guides on the Adobe Developer Network. We hope you find these documents useful. If you have comments, feedback or suggestions on these documents please email us at LCES-Feedback@adobe.com.

LiveCycle - Sample JBoss run.bat Settings

If you are running LiveCycle ES on non-turnkey (manually configured) JBoss, the following settings might help you. Quite obviously, you have to change them to fit your environment.

The settings are appropriate for a dual-core two-CPU server (4 cores) running Windows Server 2003 with a 32-bit Sun HotSpot JDK. The -XX:+UseLargePages setting will not work unless the user whose credentials JBoss is using to run has the 'Lock Pages in Memory' privilege. You can add this using Windows Group Policy Editor (gpedit.msc).

If you do not plan to use BAM, do not deploy CAS_Adobe.ear If you do need to use it, deploy it to another JBoss instance, independent of the LiveCycle JBoss instance.

Do not apply this to your PRODUCTION servers unless you have run your entire test suite against these settings under load. You can use JConsole for monitoring the JVM.

The entries for adobe-pof.properties and adobe.idp.scheduler.properties are only required for clusters.

Ensure that the bind.address is set to one of your server's IP addresses.

rem ----------------------------------------------------------------
rem Configuration Changes for Adobe LiveCycle ES 8.0.1
rem ----------------------------------------------------------------

set JAVA_OPTS=%JAVA_OPTS% -server
set JAVA_OPTS=%JAVA_OPTS% -XX:+UseParallelGC -XX:ParallelGCThreads=4
set JAVA_OPTS=%JAVA_OPTS% -Xms1024m -Xmx1024m
set JAVA_OPTS=%JAVA_OPTS% -XX:PermSize=256m -XX:MaxPermSize=256m
set JAVA_OPTS=%JAVA_OPTS% -XX:+UseLargePages
set JAVA_OPTS=%JAVA_OPTS% -Djava.net.preferIPv4Stack=true
set JAVA_OPTS=%JAVA_OPTS% -Dadobeidp.serverName=lc_server1
set JAVA_OPTS=%JAVA_OPTS% -Dfile.encoding=utf8
set JAVA_OPTS=%JAVA_OPTS% -Djava.io.tmpdir=D:\Adobe\LiveCycle8\lc_java_io_tmpdir
set JAVA_OPTS=%JAVA_OPTS% -Dadobe-pof.properties=C:\jboss-4.0.3-SP1\server\all\conf\adobe-pof.properties
set JAVA_OPTS=%JAVA_OPTS% -Dadobe.idp.scheduler.properties=C:\jboss-4.0.3-SP1\server\all\conf\idp_scheduler_quartz.properties
set JAVA_OPTS=%JAVA_OPTS% -Djboss.partition.name=partitionLIVECYCLE
set JAVA_OPTS=%JAVA_OPTS% -Dbind.address=10.10.50.20

rem ---------------------------------------------------------------------------------------------------
rem Configuration Changes for Adobe LiveCycle PDF Generator's ConvertPDF Service
rem ---------------------------------------------------------------------------------------------------

set JAVA_OPTS=%JAVA_OPTS% -Dcom.adobe.convertpdf.bmc.POOL_MAX=4
set JAVA_OPTS=%JAVA_OPTS% -Dcom.adobe.convertpdf.bmc.MAXIMUM_REUSE_COUNT=500
set JAVA_OPTS=%JAVA_OPTS% -Dcom.adobe.convertpdf.bmc.REPORT_TIMING_INFORMATION=false
set JAVA_OPTS=%JAVA_OPTS% -Dcom.adobe.convertpdf.bmc.CT_ALLOW_SYSTEM_FONTS=true

rem ----------------------------------------------------------
rem Configuration Changes for XMLForm (Forms ES)
rem ---------------------------------------------------------

set JAVA_OPTS=%JAVA_OPTS% -Dcom.adobe.xmlform.bmc.POOL_MAX=4
set JAVA_OPTS=%JAVA_OPTS% -Dcom.adobe.xmlform.bmc.MAXIMUM_REUSE_COUNT=10000
set JAVA_OPTS=%JAVA_OPTS% -Dcom.adobe.xmlform.bmc.REPORT_TIMING_INFORMATION=false
set JAVA_OPTS=%JAVA_OPTS% -Dcom.adobe.xmlform.bmc.CT_ALLOW_SYSTEM_FONTS=true

For UNIX operating systems (Red Hat Enterprise Linux and SuSE Enterprise Linux, also Solaris in LiveCycle 8.2.1), the entries have to be changed slightly. For example:

# ----------------------------------------------------------------
# Configuration Changes for Adobe LiveCycle ES 8.0.1
# ----------------------------------------------------------------

JAVA_OPTS="$JAVA_OPTS -server"
JAVA_OPTS="$JAVA_OPTS -XX:+UseParallelGC -XX:ParallelGCThreads=4"

March 13, 2008

LiveCycle for the Oracle DBA

The current release of LiveCycle ES (8.0.1) is supported on Oracle 9i and 10g, but not on 11g. Oracle RAC (Real Application Cluster) will work for LiveCycle. However, the appserver system administrator is responsible for coming up with the correct connection string with help from the Oracle RAC DBA. Here's a sample (make changes to fit your environment):

jdbc:oracle:thin:@(DESCRIPTION= (ENABLE=broken) (ADDRESS_LIST= (ADDRESS= (PROTOCOL=TCP) (HOST=yourhost1) (PORT=1521) ) (ADDRESS= (PROTOCOL=TCP) (HOST=yourhost2) (PORT=1521) ) (LOAD_BALANCE=on) (FAILOVER=on) ) (CONNECT_DATA= (SERVER=dedicated) (SERVICE_NAME=service.yourcompany.com) (FAILOVER_MODE= (TYPE=session) (METHOD=basic) (RETRIES=10) (DELAY=3) ) ))


Minimum required storage is 300 MB, 500 MB is better.

Sample scripts to create a tablespace and a login could look like this, assuming that a temporary tablespace called "LC_TEMP" has already been created:

Create Tablespace
----------------------
Two data files with 500 MB each, set to grow unlimited in 10 MB increments. Make changes as appropriate.

CREATE SMALLFILE TABLESPACE "BLADERUNNER" DATAFILE 'D:\ORACLE_DATA\bladeruuner1.dat' SIZE 500M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED , 'D:\ORACLE_DATA\bladerunner2.dat' SIZE 500M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED LOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO

Create User
--------------
Assign the roles 'CONNECT' and 'RESOURCE' plus the system privilege 'CREATE VIEW'.

CREATE USER "BLADERUNNER" PROFILE "DEFAULT" IDENTIFIED BY "*******" DEFAULT TABLESPACE "BLADERUNNER" TEMPORARY TABLESPACE "LC_TEMP" ACCOUNT UNLOCK
GRANT CREATE VIEW TO "BLADERUNNER"
GRANT "CONNECT" TO "BLADERUNNER"
GRANT "RESOURCE" TO "BLADERUNNER"

Supported character sets are AL32UTF8 or AL16UTF16. Other character sets are currently not supported.

Oracle whitepaper on Unicode support.

Bootstrapping (initializing the LiveCycle database) will fail with an UnknownLocalException if the Oracle instance parameter NLS_LENGTH_SEMANTICS is not configured as ‘BYTE’. In many non-English locales, this might be configured as 'CHAR'. If possible, re-set this to BYTE and restart Oracle. If this is not possible, LiveCycle might require its own dedicated Oracle instance.

March 12, 2008

Provisioning a LiveCycle VM for VMware ESX Server 3.5

If you are considering deploying LiveCycle ES on VMWare ESX Server, your VMware Infrastructure people would want to know the basic provisioning details such as memory, storage and the number of CPUs. Based on testing we did with ESX Server 3.5 on an HP Proliant DL385 G2, here are the basic configuration details for a Windows guest OS VM with LiveCycle ES 8.0.1 SP2 on JBoss 4.0.3 SP1 and MySQL 5.0:

- two vCPUs with about 3.00 GHz clock speed
- 3 GB of RAM
- 15 GB of storage

Once built, this VM can be easily cloned. Given the fact that LiveCycle installs can be quite challenging, this clonability is very attractive.

However, IBM WebSphere does not handle cloning well. Oracle 10g requires that the Net Configuration Assistant be re-run. When cloning a VM, the clone will have to have its machine name and IP address change. BEA WebLogic, JBoss and MySQL seem to handle cloning well.

Also, the vNIC would have to be uninstalled and re-installed so that it will have a different object GUID from its clone peers. This is very important if you plan to deploy several of these LiveCycle VM clones in a Windows NLB load-balanced server farm that is not clustered. This particular topology is very useful for LiveCycle PDF Generator while using its ConvertToPDF function. This function is single-threaded when converting Microsoft Office native documents to PDF. So a farm of non-clustered VMs is much more appropriate.

March 07, 2008

LiveCycle ES 8.0.1 Service Pack 2 Now Available

Service Pack 2 for LiveCycle ES 8.0.1 is now available here. This is cumulative so includes SP1b. Adobe recommends that LiveCycle customers apply this service pack, run their full test suite and then deploy to production.

Once applied, the patch level will be 8.0.1.2


February 26, 2008

Determine Which Cluster Node Processed a Particular LiveCycle Orchestration

When LiveCycle is deployed in a cluster of several nodes, determining which node processed a particular short-lived or long-lived orchestration invocation is hard. System administrators also need a reliable way to verify that load-balancing is working, meaning that all nodes in the load-balanced cluster are getting client requests. The best solution is to do this in situ, which means collecting the name and IP address of the node as part of the orchestration itself.

The approach can be this:
- use scripting to obtain JVM and OS information
- pass the collected information to process variables or build an XML data structure
- merge this data into a form

The 'Execute Script' action can be used for this. If added as part of the 'Execute Script' action, the following script will get run by LiveCycle's built-in BeanShell 1.3 Java scripting environment:

// Initialize an InetAddress object
InetAddress localaddr = InetAddress.getLocalHost();

// Get DNS name of the Server Node
String strDNSName = localaddr.getCanonicalHostName();

// Set the value of a process variable using patExecContext
patExecContext.setProcessDataStringValue("/process_data/@DNS_Name", strDNSName);

The value of the process variable DNS_Name can then be populated into a form field used in the orchestration, or applied as a watermark to a document assembled or converted.

The attached BeanShell script collects a lot more server information (node IP address, JVM heap usage, JDK being used etc), builds an XML structure from this and then sets another process variable of datatype 'xml'. This can then be used as data for a corresponding XDP form template (when downloading, save as form.xdp). Based on your scenario, this can be rendered using Forms ES and streamed back to the calling application or browser or saved to the server filesystem.

February 20, 2008

Understanding LiveCycle Database Schema with Quest's TOAD for MySQL (Free)

To really understand the growth patterns in LiveCycle database storage, you need a graphical tool that will give you a detailed view into the database. Since most early development is done with the LiveCycle turnkey that uses MySQL as the database repository, you need a tool for MySQL. MySQL's 'MySQL Administrator' is a good tool which is freely downloadable. MySQL packages it as part of its "GUI Tools'

But Quest Software, the makers of TOAD which is very popular with Oracle DBAs and programmers has made 'TOAD for MySQL' freely available. It is a powerful tool that offers a lot more functionality than MySQL Administrator.

This tool can be used to assess LiveCycle database growth so that when it is time to answer questions from the PRODUCTION DBA, you will come across as being fully knowledgable about your application's behavior.

February 15, 2008

Pay Attention to LiveCycle Orchestration String Length Settings

When creating process orchestrations that contain variables of type 'string', always set the length to -1 in cases where you cannot predict the length of those variables at runtime. In Workbench, this 'Length' textbox can be found under the section 'Datatype Specific Settings' in the 'Create Variable' or 'Edit Variable' screens.

Many LiveCycle process orchestrations are developed using the LiveCycle turnkey with MySQL as the database. Every long-lived orchestration you create will have its own dedicated table in the LiveCycle repository database. For example, if you create a process called 'myprocess', the table will be called tb_pt_myprocess. Please note that the table is created only after you "activate" the process.

Its columns and their datatypes are determined by the number and datatype of the variables you create in your orchestration. For example, in MySQL, the creation of a variable of type 'string' with no length specified will result in the creation of a table column with the datatype of VARCHAR(100). MySQL defines its 'VARCHAR' datatype as follows:

A variable-length string. 100 represents the maximum column length in characters. The effective maximum length of a VARCHAR in MySQL 5.0.3 and later is subject to the maximum row size (65,535 bytes, which is shared among all columns) and the character set used. For example, utf8 characters can require up to three bytes per character, so a VARCHAR column that uses the utf8 character set can be declared to be a maximum of 21,844 characters.

Specifying a length of -1 will result in the creation of a table column of datatype LONGTEXT. MySQL defines its 'LONGTEXT' datatype as follows:

A TEXT column with a maximum length of 4,294,967,295 or 4GB characters. The effective maximum length is less if the value contains multi-byte characters. The effective maximum length of LONGTEXT columns also depends on the configured maximum packet size in the client/server protocol and available memory. Each LONGTEXT value is stored using a four-byte length prefix that indicates the number of bytes in the value.

If development is done on MySQL, if string variable length is not specified as -1,and if the LCA is exported into the TEST, STAGING or PRODUCTION environment where the LiveCycle repository is hosted by Oracle 10g, you run the risk of hitting exceptions such as this one:
com.adobe.pof.odapi.POFSchemaManagerLocal.createObjectType(com.adobe.pof.odapi.CreateObjectTypeInfo,com.adobe.idp.Context) throws com.adobe.pof.POFException:
java.sql.SQLException: ORA-00910: specified length too long for its datatype
.

For SQL Server 2005, a string variable with no length set will end up with a datatype of 'NVARCHAR(100)' and one with -1 set as length will have a datatype of 'NTEXT'.

For Oracle 10.2, a string variable with no length set will end up with a datatype of 'NVARCHAR2(100)' and one with -1 set as length will have a datatype of 'NCLOB'.

February 05, 2008

Using Robocopy to Back up LiveCycle on Windows Vista

In Windows Vista, Microsoft has shipped a really powerful backup utility called "Robocopy" (Robust Copy). It is built into the Command Prompt shell environment. To see its myriad of options, just type in robocopy /? at a command prompt.

The real utility of this tool is after the first full backup - all subsequent backups are incremental and therefore, faster.

Here's the command to backup the LiveCycle install from the C: drive to a folder on the D: drive (The /E argument copies all subdirectories, including empty ones.):
robocopy C:\Adobe\LiveCycle8 D:\backups\Adobe_LiveCycle8 /E

Here's the same command with a bit more control over retries (10 retries, each with a wait interval of 30 seconds)
robocopy C:\Adobe\LiveCycle8 D:\backups\Adobe_LiveCycle8 /E /R:10 /W:30

You can also choose to copy the directory timestamps, and also to copy all file information
robocopy C:\Adobe\LiveCycle8 D:\backups\Adobe_LiveCycle8 /E /W:30 /R:10 /DCOPY:T /COPYALL

This command can be saved as a batch file and then be run as a scheduled task, set to run every day at a certain time at night. This way, if you end up messing up your LiveCycle install (we all do), there is always hope.

February 02, 2008

LiveCycle on WebSphere 6.1 - When Service Integration Bus Security is Enabled AND Administrative Security is LDAP-Integrated

Many PRODUCTION WebSphere environments are configured with 'Administrative Security' enabled and 'Service Integration Bus (SIB) Securtiy' enabled. LiveCycle configuration documentation for environments where WebSphere Administrative Security is integrated with the corporate LDAP directory currently does not exist.

Create a J2C Authentication Alias
In WebSphere Admin Console, create a new 'J2C Configuration Alias' mapped to a user in the corporate LDAP directory. Ideally, the password for this user should not frequently, and without warning, expire. Navigate to Security->Secure Administration, applications, and infrastructure->Java Authentication and Authorization Service->J2C authentication data->New

Verify that the special built-in group 'AllAuthenticated' is listed in the bus connector role. Navigate to Service Integration->Buses->IDP_JMS_Bus->Additional Properties->Security->Additional Properties->Users and groups in the bus connector role. If not, configure it, or configure the user mapped to the J2C Authentication Alias in this role.

Configure LiveCycle JMS Activation Specifications
LiveCycle has three Activation Specifications, namely JobManager_AS, PECommand_AS and Task_Event_AS. Configure all three with the newly created 'J2C Authentication Alias'. Navigate to Resources->JMS->Activation specifications.

Force Re-Synchronize the Nodes
All nodes in the WebSphere cell have to be updated with these changes.

Re-start LiveCycle appserver instances
Watch the SystemOut.log for any error messages. If there are any related to the Service Integration Bus, fix them first.

January 23, 2008

LiveCycle Clustering - Folder Configuration Checklist

When deploying LiveCycle ES to a J2EE application server cluster for load balancing and/or High Availability, there are a few filesystem folders that need to be in place to ensure that the cluster functions properly. The locations of these are configurable during the install-config phase, or afterwards through the LiveCycle Admin Console. Just navigate to Home->Settings->Core System Settings->Configurations.

Global Document Storage Root Folder
This is the most important folder as far as LiveCycle clustering is concerned. There should only be one per cluster. All members of the cluster should have read-write access to this folder. In the case of a horizontal cluster with multiple physical nodes, the Global Storage Folder should be on a network share. The folder should be hosted on a reliable, High-Availability storage device (SAN, NAS) or file server. Networking to this folder should be fast and reliable.

This folder should also be regularly backed up as part of your disaster recovery strategy. The backups should be exactly in synch with your LiveCycle database backups. In the rare event of a complete disaster, the DB backup and the Global Storage Folder backup should be restored in conjunction with each other. If separate IT groups are responsible for the backup of the appserver filesystem and the DB, procedures should be put in place so that these backups are co-ordinated to happen during the same time window.

Temporary Folder
This folder should be created on exactly the same location on all members of a cluster. Each cluster member should have its own LiveCycle Temporary Folder.

Adobe Server Fonts Folder
This folder should be created on exactly the same location on all members of a cluster. Each horizontal cluster member should have its own LiveCycle Fonts Folder. Vertical cluster members can share this folder. The contents should be the same on all cluster members. This folder is always created wherever LiveCycle is installed (/opt/adobe/livecycle8/fonts/ or C:\Adobe\LiveCycle8\fonts\). Make sure that this folder's contents are copied to all of the horizontal cluster members.

Customer Fonts Folder
This folder is usually empty unless your documents or forms require special fonts.
This folder should be created on exactly the same location on all members of a cluster. Each horizontal cluster member should have its own LiveCycle Customer Fonts folder. Vertical cluster members (those on the same server) can share this folder.

System Fonts Folder
Ensure that this folder (whose location is usually predictable for all LiveCycle-supported Operating Systems) is in the same location for all members of a horizontal cluster. In Windows, this is usually C:\Windows\Fonts\. On AIX, this is usually /usr/lpp/X11/lib/X11/fonts/

AppServer Transaction Log Folder (WebSphere)
WebSphere 6.1 lets appserver instances recover one another's transaction logs (peer recovery). For this to work, define a common network share for all members of a cluster. You can find the setting using the WebSphere Admin Console as a property of the Transaction Service (Container Services). An understanding of lease-based file locking might be useful in configuring this. Windows 2003 Server's CIFS as well as v4 of NFS support this. More details are available in two excellent IBM WebSphere Developer Technical Journal articles:
- Transactional high availability and deployment considerations in WebSphere Application Server
- Automate peer recovery for transactions and messages in WebSphere Application Server

January 14, 2008

LiveCycle - Leveraging Windows PowerShell

PowerShell is Microsoft's new scripting environment for Windows, formerly code-named Monad. It will be native to the upcoming Windows Server 2008. Microsoft has let it be known that this will be the system administration environment for Microsoft products going forward.

It is based on the .NET framework. It is a shell as well as a scripting language. It is object-based and extensible. It comes with about 100 so-called commandlets whose output can be piped into other commandlets. For current Windows versions, you can download PowerShell 1.0

PowerShell can be used to gather process information. Here is the PowerShell command to display all running processes that are consuming more than 100 MB of RAM (WS=Working Set)
Get-Process | where { $_.WS -gt 100MB }

Here is the command to list all Windows services, sorted by their status, and then by the display name:
Get-Service | Sort-Object status, displayname

Command to list all Windows services that has the term "Adobe" in the Display Name:
Get-Service | Where-Object {$_.displayname -like "*Adobe*"}

The following sequence of PowerShell commands lets you query your remote SQL Server 2005 LiveCycle database to get a list of all User Manager domains, provided you have the SQLServer client installed:
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server=192.150.23.6;Database=lc_es;user=sa;password=mypassword"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = "SELECT id, commonname, domainname, syncstate FROM lc_db_usr.EDCPRINCIPALDOMAINENTITY ORDER BY domainname"
$SqlCmd.Connection = $SqlConnection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet

Return the number of returned records
$SqlAdapter.Fill($DataSet)
Display the returned records
$DataSet.Tables[0]
If the id is only partially displayed, get the full value by passing the record number
$DataSet.Tables[0].rows[2].item("id")

These have been tested to work in Windows Vista 32-bit.

PowerShell blog
Microsoft TechNet Script Center

January 10, 2008

LiveCycle and IBM DB2 - Bootstrapping to the Right Tablespace

"Bootstrapping" is the term commonly used for the creation of tables, indexes, views and sequences by LiveCycle in the database. For DB2, getting these to get created in the designated tablespace has been a struggle. This has mainly been because unlike WebSphere's JMS Message Store which asks the configurator for the name of the database schema to use, LiveCycle does not. As a result, tables, indexes, views and sequences all end up in the USERSPACE1 tablespace or the bootstrapping will fail.

Minimum required storage is 300 MB, 500 MB is better.

Here are steps you can take to ensure that LiveCycle bootstraps to the tablespace you want it to.

CREATE NEW BUFFERPOOL WITH 16 KB PAGESIZE
- Using the DB2 Control Center or the Command Line Processor (CLP), create a bufferpool (called LC_AIX for example) with a 16 KB pagesize. For a 300 MB bufferpool of 16 KB page size, you can create a size of 18,750 pages.

CREATE NEW SYSTEM TEMPORARY TABLESPACE WITH 16 KB PAGESIZE
- Create a "system temporary" tablespace called LC_SYSTEMP and configure it to use the newly created bufferpool

CREATE NEW REGULAR TABLESPACE WITH 16 KB PAGESIZE
- Create a new "regular" tablespace called LIVECYCLE, also configured it to use the newly created bufferpool. You could create another 16 KB bufferpool for this, it's up to you based on your corporate IT policy. Also, if possible, delete the USERSPACE1 tablespace that is created by default whenever a new database is created in DB2. It only has a 4 KB pagesize which is insufficient for LiveCycle.

CREATE NEW SCHEMA and DB USER
- Create a new schema called LC_USR. Depending on your IT policy, you would also have to create an OS user. For example, if DB2 is running on Windows, create a Windows user named LC_USR first and assign the user to the DB2USERS Windows user group. Then create the schema with this user. Creation of the schema will also create a DB2 DB user. If you used DB2 Control Center to do this, you wouldn't see the new user until you log out and then log back in!

GRANT ADDITIONAL AUTHORITIES TO DB USER
- Using DB2 Control Center or CLP, change the user LC_USR giving it two authorities, namely 'Connect to database' and 'Create tables'.

SET DEFAULT TABLESPACE FOR DB USER
- Also set this user's default tablespace as LIVECYCLE, with GRANT if your IT policy permits
- Make sure the schema is set as LC_USR

CONFIGURE WEBSPHERE
- If your appserver is WebSphere, make sure that the schema for the JMS message store is LC_USR
- Also for WebSphere, ensure that the J2C Authentication Alias for LiveCycle uses the same user credentials

START WEBSPHERE MESSAGING ENGINE
- Start the WebSphere appserver instance(s) hosting the JMS messaging engine(s).
- Check the tablespace, you should see eight tables with names starting with SIB... SIB is IBM's WebSphere Service Integration Bus.

START WEBSPHERE INSTANCE HOSTING LIVECYCLE, DEPLOY LIVECYCLE EARs
BOOTSTRAP LIVECYCLE
- Bootstrap LiveCycle using LiveCycle Configuration Manager (LCM).

VERIFY
- Check DB2. Tables, indexes, views and sequences belonging to LiveCycle (many but not all have names that start with EDC...) should now be created in the designated tablespace.
- Verify by logging in to the LiveCycle Admin Console and navigating to Home ->Services ->Archive Administration->Service Management. About 140 services should get listed, depending on the LiveCycle components you have licensed.

UPDATE DB STATS
- Run update statistics so that queries run faster - CLP command is REORGCHK UPDATE STATISTICS ON TABLE ALL

RUN CONFIGURATION ADVISOR
- Run DB2 Configuration Advisor on the database configuring it for "a mixed" workload, fewer than 10 (short transactions), faster transaction performance, 100 average number of connected remote applications, and "cursor stability" isolation level.

January 09, 2008

LiveCycle - LDAP Directory Synch Verification

One of the questions that consistently come up during LiveCycle ES installations is how one would go about verifying LiveCycle's synchronization with the corporate LDAP directory. If you have access to a database querying tool such as Aquafold AquaDataStudio, Microsoft Visual Studio, Oracle SQL Developer or Quest TOAD, you can run some queries against the LiveCycle database. Of these tools, AquaDataStudio supports all of the database platforms LiveCycle supports, runs on Windows, Linux and Solaris, and supports JDBC.

- run the following query against table EDCPRINCIPALDOMAINENTITY to determine the id of the LiveCycle User Manager domain you have created for your LDAP directory (replace lc_db_usr with your schema name):
SELECT id, commonname, domainname, syncstate
FROM lc_db_usr.EDCPRINCIPALDOMAINENTITY
ORDER BY domainname

The id will look something like this:
E69D93E4-C969-F1A7-105D-41C786157625

- Using that id, run the following query against table EDCPRINCIPALENTITY to determine the number of users that have been synched (replace lc_db_usr with your schema name):
SELECT COUNT(*) AS Expr1
FROM lc_db_usr.EDCPRINCIPALENTITY
WHERE (refdomainid = 'id_from_first_query') AND (principaltype = 'USER')

- for more details on the users, run this (replace lc_db_usr with your schema name):
SELECT canonicalname, commonname, description, email, originalname, status
FROM lc_db_usr.EDCPRINCIPALENTITY
WHERE (refdomainid = 'id_from_first_query') AND (principaltype = 'USER')
ORDER BY canonicalname

- run the following query against table EDCPRINCIPALENTITY to determine the number of groups that have been synched (replace lc_db_usr with your schema name):
SELECT COUNT(*) AS Expr1
FROM lc_db_usr.EDCPRINCIPALENTITY
WHERE (refdomainid = 'id_from_first_query') AND (principaltype = 'GROUP')

- for more details on the groups, run this (replace lc_db_usr with your schema name):
SELECT canonicalname, commonname, description, email, originalname, status
FROM lc_db_usr.EDCPRINCIPALENTITY
WHERE (refdomainid = 'id_from_first_query') AND (principaltype = 'GROUP')
ORDER BY canonicalname

These queries have been tested against SQL Server 2005 from Microsoft Visual Studio 2005.

January 04, 2008

Invoke LiveCycle with Visual Basic .NET 2005/2008

LiveCycle services can be invoked via SOAP from a Windows dektop application built with Visual Basic .NET

The basic steps are (for both Visual Studio 2005 and 2008):
1) Create a "Windows Application"
2) Create a "Web Reference" and point it to the WSDL file of the LiveCycle service you are interested in. The Forms service WSDL is at http://ip_address:web_container_port/soap/services/FormsService?wsdl. Examples are:
- JBoss : http://jboss_server:8080/soap/services/FormsService?wsdl
- WebSphere : http://was_server:9080/soap/services/FormsService?wsdl
- WebLogic : http://wl_server:7002/soap/services/FormsService?wsdl
3) Use this web reference to start coding

Sample code (Visual Studio solution) invoking the RenderPDFForm and ProcessFormSubmission methods of the Forms service is attached. It contains one form with two buttons.

The click event on the first button:
- reads an XML data file from a Windows desktop client's local disk
- calls Adobe LiveCycle ES Forms using SOAP over HTTP to render an XDP form template on the server filesystem with this XML data
- retrieves the rendered interactive PDF form
- invokes Microsoft Internet Explorer and displays it

The click event on the second button:
- reads a saved interactive PDF form file from a Windows desktop client's local disk
- calls the ProcessFormSubmission method of Adobe LiveCycle ES Forms using SOAP over HTTP with the PDF file
- retrieves the extracted XML data
- invokes Microsoft Internet Explorer and displays it

The code has been tested on Windows Vista clients against:
- LiveCycle ES running on IBM WebSphere ND 6.1.0.9 on AIX 5.3/Oracle 10g
- LiveCycle ES running on JBoss 4.0.3SP1/Windows 2003 Server/SQL Server 2005

To make it work in your environment, you would need to change the values of the constants at the beginning and re-build the solution. The input document for the ProcessFormSubmission is actually the output PDF of the RenderPDFForm, saved to the local disk.

The solution was built using Visual Studio 2005. If you open it in Visual Studio 2008, an import will be required. However, the code has been tested to work in Visual Studio 2008.

December 17, 2007

LiveCycle - Quick and Dirty Server Sizing

One of the most common problems LiveCycle project sponsors face is determining how many servers they need to deploy to satisfy their throughput and/or SLA (Service Level Agreement) requirements. The following highly generalised information will help in arriving at a ballpark figure for the initial discussion phase:

- LiveCycle performance is CPU-bound in most cases
- The more CPUs your server has, the better transaction throughput you will get
- The better the CPU subsystem (higher clock speeds, higher FSB speeds, better supporting chipsets, faster memory), the better the transaction throughput you will get
- Each server requires at least 3 GB of available RAM. 4 GB will give you a comfortable breathing room. This includes about 500 MB for the operating system, about 1 GB for the java process that hosts the appserver instance, and about 250 MB for LiveCycle's non-Java components such as XMLForm. In addition to this, the appserver itself would have other processes running such as the node agent/manager etc.
- As a general rule, LiveCycle can handle roughly 5 concurrent requests on each CPU core. This varies between current Intel, AMD, Sun and IBM processors. For example, if your server has two dual-core CPUs, and if each LiveCycle transaction experiences an elapsed time of 1 second under load, this server can be expected to provide a throughput of 4 cores * 5 concurrent requests * 60 * 60 = 72,000 transactions per hour.
- Your system should be capable of satisfying the SLA at peak concurrent request load
- To determine your peak concurrent request load, consider your absolute busiest hour during your busiest time of the year.
- Concurrent requests are NOT the same as the number of users
- Concurrent requests are NOT the same as the number of users currently logged in
- Concurrent requests are requests sent to the server(s) by users or by batch processes that, at any given point in time, are either queued up, or are executing on the server(s). This number is usually a very small subset (2-5%) of the total number of users who are currently logged in to the application.
- The LiveCycle database requires about 300 MB of storage at the outset. Storage requirement during production use depends entirely on the custom applications that are built with LiveCycle
- LiveCycle is supported on VMWare ESX, AIX LPARs and Solaris 10 Containers. The same memory requirement (at least 3 GB) applies. Provision at least two CPU cores.
- For High Availability (HA), deploy LiveCycle in horizontal clusters of at least two separate servers, physical or logical (like VMWare). Physical is better (provides hardware redundancy).

Please note: Never deploy a LiveCycle-based enterprise application into production use without taking it through the wringer of at least one performance-testing cycle by a competent load testing team with professional-quality tools such as HP LoadRunner, Borland SilkPerformer, IBM Rational Performance Tester or RadView WebLOAD with the Flex 2 Add-On.

December 14, 2007

LiveCycle - Global Storage Configuration Using Microsoft Services for NFS

If you are deploying LiveCycle in a horizontal cluster of multiple servers, the global storage folder would have to be shared by all of them since there can only be one global storage folder. If you are running LiveCycle exclusively on AIX, Solaris or Linux, mounting the global storage folder using NFS is relativley straightforward. The same applies to a complete Windows environment. However, if you are running LiveCycle on AIX, Solaris or Linux and you need to configure the global storage folder on a Windows network file share, things get tricky. Open-source and free Samba is one option. For a native Microsoft solution, you can use 'Microsoft Services for NFS', a component of 'Windows Services for UNIX'.

Install Microsoft Services for NFS on the Windows Server
Microsoft ships Windows 2003 Server with "Microsoft Services for NFS". This is an optional component that you need to install which consists of an NFS Server as well as an NFS Client. To install it:
- Put the Windows Server 2003 CD/DVD, run setup.exe
- Choose 'Install Optional Windows Components'
- Highlight 'Other Network File and Print services' and click the Details button
- Highlight 'Microsoft Services for NFS' and click the Details button
- Check all of the checkboxes including 'Client for NFS', 'Microsoft Services for NFS Administration', 'Server for NFS', 'Server for NFS Authentication' and 'User Name Mapping'
- Click OK
- Reboot server afterwards.

Ensure that you can ping the Windows server hosting the NFS share from all of the UNIX servers
Ensure also that you can ping all of the UNIX servers in the cluster from the Windows server hosting the NFS share

Create Users and Groups on UNIX Nodes
- Create a new user on all UNIX member nodes with the same name as well as UID ('was_adm', for example)
- Create a new group on all UNIX member nodes with the same name as well as GID ('was', for example)
- Make 'was_adm' as well as 'root' members of the new group

Configure NFS Server on the Windows Box
- Copy the /etc/passwd and /etc/group files from one of the the UNIX servers to the %WINDOWS_DIR%/msnfs/ folder
Start the 'Microsoft Services for NFS Administration' MMC Console (navigate All Programs->Administrative Tools->Microsoft Services for Network File System)
- In the left pane, highlight 'User Name Mapping' node, and open its Properties window
- In the 'UNIX User Source' tab, choose the radiobutton for 'Use Password and Group Files'
- In 'Password file path and name', browse to %WINDOWS_DIR%/msnfs/passwd
- In 'Group file path and name', browse to %WINDOWS_DIR%/msnfs/group
- In the 'Simple Mapping' tab, check the checkbox for 'Use simple maps'
- Click 'Apply, then 'OK'.
- In the left pane, expand the node 'User Name Mapping' and highlight 'User Maps' node,choose 'Create Map'
- Click the 'List Windows Users' button
- Click the 'List UNIX users button'
- Select the user mapping (for example, 'Administrator' - 'root') and click Add. It is better to map 'root' to 'Administrator and an additional user (say 'was_adm') to a Windows local user, also called 'was_adm').
- You can also perform group mapping. Administrators=system, 'was'='was'

Make sure the user that WebSphere/WebLogic/JBoss runs as is mapped ('was_adm', for example). Also, make sure that this user is exactly the same on all of the cluster members.

- Create a folder on the Windows server to host the shared global storage folder.
- Configure NFS sharing on the Windows folder. For this, in Windows Explorer, highlight the folder and choose the Properties window.
- In the 'NFS Sharing' tab, make sure that the folder is shared.
- Click the 'Permissions' button. Ensure that the 'Type of Access' is 'Read-Write'. You might also have to check the 'Allow Root Access' checkbox.

Configure the UNIX Servers
Login as root and mount the folder on all the UNIX boxes with the following command (where 192.36.51.13 is the IP address of the Windows server, /aix is the folder on the Windows box that is NFS-shared). Make sure that the folder on the UNIX server (/opt/adobe/livecycle8/lc_global_storage/ in the example) already exists and is the same on all the UNIX servers.
mount 192.36.51.13:/aix /opt/adobe/livecycle8/lc_global_storage

Change ownership of the folder to the user WebSphere runs as:
chown was_adm:was /opt/adobe/livecycle8/lc_global_storage
If this throws an authentication error, your user name mapping on the Windows Server does not work. LiveCycle should also have been installed as the user WebSphere runs as.

Test by copying files into the folder from each of the UNIX servers as well as from the Windows server. Also, ensure that the contents of this folder are visiible on all of the UNIX servers using the ls -al command.

If a mistake was made and you want to undo the mount, use the following command:
umount /opt/adobe/livecycle8/lc_global_storage

Configure LiveCycle
Start LiveCycle Configuration Manager (LCM) and point the Global Storage Folder to /opt/adobe/livecycle8/lc_global_storage

Verify
After LiveCycle is bootstrapped and configured, log in to the LiveCycle Admin Console on each and every one of the servers in the cluster
- Navigate to Home > Services > Archive Administration > Service Management
- Ensure that all the Services are listed.
If there is any mis-configuration, you will get an internal error instead of a list of services

To learn more about Windows Services for UNIX, see whitepaper from Microsoft.
More about NFS is available in this note from MIT's OpenCourseWare.

November 27, 2007

Calling LiveCycle When Deployed In A Cluster

For IBM WebSphere 6.1, the following will work:
ConnectionProps.setProperty("DSC_DEFAULT_EJB_ENDPOINT", "corbaloc:iiop:host1.adobe.com:2811,iiop:host2.adobe.com:2811");

2811 is the BOOTSTRAP_ADDRESS of the application server instances that are members of the cluster. The port number is the same in this case since the two cluster members are running on separate hosts (host1 and host2).

More information on corbaloc from Ciaran McHale of IONA.

November 12, 2007

Create Detailed Version Report for LiveCycle ES

Run the LiveCycle Configuration Manager (LCM) from $LIVECYCLE_INSTALL_HOME/configurationManager/bin/. In the main screen, check the checkbox for 'Display Menu '(at the bottom of the screen). Choose Tools->Version Report. Point the 'Input file or directory' field to $LIVECYCLE_INSTALL_HOME/deploy/. If you click the 'Run Report' button, the output will be available in $LIVECYCLE_INSTALL_HOME/configurationManager/bin/export/.

When creating a support request (SR) with Adobe Enterprise Support, this version report will come in very useful.

LiveCycle ES 8.0.1 Service Pack 1b (SP1b) now available

When applied, this Service Pack will take LiveCycle ES 8.0.1 to 8.0.1.1

LiveCycle ES Server and Workbench SP 1b - (868 MB)
LiveCycle ES Designer SP 1b - (32 MB)

The J2EE server log will report the following versions (older 8.0.1 versions in parentheses). Depending on the LiveCycle components you have licensed and deployed, you may not see all of the components listed below.

DataManagerService: Version: 8.0.3303.1.165211.1 (8.0.3187.1.156868.1)
FormServer: Version: 8.0.3188.1.405432.9 (8.0.3188.1.405432.9)
Output: Version: 8.0.3188.1.405432.9 (8.0.3188.1.405432.9)
UMCacheService: Version: 8.0.3303.1.165211.1 (8.0.3187.1.156868.1)
IDPScheduler: Version: 8.0.3303.1.165211.1 (8.0.3187.1.156868.1)
Quartz scheduler version: 1.6.0 (1.6.0)
UMStartupService: Version: 8.0.3303.1.165211.1 (8.0.3187.1.156868.1)
ServicesNatives2: Version: 8.0.3187.1.156868.1 (8.0.3187.1.156868.1)
ConvertPdfService: Version: 8.0.3188.1.405432.9 (8.0.3188.1.405432.9)
Img2PDFSvc: Version: PDFGImg2PDF8.00 (PDFGImg2PDF8.00)
Native2PDFSvc: Version: PDFG8.00 (PDFG8.00)
OpenOffice2PDFSvc: Version: PDFG8.00 (PDFG8.00)
PDFMakerSvc: Version: PDFG8.00 (PDFG8.00)
PsToPdfSvc: Version: PS2PDF8.00 (PS2PDF8.00)
XMLFormService: Version: 8.0.70921.0.413567.6 (8.0.70707.0.403125.11)

You can also verify whether you are running SP1b by logging into the LIveCycle Administration Console and navigating to Home->About. For each of the 'Installed Components', you should see 8.0.1 under the 'Version' column and SP1b under the 'Patch' column.