Recently in General Interest Category

Configuring JBoss / LiveCycle to Autostart on SUSE Enterprise Linux

| No Comments

Since LiveCycle ES is server-side software, the J2EE appserver hosting it should ideally be configured to start automatically after a server restart. On Novell SUSE Enterprise Linux, this requires changes to the run.sh JBoss startup file to fit the requirements of SUSE's chkconfig utility.

1) Download the jboss run file (make sure it does not have any extensions such as "txt")
2) Edit it to fit your environment
3) Move it to /etc/init.d/ with 755 permissions, owned by root

4) Download the required config file (make sure it does not have any extensions such as "txt")
5) Edit it to fit your environment
6) Move it to /etc/sysconfig/ with 644 permissions, owned by root

7) login as 'root', cd to /usr/sbin and run the command:
chkconfig jboss on

Verify that appropriate Start and Stop (Kill) soft links have been created in /etc/init.d/rc3.d and /etc/init.d/rc5.d When the server is restarted, the S10jboss link to /etc/init.d/jboss will be invoked to start JBoss. When the server is shut down, the K01jboss link to /etc/init.d/jboss will be invoked. 10 makes sure that JBoss will be started last (after all other services have been started, including MySQL). 01 makes sure that JBoss will be one of the first services to be shutdown on server shutdown.

You can also manually stop JBoss as root by running the command ./jboss stop from /etc/init.d/

Creating a soft link to /etc/init.d/jboss from /usr/sbin/ will let you run this from any directory since /usr/sbin/ is usually in the PATH envitronment variable. The command is (as root):
ln -s /etc/init.d/jboss /usr/sbin

LiveCycle - Encrypting Cleartext JBoss Data Source Passwords

| No Comments

DBAs and JBoss system administrators are weary of having the password to the LiveCycle database in cleartext in the data source configuration XML file. JBoss provides instructions here on how to use it in encrypt form.

1) Encrypt database password
The following command will encrypt the password "lc_password":
java -cp C:\Programs\jboss_es2\lib\jboss-common.jar;C:\Programs\jboss_es2\lib\jboss-jmx.jar;C:\Programs\jboss_es2\server\lc_mysql\lib\jbosssx.jar;C:\Programs\jboss_es2\server\lc_mysql\lib\jboss-jca.jar org.jboss.resource.security.SecureIdentityLoginModule lc_password.
Obviously, you should replace the paths to the JAR files with yours. In the above example, the JBoss configuration is "lc_mysql"
If successful, you should get a response like as follows:
Encoded password: -2d19d44d319c1d9e008fba5553e14ea0

2) Create new Application Policy
Edit the %JBOSS_HOME%\server\lc_mysql\conf\login-config.xml file and create a new application policy that would look something like this.

3) Configure data source with the new Application Policy
Replace the following:
<user-name>lc_db_usr</user-name>
<password>password</password>
with this:
<security-domain>EncryptDBPasswordAppPolicy</security-domain>
where "EncryptDBPasswordAppPolicy" is the name of the 'application policy' you created in %JBOSS_HOME%\server\\conf\login-config.xml

This has been tested to work with MySQL. Your mileage with Oracle, SQL Server etc may vary.

Using Charles To Debug LiveCycle Workspace

| No Comments

Charles is a shareware tool that can be used to debug connectivity and other issues with LiveCycle Workspace. A Firefox plugin is also available. Evaluation version is free for 30 days.

Once installed and configured, it will give you very detailed information on the requests being sent by the browser to the LiveCycle server as well as the responses from the LiveCycle server back to the browser. It is supported on Windows, MacOS and Linux. It also has a 64-bit version.

AMF3 is supported natively, with an AMF tab that displays the contents of AMF3 messages in a readable hierarchical format.

It is essentially a Java proxy application that needs a JRE to be installed (the JAVA_HOME environment variable needs to be set).

Load-Testing LiveCycle Workspace Applications

| No Comments

Since LiveCycle Workspace ES is an application built with Flex, load-testing business processes (long-lived orchestrations) built with it can be a challenge if you are using versions of LoadRunner, SilkPerformer etc that do not support the AMF3 protocol.

