“Concurrent users” and performance tests

-- Jörg Hoh

A few years ago when I was still working in application management of a large website we often had the case, that the system was reported to be slow. Whenever we looked into the system with our tooling we did not found anything useful, and we weren’t able to explain this slowness. We had logs which confirmed the slowness, but no apparent reason for it. Sadly the definition of performance metrics was just … well, forgotten. (I once saw the performance requirement section in the huge functional specification doc: 3 sentences vs 200 pages of other requirements.)

It was a pretty large system and rumors reported, that it was some of the biggest installations of this application. So we approached the vendor and asked how many parallel users are supported on the system. Their standard answer “30″ (btw: that’s still the number on their website, although they have rewritten the software from scratch since then) wasn’t that satisfying, because they didn’t provide any way to actually measure this value on the production system.

The situation improved then a bit, got worse again, improved, … and so on. We had some escalations in the meantime and also ran over months in task force mode to fight this and other performance problems. Until I finally got mad, because we weren’t able to actually measure the how the system was used. Then I started to define the meaning of “concurrent users” for myself: “2 users are considered concurrent users, when for each one a request is logged in the same timeframe of 15 minutes”. I wrote a small perl script, which ran through the web server logs and calculated these numbers for me. As a result I had 4 numbers of concurrent users per hour. By far not exact, but reasonable to an extent, that we had some numbers.



Read the complete post at the Things on a Content Management System.

Creating MBeans for your CQ5 application

-- Jörg Hoh

JMX is the de-facto standard for monitoring java processes and applications. A lot of monitoring systems have the ability to consume these data.

By default CQ 5.5 has a number of MBeans, which offer runtime information about internal state. Most interesting ones are the MBeans about the repository state and the replication MBeans. But it isn’t hard to create your own MBeans, so you provide information about the internal state of your application to the monitoring system; or you can monitor resources which are critical to your application and use case.

In Cq5 we are working in a OSGI environment, so we will use one of my favorite patterns, the OSGI whiteboard pattern. We will use the JMX-Whiteboard bundle of the Apache Aries project to register services to JMX. Also that implementation is very short and understandable and shows the power of the whiteboard pattern. (I already had a short blog entry on this last year.)

In this example I want to demonstrate it on an already existing counter, the total number of requests handled by sling.It requires CQ 5.5, where the JMX whiteboard bundle is already deployed by default; but if you install the JMX Whiteboard bundle yourself, you can also use older versions of CQ5.



Read the complete post at the Things on a Content Management System blog.

Author server says Loading; for a long, long, long time

- Sensei Martin

When the Author server restarts, it can look, to the users, like it is hanging because as soon as they click on a node in the left hand nav tree they see "Loading" in the central pane. It just sits there saying "Loading" for a long, long, long time.

This can be caused by having lots of old Workflow instances hanging around (check /etc/workflow/instances). In which case, you should ensure that you install the Workflow purge tool from Adobe.

The purge tool by default will clear out any Workflow instances which are less than 14 days old (well the version I have says > 1 day but the code was actually > 14 days). It can be configured to only purge COMPELTED workflow, or ALL of them. However, beware that the default configuration (in my version 1.6.1 anyway) will only purge the following workflow models :-

  • "/etc/workflow/models/dam/dam_asset_syncer_and"
  • "/etc/workflow/models/dam/update_asset"
  • "/etc/workflow/models/dam/delete_asset"
  • "/etc/workflow/models/dam/delete_dam_asset"



Read the complete post at the My Day CQ blog.

Two new best practice articles now live…

We’ve just published two new articles in the CQ best practice series:

A list of the five articles published so far is at this URL. In the days to come, we’ll post more best practices, tips, and tricks that you can apply to your work.

Stay tuned!


Read the original blog post at The Doc Fox.

CQ Cloud Manager July 2012 version released!

The July release of Adobe CQ Cloud Manager is now out! This version rolls out the following new features/enhancements:

  • Full support for Rackspace Cloud Hosting (backup, scale, and delete CQ clouds)
  • Scale Publish tiers with auto-replication
  • Support for 7 Amazon Web Services (AWS) regions and 4 instance types
  • You can now remove CQ clouds with backups
  • Some UI enhancements

Refer to the documentation for more information.


Read the original post at The Doc Fox.

Creating custom CQ email services

- Scott Macdonald

You can create a custom CQ email service that lets CQ users send email messages from a CQ web page. To create a CQ email service, you develop an OSGi bundle that uses the Java Mail API. You can also develop a JSP that uses JQuery that calls the OSGi service and passes data that is sent as an email message.

 Caption – A CQ email client

To follow along with this development article, you need to download the Java Mail API at the following URL:


The Java Mail API is used within the OSGi bundle that sends email messages when the client initiates a request. The CQ email service comprises of a client (shown in the previous illustration) developed by using JQuery and an OSGi bundle. 



Read the full post at Scott's Digital Community.

CQ 5.5: Changes to the startup

- Jörg Hoh

See here for the major changes brought with this release.

Amongst the hundreds of new features I would like to point out a single one, which is probably the most intersting features for admins and operation people.

With CQ 5.5 the quickstart does no longer start a servlet engine with 2 webapplications deployed in it (crx.war for the CRX and launchpad.war for the OSGI container including Sling and CQ5 itself). But as now CRX has been adapted work inside an OSGI container it is possible to drop the artifical differentiation between CRX and the other parts of the system, but handle them alike inside Apache Felix. The same applies to the CQSE servlet engine; it’s now an service embedded into OSGI (so the server.log file is gone). So the quickstart starts the Felix OSGI container which then takes care of starting the repository services, the servlet engine and all other services introduced by Sling and CQ5. This streamlined the startup process a lot. And — finally — there is only 1 place where you need to change the admin password.



Read the complete post on the Things on a content management system blog.

CRX 2.3: snapshot backup

-- Jörg Hoh

About a year ago I wrote an improved version of backup for CRX 2.1 and CRX 2.2. The approach is to reduce the amount of data which is considered by the online backup mechanism. With CRX 2.3 this approach can still be used, but now an even better way is available.

A feature of the online backup — the blocking and unblocking of the repository for write operations — is now available not only to the online backup mechanism, but can be reached via JMX.



Read the complete post at Things on a Content Management System blog.

New CQ best practice articles now live!

- Samartha Vashishtha, Content and Community Lead @ Adobe

We’ve just published the following three CQ best practice articles:

These articles are the first few in the CQ best practices series. In the days to come, we’ll post more best practices, tips, tricks, and troubleshooting information that you can apply to your work.

Stay tuned!


Read the original post at The Doc Fox.

Integrating custom CQ widgets with third-party libraries

- Scott Macdonald, Senior Content and Community Lead @ Adobe

Have you ever wondered how to create a custom CQ widget that performs tasks not available with out of the box CQ components. In this situation, you can create a CQ widget that uses third-party libraries that lets your CQ application perform custom tasks. For example, assume that you want to create a CQ application that lets you view a specific street by using Google Map APIs.

Perhaps, you want your CQ component to accept latitude and longitude values and then show the results, as shown in the following illustration.

If you are interested in learning how to create CQ components that use third-party libraries, then check out the following article:  http://helpx.adobe.com/adobe-cq/using/integrating-custom-cq-widgets-third-party.html.


Read the original post at Scott's Digital Community.