Neotys NeoLoad supports AMF3 natively. If you have prior experience with load testing tools, you can get a load-test scenario for Workspace developed and running in about 4-6 hours using NeoLoad. Neotys provides a downloadable 30-day evaluation copy. Sample project is available (4.8 MB) lc_workspace.zip

Immediately after recording a scenario, it will ask you for the flex-messaging-data.jar file. You can obtain it from %LC_INSTALL_ROOT%\LiveCycle_ES_SDK\misc\DataServices\Server-Libraries\

Please note that the forms used in the process should be XDP, not PDF. Also, ensure that Process Management ES works in your environment. Instructions are available here.

As most experienced load-testers know, the trick to developing solid load-test scripts is knowing which parameters are dynamic and therefore have to be parsed out of server responses and re-used in subsequent requests to the server. For Workspace ES in 8.2.1 (Update1), these parameters are as follows:

JSESSIONID

The JSESSIONID (B93D4FA6F9FDA1911CD701FB5C310887) is returned by the server when you load the login page (/workspace-server/determine-locale) as this, for example:
Set-Cookie: JSESSIONID=B93D4FA6F9FDA1911CD701FB5C310887; Path=/

authData

authData (c3RAQENDIyNhdUBAMA==) is also returned by the server when you load the login page (/um/login) as this, for example:
Set-Cookie: authData=c3RAQENDIyNhdUBAMA==; Path=/

lcAuthToken

lcAuthToken (272ED3A8-D412-8068-E1F3-610FF7CFE531) is returned by the server when you login with a userID and password (/um/login) as this, for example:
Set-Cookie: lcAuthToken=272ED3A8-D412-8068-E1F3-610FF7CFE531; Path=/

oid

oid (9EF6E50E-FAE4-93A0-A70C-580518BC4AD9) is also returned by the server when you login (/workspace-server/authenticate) as this, for example:
valid=true&oid=9EF6E50E-FAE4-93A0-A70C-580518BC4AD9&userid=rwoodard&displayName=Rye+Woodard

When you submit the form, the value for AWS_ASSIGNED_ID has to be parameterized with the value of oid as follows:
<AWS_ASSIGNED_ID>${oid}</AWS_ASSIGNED_ID>

taskId

The taskId (111) is returned to you in an AMF message when you start a process by loading its init form. You cannot parse this unless your load-test tool understands AMF3. It looks like this:
<taskId tagClass="double">111.0</taskId>

When you submit the form, the value for AWS_TASKID has to be parameterized as follows:
<AWS_TASKID>${Task_ID}</AWS_TASKID>

formName

The URL for the form is also returned to you in an AMF message when you start a process by loading its init form, for example like this.
<url tagClass="String">http://localhost:8080/workspace-server/documents/3727297134487800504-9.pdf</url>

The form name (3727297134487800504-9) will change from invocation to invocation and has to be parameterized for your load-test script to work.

When you submit the form, the value for pdf href has to be parameterized as follows:
<pdf href="http://localhost:8080/workspace-server/documents/${Rendered_Form_Name}.pdf" xmlns="http://ns.adobe.com/xdp/pdf/">

Analyzing and Reporting LiveCycle Performance Test Results Using Excel

| No Comments

Performance-testing applications built on LiveCycle ES in the TEST and STAGING environments is now routinely done by Adobe's customers. However, test results are not always reported in a consistent manner.

Most tests are usually driven by a load driver tool such as HP LoadRunner, Borland SilkPerformer, Apache JMeter or The Grinder. Of these tools, JMeter and The Grinder are free but have limited capabilities compared to their commercial peers such as simultaneously collecting server-side metrics such as CPU, disk, memory and network bandwidth utilization. These tools report elapsed time for each transaction, usually in seconds. Depending on the number of these data points in a time interval (usually an hour), you can obtain the transaction throughput and report it in terms of transactions per hour.

Importing this data into Microsoft Excel, Open Office Calc or Google Docs will let you analyze and chart the results. In the case of Microsoft Excel 2007, you will need to install the "Data Analysis Toolpack" Addin.

For more details on LiveCycle performance testing methodology, see this DevNet article.

The following are the results of a twelve-hour, 1 virtual user test conducted using the eTech LiveCycle Benchmark, a short-lived orchestration that Adobe's eTech team uses for benchmarking LiveCycle performance. Since LiveCycle is a J2EE application, tests of durations less than 2 hours are essentially invalid. Most JVMs require up to 30 minutes to achieve steady state.

1) Create a Scatter Plot and Eye-ball the Results
------------------------------------------------------------

In Excel, highlight the column containing your elapsed time numbers and choose the menu option Insert->Scatter.

scatter.jpg

The scatter plot above (click it to get a larger picture) tells me that except for some outliers (exceedingly high elapsed time) at the very beginning of the test, most of the transactions during the 12-hr test experienced elapsed times consistently between 36 and 39 seconds.

2) Generate Descriptive Statistics
-------------------------------------------

Choose the menu option Data->Data Analysis->Descriptive Statistics. The Input Range should be the column containing your elapsed time numbers. Make sure that the checkboxes for 'Summary Statistics' and 'Confidence Level for Mean' are checked.

Mean : 37.3269204
Standard Error : 0.061905612
Median : 37.041
Mode :37.152
Standard Deviation : 2.149827787
Sample Variance : 4.621759516
Kurtosis : 352.1330688
Skewness : 17.45734641
Range : 51.27
Minimum : 36.544
Maximum : 87.814
Sum : 45016.266
Count : 1206
Largest(1) : 87.814
Smallest(1) : 36.544
Confidence Level(95.0%) : 0.12145476

In the above result, the important metrics are Mean, Median, Minimum, Maximum, Count and Confidence Level (95%). It essentially tells me that if I were to repeat the same test under identical circumstances, 95 out of 100 transactions can be expected to experience an elapsed time of between (Mean - Confidence Level) and (Mean + Confidence Level) which is 37.21 seconds - 37.45 seconds.

If you are comparing the results of two or more test runs, Mean, Median and Standard Deviation are useful. If you have two test runs who have Mean Elapsed Time values which are very close to each other, the Standard Deviation (SD) can be used to make a decision. The test run with a lower SD is better. Also, tests with lower Medians are better.

3) Calculate Percentiles
------------------------------

Choose the menu option Data->Data Analysis->Rank and Percentile. The Input Range should be the column containing your elapsed time numbers.
...
59 : 44.002 : 7 : 99.50%
1000 : 42.833 : 8 : 99.40%
1001 : 42.049 : 9 : 99.30%
6 : 41.922 : 10 : 99.20%
63 : 41.433 : 11 : 99.10%
4 : 40.289 : 12 : 99.00%
58 : 39.75 : 13 : 99.00%
9 : 39.52 : 14 : 98.90%
60 : 39.18 : 15 : 98.80%
5 : 39.161 : 16 : 98.70%
...
The above result (snipped) tells me that in the test, 99% of the transactions experienced an elapsed time of 39.75 seconds or less. This is a key metric if you have to satisfy Service Level Agreements (SLAs) with the business unit that uses the application. If this number is above the SLA, you have to add additional members to the cluster or run LiveCycle on better hardware.

Running LiveCycle on JBoss as a 64-bit Windows Service

| No Comments

In most Windows server environments, it is almost a necessity that JBoss be run as a Windows service that is configured to auto-start and auto-stop on Windows start and stop. Free tools have existed for 32-bit Windows/Java environments for some time but not for 64-bit environments. "JBoss Web Native Connectors" that were released by JBoss for JBoss 5.0 can now be used for JBoss 4.2 as well.

The following instructions also work for Windows Server 2008 64-bit although LiveCycle ES 8.2 is currently not supported on it.

1) Download the JBoss Web Native Connector for 64-bit Windows ("JBoss Native 2.0.6 Win64 AMD64/EMT64") from here.

2) Unzip the downloaded file. Copy all contents of the \bin folder to the \bin folder of your JBoss.

Edit service.bat

3) Make sure that the variables for Service Name (SVCNAME), Service Display (SVCDISP) and Service Description (SVCDESC) have values that reflect your JBoss environment. For example:
set SVCNAME=JBAS42SVC
set SVCDISP=JBossAS 4.2 for Adobe LiveCycle ES 8.2
set SVCDESC=JBoss Application Server Community Edition 4.2.0 GA/Platform: Windows x64

4) In the :cmdStart section, make sure that the call run.bat line is enhanced with the configuration name ("all" in this example) and bind IP address (0.0.0.0 for binding to all of the server's IP addresses) such as follows:
call run.bat -c all -b 0.0.0.0 < .r.lock >> run.log 2>&1

5) Repeat the same for the :cmdRestart section:
call run.bat -c all -b 0.0.0.0 < .r.lock >> run.log 2>&1

6) Save the file.

7) From the \bin folder of JBoss, create the Windows service using the following command:
service.bat install

If the command worked, you will get a response such as:
Service JBossAS 4.2 for Adobe LiveCycle ES 8.2 installed

8) Check the Services applet in Windows Control Panel for a new service listed as "JBossAS 4.2 for Adobe LiveCycle ES 8.2" which is the value of the SVCDISP variable in service.bat

9) Using the Services applet in Windows Control Panel, set the 'Startup type" to "Automatic".

10) In the "Recovery" tab, set First failure and Second failure recovery options such as "Restart the Service" and "Restart the Computer" respectively.

11) If needed, change the "Logon as" value from the default "Local System" account to another user or service account.

Verification

1) Start the service from the Services applet in Windows Control Panel

2) Watch (tail) the server.log to make sure that the service starts successfully.

3) Shutdown the service from the Services applet in Windows Control Panel and verify that it gets shut down successfully.

4) Make sure that a service re-start from the Services applet in Windows Control Panel also works.

Additional configuration can be performed using either the Services applet in Windows Control Panel or by using the built-in Windows Service Configuration utility (sc). From a command prompt, run the following command for additional details:
sc /help

For example, if the database service runs on the same machine instance, you can create a dependency on that service with the following command:
sc config JBAS42SVC depend= MSSQL$MYSERVER
where MSSQL$MYSERVER is the SVCNAME of the Microsoft SQL Server 2005 service running on the same server instance. Please note that there should NOT be any space before the = sign but there should be a space after the = sign. This is very important.

If successful, you will get a response such as follows:
[SC] ChangeServiceConfig SUCCESS

In many customer situations, you might be required to run multiple, non-clustered JBoss instances on the same server. For example, TEST and DEV instances, or LiveCycle ES and BAM (Business Activity Monitor) instances.

To avoid port conflicts, you will have to change the ports for one of the JBosss instances. Here is a list of what you'd have to do if you are using the "all" configuration:

Please note : some of these recommended ports might conflict in your particular environment. In such cases, you might have to experiment until you get one that does not conflict. The JBoss server.log will tell you if there are any port conflicts. In Windows, you can use TCPView from Microsoft to inventory currently used ports. On Linux, you can use the netstat -an command.

%JBOSS_HOME%\server\all\deploy\jboss-web.deployer\server.xml (Tomcat)
Change HTTP Connector port from 8080 to 8090
Change redirectPort from 8443 to 8453
Change SSLConnector from 8443 to 8453
Change AJP Connector from 8009 to 8010

%JBOSS_HOME%\server\all\conf\jboss-service.xml
Change org.jboss.web.WebService port from 8083 to 8084
Change org.jboss.naming.NamingService Port from 1099 to 1200
Change org.jboss.naming.NamingService RmiPort from 1098 to 1201
Change org.jboss.invocation.jrmp.server.JRMPInvoker RMIObjectPort from 4444 to 4544
Change org.jboss.invocation.pooled.server.PooledInvoker ServerBindPort from 4445 to 4545
Change invoker serverBindPort from 4446 to 4546

%JBOSS_HOME%\server\all\conf\jacorb.properties
Change ORBInitRef.NameService=corbaloc::localhost:3528/JBoss/Naming/root from 3528 to 3529
Change OAPort from 3528 to 3529
Change OASSLPort from 3529 to 3530

%JBOSS_HOME%\server\all\deploy-hasingleton\jms\uil2-service.xml
Change org.jboss.mq.il.uil2.UILServerILService ServerBindPort from 8093 to 8094

%JBOSS_HOME%\server\all\deploy\ejb3.deployer\META-INF\jboss-service.xml
Change org.jboss.remoting.transport.Connector InvokerLocator port from 3873 to to 3973

%JBOSS_HOME%\server\all\deploy\snmp-adaptor.sar\META-INF\jboss-service.xml
Change org.jboss.jmx.adaptor.snmp.trapd.TrapdService Port from 1162 to 1164
Change org.jboss.jmx.adaptor.snmp.agent.SnmpAgentService Port from 1161 to 1163

%JBOSS_HOME%\bin\run.bat
Add a line to add a new property:
set JAVA_OPTS=%JAVA_OPTS% -Djboss.partition.name=partitionLCDev

%JBOSS_HOME%\server\all\deploy\cluster-service.xml (JBoss Cluster)
Add attribute ip_mcast="false"
Change num_initial_members from 3 to 1
Change org.jboss.ha.jndi.HANamingService port from 1100 to 1203
Change org.jboss.ha.jndi.HANamingService RmiPort from 1101 to 1204
Change AutoDiscoveryGroup port from 1102 to 1205
Change org.jboss.invocation.jrmp.server.JRMPInvokerHA RMIObjectPort from 4447 to 4547
Change org.jboss.invocation.pooled.server.PooledInvokerHA ServerBindPort from 4448 to 4548

%JBOSS_HOME%\server\all\deploy\ejb3-clustered-sfsbcache-service.xml (JBoss Stateful Sessions Beans [EJB] Cache)
Add attribute ip_mcast="false"
Change num_initial_members from 3 to 1

%JBOSS_HOME%\server\all\deploy\ejb3-entity-cache-service.xml (JBoss Entity Beans [EJB] Cache)
Add attribute ip_mcast="false"
Change num_initial_members from 3 to 1

%JBOSS_HOME%\server\all\deploy\jboss-web-cluster.sar\META-INF\jboss-services.xml (Tomcat Cluster)
Add attribute ip_mcast="false"
Change num_initial_members from 3 to 1

A load balancer is always required when LiveCycle is deployed in a cluster (with more than one member node). Apache Web Server 2.2 can be easily and quickly configured to act as one.

1) Download and install Apache Web Server 2.2 from here.

JBOSS CONFIGURATION
------------------------------

2) Assuming that the DNS name of the machine hosting the Apache Web Server is apache.company.com, edit the Tomcat configuration file ($JBOSS_HOME/jboss-4.2.0_mssql2005/server/all/deploy/jboss-web.deployer/server.xml) of each of the JBoss instances in the cluster hosting LiveCycle so that the HTTP Connector configuration looks similar to this:
<Connector port="8080" address="${jboss.bind.address}"
proxyName="apache.company.com" proxyPort="80"
maxThreads="250" maxHttpHeaderSize="8192"
emptySessionPath="true" protocol="HTTP/1.1"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" />

APACHE WEB SERVER CONFIGURATION
-------------------------------------------------

3) Edit the configuration file of Apache Web Server (httpd.conf) and enable proxying, load balancing and load balancer management by uncommenting the following lines:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule status_module modules/mod_status.so

# Set TCP/IP network buffer size for better throughput (bytes)
ProxyReceiveBufferSize 4096

4) Assuming that you have a vertical cluster of two JBoss instances (listening respectively on ports 8080 and 8090) running on the same machine (ip address 10.20.30.40), configure a Load Balancer named livecycle-lb:
# Enable Load Balancing
<Proxy balancer://livecycle-lb>
BalancerMember http://10.20.30.40:8090
BalancerMember http://10.20.30.40:8080
</Proxy>

More details are available here.

5) Perform additional configuration for the LiveCycle applications

# FormsIVS configuration
ProxyPass /FormsIVS balancer://livecycle-lb/FormsIVS
ProxyPassReverse / balancer://livecycle-lb/FormsIVS

# OutputIVS configuration
ProxyPass /OutputIVS balancer://livecycle-lb/OutputIVS
ProxyPassReverse / balancer://livecycle-lb/OutputIVS

# AssemblerIVS configuration
ProxyPass /Assembler balancer://livecycle-lb/Assembler
ProxyPassReverse / balancer://livecycle-lb/Assembler
ProxyPass /remoting balancer://livecycle-lb/remoting
ProxyPassReverse / balancer://livecycle-lb/remoting

# Rights Management
ProxyPass /edc balancer://livecycle-lb/edc
ProxyPassReverse / balancer://livecycle-lb/edc
ProxyPass /rightsmgmt_help_en balancer://livecycle-lb/rightsmgmt_help_en
ProxyPassReverse / balancer://livecycle-lb/rightsmgmt_help_en

# Workbench
ProxyPass /soap balancer://livecycle-lb/soap
ProxyPassReverse / balancer://livecycle-lb/soap
ProxyPass /DocumentManager balancer://livecycle-lb/DocumentManager
ProxyPassReverse / balancer://livecycle-lb/DocumentManager

If you have any custom applications, for example with a context root of /lctest, add that:

# Custom application
ProxyPass /lctest balancer://livecycle-lb/lctest
ProxyPassReverse / balancer://livecycle-lb/lctest

6) Configure a Load Balancer Manager to check the status of the load balancer:
# Enable Load Balancer Manager
<Location /livecycle-lb-manager>
SetHandler balancer-manager
Deny from all
Allow from .company.com
</Location>

7) Re-start the Apache Web Server.

8) Re-start the JBoss instances in the cluster that hosts LiveCycle ES

VERIFICATION
------------

9) Point your browser to http://apache.company.com/livecycle-lb-manager
Under the "Worker URL" header, you should see all of the cluster members listed with the status of "Ok".

10) Bring one of the two JBoss instances down. Verify that you can still access LiveCycle:
http://apache.company.com/adminui

10) Bring the JBoss instance you shut down back up. Bring the other JBoss instance down. Verify that you can still access LiveCycle:
http://apache.company.com/adminui

Creating a Dedicated Profile for LiveCycle in WebSphere ND

| No Comments

The 64-bit version of WebSphere Application Server 6.1 ND does not come with a "Profile Management Tool" (PMT). IBM expects people to use the manageprofiles (.bat or .sh) script in the /bin folder of the WebSphere installation (C:\WebSphere\AppServer\bin\ for example). It is a good idea to create a dedicated WebSphere profile for LiveCycle instead of default ones named AppSrv01, AppSrv02 etc.

Here is a sample command (SUSE Linux Enterprise Server 10 example) to create a WebSphere profile called "LiveCycle":
./manageprofiles.sh -create -profileName LiveCycle -profilePath /opt/WebSphere/AppServer/profiles/LiveCycle -templatePath /opt/WebSphere/AppServer/profileTemplates/managed

If the command succeeds, the response would be something like this:
INSTCONFSUCCESS: Success: Profile LiveCycle now exists. Please consult /opt/WebSphere/AppServer/profiles/LiveCycle/logs/AboutThisProfile.txt for more information about this profile.

If you navigate to /opt/WebSphere/AppServer/profiles/, you will see that there now is a folder called LiveCycle there containing the new profile.

Change folder to the /bin folder of the new LiveCycle profile and federate the node to your cell. Make sure that the Deployment Manager process that manages the WebSphere cell is running. Run a command that looks like this (SUSE Linux Enterprise Server 10 example):
./addNode.sh DMgr.company.com DMgr_SOAP_ADDRESS
where DMgr.company.com is the DNS name of the server running the Deployment Manager process that manages the WebSphere cell.

If successful, you will get a response such as this:
Node ServerDNSNameNode01 has been successfully federated.
Here ServerDNSName is the DNS name of the node you just federated without its DNS suffix. This will also start the Node Agent for the node.

This new node (ServerDNSNameNode01 ) will now be visible in the WebSphere Admin Console. You are now ready to create the server and/or clusters to deploy LiveCycle. Please note that the LiveCycle Configuration Manager (LCM) only configures servers and/or clusters. It does not create them for you.

Here is a sample command (SUSE Linux Enterprise Server 10 example) to delete an existing WebSphere profile called "LiveCycle":
./manageprofiles.sh -delete -profileName LiveCycle

If successful, you will get a response such as this:
INSTCONFSUCCESS: Success: The profile no longer exists.

Tour de LiveCycle launches

| No Comments

Based on the success of Tour de Flex, the platform evangelism team decided to offer a similar tool exploring the features of LiveCycle ES. They combined forces with Avoka Technologies’ LiveCycle gurus and created a vast collection of content including samples, videos, whitepapers and more.

If you are curious about LiveCycle ES, this is a great first step. If you are an existing LiveCycle ES customer, you will find Tour de LiveCycle a valuable reference tool.

More information on Tour de LiveCycle is available here.

About this Archive

This page is an archive of recent entries in the General Interest category.

Adobe LiveCycle Express is the previous category.

Find recent content on the main index or look in the archives to find all content.