CQ5 WCM How To - A Collection
Transcription
CQ5 WCM How To - A Collection
CQ5 WCM How To - A Collection CQ5 WCM How To - A Collection CQ 5.1 WCM Copyright 1993-2008 Day Management AG Contents 1. Introduction ........................................................................................................................ 1 1.1. Introduction ............................................................................................................. 1 1.2. Purpose of this Document ........................................................................................ 1 1.3. Target Audience ...................................................................................................... 1 2. How to Quickly Create a Website ....................................................................................... 2 2.1. Introduction ............................................................................................................. 2 2.2. Creating the application, the Content Page Template, the Content Page Component and a Web Page ........................................................................................................... 2 2.3. Setting up the Designer ........................................................................................... 3 2.4. Importing the original Web Page (CSS, HTML and images) into your project ................ 3 2.5. Replacing static content by dynamic content using CQ Foundation Components .......... 4 2.6. Creating a Media Library ......................................................................................... 5 3. How to Develop Components ............................................................................................. 6 3.1. Developing Components .......................................................................................... 6 3.1.1. Developing a new component by adapting an existing component .................... 6 3.1.2. Adding a new component to the paragraph system (design mode) ................... 7 3.1.3. Extending the Text and Image Component - An Example ................................ 7 4. How to Set Up a Cluster .................................................................................................. 14 4.1. How to Set Up a Cluster in Communiqué ................................................................ 14 5. How to Monitor Performance ............................................................................................ 16 5.1. Introduction ........................................................................................................... 16 5.1.1. Purpose of this How To .............................................................................. 16 5.1.2. Target Audience ......................................................................................... 16 5.2. Performance - some theory .................................................................................... 16 5.3. Performance - basic rules ...................................................................................... 18 5.4. Recognizing some common performance problems ................................................. 18 5.5. Monitoring, and optimizing, the performance ........................................................... 19 5.5.1. Tools and mechanisms ............................................................................... 19 5.5.2. Interpreting the request.log .......................................................................... 20 5.5.3. Caching ...................................................................................................... 22 5.5.4. Analyzing Search ........................................................................................ 24 6. How to Create and Use a Workflow .................................................................................. 25 6.1. Creating a Workflow .............................................................................................. 25 6.1.1. Creating a new Workflow Model .................................................................. 25 6.1.2. Editing the Workflow ................................................................................... 25 6.2. Using the Workflow ............................................................................................... 28 6.2.1. Starting the Workflow for an individual page ................................................. 28 6.2.2. Automatically Assigning a Workflow ............................................................. 30 6.2.3. Taking actions on a Participant Step ............................................................ 32 6.2.4. Suspending, Resuming and Terminating a Workflow instance ........................ 34 6.2.5. Monitoring the Status of Workflow Instances ................................................. 35 7. Upgrading to CQ5 ............................................................................................................ 37 7.1. How to Upgrade Your Communiqué Instance (3 or 4) to CQ5 ................................... 37 8. Installing CQ5 .................................................................................................................. 39 8.1. How to Install CQ WCM Author and Publish Instances using Quickstart ..................... 39 8.1.1. Installing a CQ WCM instance - Generic procedure ....................................... 39 8.1.2. Installing an Author instance ........................................................................ 40 8.1.3. Installing a Publish instance ........................................................................ 40 8.2. How to install CQ5 with an Application Server ......................................................... 41 8.2.1. WebSphere v6.1 ......................................................................................... 41 8.2.2. WebLogic v10.3 .......................................................................................... 43 8.2.3. Tomcat v6 .................................................................................................. 45 8.2.4. JBoss v4 .................................................................................................... 47 8.2.5. Generic Procedures .................................................................................... 50 9. How to Use, Create, and Edit a Page ............................................................................... 52 Page iii of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG CQ5 WCM How To - A Collection 10. 11. 12. 13. 14. 15. 16. 17. 18. 9.1. Managing Pages within CQ WCM .......................................................................... 9.1.1. Creating a New Page .................................................................................. 9.1.2. Editing a Page ............................................................................................ 9.1.3. Moving or Renaming Page .......................................................................... 9.1.4. Deleting a Page .......................................................................................... 9.1.5. Setting the Page Properties ......................................................................... How to Publish a Page ................................................................................................... 10.1. How To Publish Pages ........................................................................................ 10.1.1. Activating Content ..................................................................................... 10.1.2. Deactivating Content ................................................................................. 10.1.3. Determining Page Publication Status .......................................................... 10.1.4. Locking Pages .......................................................................................... 10.1.5. Unlocking Pages ....................................................................................... 10.1.6. Using Preview Mode ................................................................................. How to Restore a Page .................................................................................................. 11.1. How To Restore Pages ........................................................................................ How to Create Templates ............................................................................................... 12.1. Developing Page Templates ................................................................................. 12.1.1. Creating a new Template (based on an existing template) ............................ How to Use Tags ........................................................................................................... 13.1. How to Manage Tags in CQ WCM ....................................................................... 13.1.1. Using Sidekick to access and assign Tags ................................................. 13.1.2. The Tag Administration Console ................................................................ 13.1.3. Searching for Tags .................................................................................... Integrating with CQ DAM ................................................................................................ 14.1. How to Integrate CQ DAM into your CQ5 WCM Installation .................................... How to Find Logs and Audit Entries ................................................................................ 15.1. Finding the Audit Records and Log Files ............................................................... 15.1.1. Audit Records ........................................................................................... 15.1.2. Log files ................................................................................................... Security Checklists ......................................................................................................... 16.1. Security Checklist for System Administrators ......................................................... 16.1.1. Disable WebDAV ...................................................................................... 16.1.2. Restrict Access via the Dispatcher ............................................................. 16.1.3. Check for Cross-Site Scripting (XSS) ......................................................... 16.2. Security Checklist for Power Users ....................................................................... 16.2.1. Change Default Passwords ........................................................................ 16.3. Security Checklist for Developers ......................................................................... 16.3.1. Use the user session, not the administrative session ................................... Defining Performance Tests on Your Publish Environment ................................................ 17.1. Introduction ......................................................................................................... 17.1.1. Purpose of this How To ............................................................................. 17.1.2. Target Audience ....................................................................................... 17.2. Phases to be used .............................................................................................. 17.3. Verification of Knowledge ..................................................................................... 17.3.1. Test Architecture ....................................................................................... 17.3.2. Application Map ........................................................................................ 17.4. Scope Definition .................................................................................................. 17.5. Test Methodologies .............................................................................................. 17.6. Defining the Performance Goals ........................................................................... 17.6.1. Single Component Tests ........................................................................... 17.6.2. Combined Component Tests ...................................................................... 17.6.3. Going Live Tests ....................................................................................... 17.6.4. Error Tests ............................................................................................... 17.6.5. Endurance Tests ....................................................................................... 17.7. Optimization ........................................................................................................ 17.8. Reporting ............................................................................................................ How to Create a Fully Featured Internet Website ............................................................. Page iv of 117 52 52 54 58 59 59 64 64 64 65 65 66 66 66 68 68 69 69 69 70 70 70 71 73 75 75 77 77 77 78 80 80 80 80 81 81 81 83 83 84 84 84 84 84 85 85 85 86 86 87 87 88 88 89 89 89 90 91 CQ 5.1 WCM Copyright 1993-2008 Day Management AG CQ5 WCM How To - A Collection 19. How to Set Up the Development Environment with Eclipse ............................................... 92 19.1. How to Set Up the Development Environment with Eclipse ..................................... 92 19.1.1. Creating the Project Structure in CQ5 ........................................................ 92 19.1.2. Installing FileVault (VLT) ............................................................................ 92 19.1.3. Installing Eclipse ....................................................................................... 93 19.1.4. Creating the Project Structure in Eclipse ..................................................... 94 19.1.5. Scripting with Eclipse and CQ5 .................................................................. 98 19.1.6. Java Developing with Eclipse and CQ5 .................................................... 100 19.1.7. Building collaborative and automated projects ........................................... 102 20. How to Model Data ....................................................................................................... 103 20.1. Data Modeling - David Nuescheler's Model .......................................................... 103 20.1.1. Source .................................................................................................... 103 20.1.2. Introduction from David ............................................................................ 103 20.1.3. Seven Simple Rules ................................................................................ 103 21. JSP Tag Libraries ......................................................................................................... 109 21.1. JSP Tag Libraries .............................................................................................. 109 21.1.1. CQ Tag Library ....................................................................................... 109 21.1.2. Sling Tag Library ..................................................................................... 113 A. Copyright, Licenses and Formatting Conventions ............................................................. 117 A.1. Formatting Conventions ....................................................................................... 117 Page v of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG 1 Introduction 1.1 Introduction To help you perform certain tasks within CQ5 this collection of How To articles has been compiled. 1.2 Purpose of this Document To collect all the How To articles into one document. 1.3 Target Audience • see individual How To sections Page 1 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG 2 How to Quickly Create a Website 2.1 Introduction This tutorial enables you to quickly create a website with CQ5, based on an existing website. It is mainly targeted at Day Pre-Sales staff and Day Partners preparing Proof Of Concept for a project. You only need CQ5 WCM, CQDE and a Web browser. 2.2 Creating the application, the Content Page Template, the Content Page Component and a Web Page 1. In CRX Explorer, copy the node apps/geometrixx, name the target node <customername> and paste it under apps. 2. Set the title (jcr:title property) of the Template apps/<customername>/templates/ contentpage to <Customername> Content Page Template. 3. Replace the thumbnail /apps/<customername>/templates/contentpage/ thumbnail.png with one representing your Template. • Create a PNG image, 128 x 98 px big. • In your file system, copy the image and paste it into /apps/<customername>/ templates/contentpage/ . 4. Delete the property allowedPaths of the Template /apps/<customername>/ templates/contentpage. 5. Set the property sling:resourceType of the node /apps/<customername>/ templates/contentpage/jcr:content to <customername>/components/ contentpage. 6. In CQDE, under the Component /apps/<customername>/components/contentpage, create the file contentpage.jsp. 7. Copy/paste following code into the script contentpage.jsp: <%@page session="false" contentType="text/html; charset=utf-8" %><% %><%@taglib prefix="cq" uri="http://www.day.com/taglibs/cq/1.0" %><% %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/ strict.dtd"> <html> <%@include file="/libs/wcm/global.jsp" %><% %><head> <cq:include script="/libs/wcm/init/init.jsp"/> <% currentDesign.writeCssIncludes(out); %> MyCustomerHead </head> <body> MyCustomerBody </body> </html> 8. In your browser, open the CQ site administration. 9. Under Websites, create a new page with the Title www.<customername>.com, the label <customername> and the <Customername> Content Page Template. 10. Under the Page www.<customername>.com, create a new page with the Title English, the label en and the <Customername> Content Page Template. If needed, create one Page with the Title French, the label fr and one Page the Title German, the label de. Page 2 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Quickly Create a Website 11. Under the Page English, create as many pages as needed in order to reproduce the site map of your customer site. 12. Open the English Page. It should look as follows: 2.3 Setting up the Designer 1. In CRX Explorer, copy the node /etc/designs/geometrixx, name the target node <customername> and paste it under /etc/designs. 2. In contentpage.jsp, insert <% currentDesign.writeCssIncludes(out); %> at the appropriate location. 3. In CQDE, open the file /etc/designs/<customername>/static.css and adapt the styles to your needs. 4. Link your pages to the <customername> designer: in CRX Explorer, select the node / content/<customername>/jcr:content. Double-click Property cq:designPath and set /etc/designs/<customername> as Value. 2.4 Importing the original Web Page (CSS, HTML and images) into your project 1. In Firefox, browse to the page that you want to import, select Save Page As …, enter <customername> as Filename and save it on your desktop. 2. Test the downloaded website on your desktop: open the downloaded <customername>.htm file in your browser and compare the result with the original website. If it is different, open the file in a text editor and fix the problems. Problems are often caused by paths for css files and images that need to be correctly reset. 3. In your filesystem, zip all the resources of your webpage (html, css, images, ...). 4. In CRX Explorer, under the node /apps/<customername>/components/contentpage, create a New Node: set the Name to resources and the Type to sling:Folder. Page 3 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Quickly Create a Website 5. In CRX Content Loader, import the zip file and expand it into the node /apps/ <customername>/components/contentpage/resources: • Browse to http://localhost:4502/crx/loader/index.jsp. • Click Browse beside Root path for import:, browse to the node /apps/ <customername>/components/contentpage/resources and click Open. • Click Browse beside File to upload:, browse to your zip file and click Open. • Check Auto-Expand and Expand file content directly below selected root checkboxes. • Click Import. Note In a normal project setup, the resources wouldn't be placed under the Component. It is only done here to maximize your efficiency. 6. In CQDE, open the file <customername>.html and copy the content between the <head> and </head> tags. In the script contentpage.jsp, select MyCustomerHead and paste the previously copied content. 7. In the file <customername>.html, copy the content between the <body> and </body> tags. In the script contentpage.jsp, select MyCustomerBody and paste the previously copied content. 8. In the script contentpage.jsp, reset the paths of the css files and the images by replacing: <customername>_files with: /apps/<customername>/components/contentpage/resources Note Make sure that the names of your resources don't start with _ (underscore). . 9. In the script contentpage.jsp, replace all external links with internal links. This way the external links don't appear broken when your machine is not online. 10. In your browser, in the CQ Site Administration, open the page www.<customername>.com. It should display your <customername> web page. 2.5 Replacing static content by dynamic content using CQ Foundation Components 1. In CQDE, in the file contentpage.jsp, select the content of the middle part of the page and replace it with: <cq:include path="par" resourceType="foundation/components/parsys" /> Page 4 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Quickly Create a Website . The content has been replaced by the parsys Foundation Component. 2. In your browser, refresh your page. The features of the Paragraph System are now available to you: you can include other Components, for example, Flash, Text or Text Image. 3. By following the previous steps, you can add other CQ Foundation Components as for example topnav or toolnav. 4. In your browser, in the CQ Site Administration, open a page of your choice from your application. Copy content from the original web page and paste it into your page. 5. Adapt the design to look like the design of the original website. 2.6 Creating a Media Library 1. In your browser, download about 20 resources (pictures, banners, pdf, …) from the original website: open a Google page, type site:<customer-url>, click search and click the Images tab. Save the desired resources on your computer. 2. In your filesystem, zip all the resources. 3. In CRX Content Loader, import the zip file and expand it into the node content/dam/ <customername>. The resources are now available in the contentfinder, when browsing through the Pages. Page 5 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG 3 How to Develop Components 3.1 Developing Components This section describes how to create your own components and add them to the paragraph system. A quick way to get started is to copy an existing component and then make the changes you want. You can also use this method to edit existing components (although Day recommends that you back up the original component). An example of how to develop a component is described in detail in Extending the Text and Image Component - An Example. 3.1.1 Developing a new component by adapting an existing component To develop new components for CQ WCM based on existing component, you copy the component and create a javascript file for the new component and store it in a location accessible to CQ5: 1. Create a new component folder in /apps/<website-name>/ components/<MyComponent> by copying an existing component, such as the Text component, and renaming it. 2. In the CRX Explorer, modify the jcr:description and jcr:title to reflect its new name. 3. Open the new component folder and make the changes you require; also, delete any extraneous information in the folder. You can make changes such as: • adding a new field in the dialog box • replacing the .jsp file (name it after your new component) • or completely reworking the entire component if you want For example, if you take a copy of the standard Text component, you can add an additional field to the dialog box, then update the .jsp to process the input made there. Page 6 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Develop Components 4. In the Content Explorer, navigate to the component and change the allowedParents property to */parsys, which makes it available to the paragraph system. Note Either cq:editConfig node, dialog, or design_dialog node should be present and properly initialized for the new component to appear. 5. Activate the new component in your paragraph system either by adding /apps/<websitename>/components/<MyComponent> to the /etc/designs/default/<websitename>/jcr:content/contentpage/parsys/components property in CRX or by following the instructions in Adding new components to paragraph systems. 6. In CQ WCM, open a page in your web site and insert a new paragraph of the type you just created to make sure the component is working properly. Note To see timing statistics for page loading, you can use Ctrl-Shift-U - with ? debugClientLibs=true set in the URL. 3.1.2 Adding a new component to the paragraph system (design mode) After the component has been developed, you add it to the paragraph system, which enables authors to select and use the component when editing a page. 1. Access a page within your authoring environment that uses the paragraph system; for example <contentPath>/Test.html. 2. Switch to Design mode by either: • adding ?cmsmode=design to the end of the URL and accessing again; for example <contextPath>/ Test.html?cmsmode=design. • clicking Design in Sidekick You are now in designmode and can edit the paragraph system: 3. Click Edit. A list of components belonging to the paragraph system are shown (all those defined with the property allowedParents=*/parsys). Your new component is also listed. The components can be activated (or deactivated) to determine which are offered to the author when editing a page. 4. Activate your component, then return to normal edit mode to confirm that it is available for use. 3.1.3 Extending the Text and Image Component - An Example This section provides an example on how to extend the widely used text and image standard component with a configurable image placement feature. The extension to the text and image component allows editors to use all the existing functionality of the component plus have an extra option to specify the placement of the image either: • on the left-hand side of the text (current behavior and the new default) • as well as on the right-hand side Page 7 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Develop Components After extending this component, you can configure the image placement through the component's dialog box. The following techniques are described in this exercise: • Copying existing component node and modifying its metadata • Modifying the component's dialog, including inheritance of widgets from parent dialog boxes • Modifying the component's script to implement the new functionality 3.1.3.1 Extending the existing textimage component To create the new component, we use the standard textimage component as a basis and modify it. We store the new component in the Geometrixx CQ WCM example application. To extend the textimage component, go to the CRX Explorer (server name:port number/crx) and log in as admin and then navigate to the Content Explorer. 1. Copy the standard textimage component from /libs/foundation/components/ textimage into the Geometrixx component folder, /apps/geometrixx/components, using textimage as the target node name. (Copy the component by navigating to the component, right-clicking and selecting Copy and browsing to the target directory.) 2. To keep this example simple, navigate to the component you copied and delete all the subnodes of the new textimage node except for the following ones: • dialog definition: textimage/dialog • component script: textimage/textimage.jsp Page 8 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Develop Components 3. Edit the component metadata: • Component name • Set jcr:description to Text Image Component (Extended) • Set jcr:title to Text Image (Extended) • Component listing in the paragraph (parsys component) system (leave as is) • Leave allowedParents defined as */parsys • Group, where the component is listed in the sidekick (leave as is) • Leave componentGroup set to General • Parent component for the new component (the standard textimage component) • Set sling:resourceSuperType to foundation/components/textimage After these steps the component node looks like the following: 4. Modify the component's dialog box to include the new option. The new component inherits the parts of the dialog box that are the same as in the original. The only addition we make is to extend the Advanced tab, adding an Image Position dropdown list, with options Left and Right: • Leave the textimage/dialog properties unchanged. • Note how textimage/dialog/items has three subnodes, tab1 to tab3, representing the three tabs of the textimage dialog box. • For the first two tabs (tab1 and tab2): • Change xtype to cqinclude (to inherit from the standard component). • Add a pathParameter property with values /libs/foundation/components/ textimage/dialog/items/tab1.infinity.json and /libs/foundation/ components/textimage/dialog/items/tab2.infinity.json, respectively. • Remove all other properties or subnodes. • For tab3: • Leave the properties and subnodes without changes • Add a new field definition to tab3/items, node position of type cq:Widget • Set the following properties (of type String) for the new tab3/items/position node Page 9 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Develop Components • name: ./imagePosition • xtype: selection • fieldLabel: Image Position • type: select • Add subnode position/options of type cq:WidgetCollection to represent the two choices for image placement, and under it create two nodes, o1 and o2 of type nt:unstructured • For node position/options/o1 set the properties: text to Left and value to left • For node position/options/o2 set the properties: text to Right and value to right Image position is persisted in content as the imagePosition property of the node representing textimage paragraph. After these steps, the component dialog box looks like this: 5. Extend the component script, textimage.jsp, with extra handling of the new parameter. • Open the /apps/geometrixx/components/textimage/textimage.jsp script for editing. • We are going to manipulate the style of the <div class="image"> tag, generated by the component, to float the image to the right. It is located in the following area of the code: Image img = new Image(resource, "image"); if (img.hasContent() || WCMMode.fromRequest(request) == WCMMode.EDIT) { %><div class="image"><% img.loadStyleData(currentStyle); We are going to replace the emphasized code fragment %><div class="image"><% with new code generating a custom style for this tag. Page 10 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Develop Components • Copy the following code fragment, and replace the %><div class="image"><% line with it: // todo: add new CSS class for the 'right image' instead of using // the style attribute String style=""; if (properties.get("imagePosition", "left").equals("right")) { style = "style=\"float:right\""; } %><div <%= style %> class="image"><% Note that for simplicity we are hard-coding the style to the HTML tag. The proper way to do it would be to add a new CSS class to the application styles and just add the class to the tag in the code in the case of a right-aligned image. • The code fragment, after the change, should look like this (new code emphasized): Image img = new Image(resource, "image"); if (img.hasContent() || WCMMode.fromRequest(request) == WCMMode.EDIT) { // todo: add new CSS class for the 'right image' instead of using // the style attribute String style=""; if (properties.get("imagePosition", "left").equals("right")) { style = "style=\"float:right\""; } %><div <%= style %> class="image"><% img.loadStyleData(currentStyle); • Save the script to the repository. 6. The component is ready to test. 3.1.3.2 Checking the new component After the component has been developed, you can add it to the paragraph system, which enables authors to select and use the component when editing a page. These steps allow you to test the component. 1. Open a page in Geometrixx; for example, English/Company 2. Switch to design mode by clicking Design in Sidekick 3. Edit the paragraph system design by clicking Edit on the paragraph system in the middle of the page. A list of components, which can be placed in the paragraph system are shown, and it should include your newly developed component, Text Image (Extended). Activate it for the paragraph system by selecting it and clicking OK. 4. Switch back to the editing mode. 5. Add the Text Image (Extended) paragraph to the paragraph system, initialize text and image with sample content. Save and you should see the default rendering of Text and Image component: Page 11 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Develop Components 6. Open the dialog of the text and image paragraph, and change the Image Position on the Advanced tab to Right, and click OK to save the changes. 7. You see the paragraph rendered with the image on the right: Page 12 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Develop Components 8. The component is now ready to use. The component stores its content in a paragraph on the Company page. The following screenshot shows how our new configuration parameter is persisted in the repository, with the node representing the paragraph we have just created. The textimage/imagePosition parameter represents the position of the image for this paragraph on /content/geometrixx/en/company page. Page 13 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG 4 How to Set Up a Cluster 4.1 How to Set Up a Cluster in Communiqué Clustering uses two or more live servers, so if one server breaks down, the other can take over. Therefore, even if a node fails, the other nodes are active and accessible for your applications and there is no system interruption. This allows you to recover and re-start failed nodes easily. Also, new nodes can be added to an existing cluster, allowing for simple extensibility. Clustering is beneficial in the following scenarios. • A server breaks down – The cluster agent relays requests to the servers that are still running. Service continues without interruption. • A repository breaks down – If the repository breaks down, the server becomes unavailable, and the cluster agent relays the requests to the other servers. Service continues without interruption. • Increased performance – clustering enables your system to perform better even when nodes fail. Note As long as both servers are active, you can use their combined computational power. This means that this solution improves performance during normal use. On the other hand, if one server breaks down, you lose its performance, so your overall application performance may suffer. Following section describes how to set up a cluster in Communiqué with two cluster nodes on two separate networked machines. The master node is called node 1, the slave node is called node 2. On the node 1 (master): 1. In the file system, create a folder /node1. 2. Install Communiqué under /node1. For a complete description of the installation, please refer to the section called “Installing an Author instance”. 3. In the file system, share the folder node1/crx-quickstart/repository/shared so that it can be accessed from the node 2. On the node 2 (slave): 1. In the file system, create a folder /node2. 2. Install Communiqué under /node2. For a complete description of the installation, please refer to the section called “Installing an Author instance”. 3. In the file system, map the folder on node 1 node1/crx-quickstart/repository/shared to a drive, Z: in our case. 4. In your browser, open the CRX Main Console 5. Browse to http://localhost:4502/crx to open the CRX Main Console. 6. Log in as administrator. 7. Click Repository Configuration. 8. Under Tools, click Cluster. Page 14 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Set Up a Cluster 9. Under Join Cluster, as Shared path, enter Z:\ and click Join. Note In order to add more nodes to the cluster, repeat the steps on the slave node as many times as needed. Page 15 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG 5 How to Monitor Performance 5.1 Introduction CQ5 encompasses several applications, and interacts with several more. Performance (or the lack of it) is one of the first things that your users notice, so as with any application with a user interface, performance is of key importance. To optimize the performance of your CQ5 WCM installation various attributes of the behavior should be monitored. 5.1.1 Purpose of this How To To give a short introduction on what to monitor, and how, when optimizing the performance of your CQ5 implementation. Note This document deals primarily with the mechanics of monitoring performance. Issues such as setting the target metrics of the performance you want to achieve are covered elsewhere. See the CQ5 WCM Project Manager Guide for more information. 5.1.2 Target Audience • Power Users • System Administrators • Project Managers 5.2 Performance - some theory The problems that cause performance issues are often difficult to track down, even when their effects are easy to see. A basic starting point is a good knowledge of your system when it is operating as normal. If you don't know how your environment "looks" and "behaves" when it is performing properly, it can be difficult to locate the problem when performance deteriorates. This means that you should spend some time investigating your system when it is running smoothly and ensure that collecting performance information is an ongoing task. This will provide you with a basis for comparison should the performance suffer. The following diagram illustrates the path that a request for CQ5 content can take - and therefore the number of different elements which can impact the performance. Page 16 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Monitor Performance Figure 5.1. CQ5 request - the web-chain Performance is also a balance between Volume and Capacity: Volume the amount of output that is processed and delivered by the system. Capacity the system’s ability to deliver the volume. This can be illustrated in various locations throughout the web-chain. Page 17 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Monitor Performance Figure 5.2. Capacity vs. Volume There are several functional areas which are often responsible for impacting the performance: • Caching • Application (your project) code • Search functionality 5.3 Performance - basic rules Certain rules should be kept in mind when optimizing performance: 1. Performance tuning must be part of every project. 2. Do not optimize early in the development cycle. 3. Performance is only as good as the weakest link. 4. Always think about capacity vs. volume. 5. Optimize important things first. 6. Never optimize without realistic goals. Note Bear in mind that the mechanism you use to measure performance will often affect exactly what you are trying to measure. You should always try to account for these discrepancies, and eliminate as much of their effect as possible; in particular browser plug-ins should be de-activated wherever possible. 5.4 Recognizing some common performance problems The following lists common performance issues which occur, together with proposals on how to spot and counteract them. Page 18 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Monitor Performance Table 5.1. Recognizing common performance problems Area Symptom(s) To increase capacity... To reduce volume... Client High client CPU usage. Install a client CPU with higher performance. Simplify (HTML) layout. Low server CPU usage. Upgrade to a faster browser. Improve client-side cache. Some clients fast, some slow. Server Network CPU usage low on both servers and clients. Remove any network bottlenecks. Improve/optimize the configuration of the client cache. Browsing locally on the server is (comparatively) fast. Increase network bandwidth. Reduce the "weight" of your web pages (e.g. less images, optimized HTML). Cluster your web-servers. Reduce the hits per page (visit). Web-server CPU usage on the webserver is high. Use a hardware loadbalancer. Application Server CPU usage is high. Cluster your CQ5 instances. Search for, and eliminate, CPU and memory hogs (use code review, timing output, etc). High memory consumption. Improve caching on all levels. Low response times. Optimize templates and components (e.g. structure, logic). Repository Cache 5.5 Monitoring, and optimizing, the performance Performance issues may stem from a number of causes that have nothing to do with your website, including temporary slowdowns in connection speed, CPU load, and many more. It may also impact either all your visitors, or only a subset of them. All this information needs to be obtained, sorted and analyzed before you can optimize the performance. If you experience a performance issue: • try to replicate it: with one (or preferably more) standard web-browsers, on a different client that you know has good general performance and/or on the server itself (if possible) • check whether anything (related to the system) has changed within an appropriate time-space, and if any of these changes could have impacted the performance • collect as much information as possible to compare with your knowledge of the system under normal circumstances 5.5.1 Tools and mechanisms The following gives a short overview of some of the tools available for monitoring performance. Page 19 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Monitor Performance Note Some of these will be dependent on your operating system. Table 5.2. Tools and mechanisms for monitoring performance Tool Used to analyze... Usage / More information... request.log Response times and concurrency. Interpreting the request.log. truss/strace Page Loads Unix command. Include the misc.truss log level to INFO. CQ5 status monitor Monitor CQ5 requests; including request-type, long-running requests, pending requests. Thread dumps Observe JVM threads. Dependent on the operating system, e.g. kill -QUIT Identify contentions, <pid> on Unix/Linux whereas Ctrl-Break on Windows. locks and long-runners. System calls Identify timing issues. Apache Bench Identify memory leaks, selectively analyze response time. Calls to System.currentTimeMillis() or com.day.util.Timing are used to generate timestamps from your code, or via HTML-comments. Note: These should be implemented so that they can be activated / deactivated as required; when a system is running smoothly the overhead of collecting statistics will not be needed. For full details: http://httpd.apache.org/docs/2.0/programs/ ab.html; basic usage is: ab -k -n <requests> -c <concurrency> <url> Search Analysis Execute search queries Analyzing Search. offline, identify response time of query, test and confirm result set. JMeter Load and functional tests. http://jakarta.apache.org/jmeter/ JProfiler In-depth CPU and memory profiling. http://www.ej-technologies.com/ truss/strace, lsof In depth kernel call and Unix/Linux commands. process analysis (Unix). 5.5.2 Interpreting the request.log This file registers basic information about every request made to CQ5. From this valuable conclusions can be extracted. 5.5.2.1 Monitoring traffic on your website The request log registers each request made, together with the response made: 09:43:41 [66] -> GET /author/y.html HTTP/1.1 09:43:41 [66] <- 200 text/html 797ms By totaling all the GET entries within a specific periods (e.g. over various 24 hour periods) you can make statements about the average traffic on your website. 5.5.2.2 Monitoring response times with the CQ5 request.log Page 20 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Monitor Performance A good starting point for performance analysis is the request log. You can find the request log at data\author\logs and data\publish\logs for the author and publish instance respectively. The log looks as follows (the lines are shortened for simplicity): 09:43:41 09:43:41 09:43:47 09:43:48 09:43:49 09:43:49 [66] [66] [67] [67] [68] [68] -> <-> <-> <- GET 200 GET 200 GET 404 /author/y.html HTTP/1.1 text/html 797ms /author/z.gif HTTP/1.1 image/gif 141ms /author/x.html HTTP/1.1 text/html 0ms This log has one line per request or response: • The date at which each request or response was made. • The number of the request, in square brackets. This number matches for the request and the response. • An arrow indicating whether this is a request (arrow pointing to the right) or a response (arrow to the left). • For requests, the line contains: • the method (typically, GET, HEAD or POST) • the requested page • the protocol • For responses, the line contains: • the status code (200 means “success”, 404 means “page not found”) • the MIME type • the response time Using small scripts, you can extract the required information from the log file and assemble the statistics you want. From these, you can see which pages or types of pages are slow, and if the overall performance is satisfactory. 5.5.2.3 Monitoring search response times with the CQ5 request.log Search requests are also registered in the log file: 22.05.2008 12:27:40 [338] -> GET /author/playground/en/tools/search.html? query=dilbert&size=5&dispenc=utf-8 HTTP/1.1 22.05.2008 12:27:42 [338] <- 200 text/html 1562ms So, as above, you can use scripts to extract the relevant information and build up statistics. 5.5.2.4 Monitoring the numbers and impacts of concurrent users Again the request.log can be used to monitor concurrency and the system's reaction to it. Page 21 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Monitor Performance Tests must be made to determine how many concurrent users the system can handle before a negative impact is seen. Again scripts can be used to extract results from the log file: • monitor how many requests are made within a specific time span e.g. one minute • test the effects of a specific number of users all making the same requests at (as close as possible) the same time; e.g. 30 users clicking Save at the same time 22.05.2008 12:27:22 [333] -> GET /author/libs/Personalize/content/statics.close.gif HTTP/1.1 22.05.2008 12:27:22 [334] -> GET /author/libs/Personalize/content/statics.detach.gif HTTP/1.1 22.05.2008 12:27:22 [335] -> GET /author/libs/CFC/content/imgs/ logo.rZMNURccynWcTpCxyuBNiTCoiBMmw000.default.gif HTTP/1.1 22.05.2008 12:27:22 [335] <- 304 text/html 0ms 22.05.2008 12:27:22 [334] <- 200 image/gif 31ms 22.05.2008 12:27:22 [333] <- 200 image/gif 31ms 22.05.2008 12:27:22 [336] -> GET /author/libs/CFC/content/imgs/ logo.rZMNURccynWcTZRXunQbbQtvuuCMbRRBuWXz0000.default.gif HTTP/1.1 22.05.2008 12:27:22 [337] -> GET /author/titlebar_bg.gif HTTP/1.1 22.05.2008 12:27:22 [336] <- 304 text/html 0ms 22.05.2008 12:27:22 [337] <- 304 text/html 0ms 5.5.2.5 Timing Statistics for Page Loading To see timing statistics for page loading you can use Ctrl-Shift-U - with ? debugClientLibs=true set in the URL. 5.5.3 Caching The following diagram shows the different cache locations that can be used for the various content types. Figure 5.3. What can be cached where? The following can act as a rough guide for target values: Page 22 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Monitor Performance Figure 5.4. Cache vs. Uncached - maximum hits / second Although there are many algorithms to ensure that data is retrieved from the source system when appropriate, circumstances can arise where the data residing in a cache is out of date. Retrieving every page individually is the only guaranteed method of ensuring your content is up-to-date, but it is very costly in terms of response, and can indeed cause knock-on effects. This is particularly relevant when using personalized pages, where at least some content of a page is dependent on the user, and the account they used to login. Figure 5.5. Cache speed vs. Data Integrity Page 23 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Monitor Performance 5.5.3.1 Optimizing your content for cache performance Make sure you use realistic cache settings for the browser cache. If you have disabled the browser cache for development, this may increase traffic and decrease responsiveness. 5.5.4 Analyzing Search First steps to analyzing the search function can be made with Monitoring search response times with the CQ5 request.log. However, once you have determined the response time, you may need to analyze why the request is taking the time it does, and what can be done to improve the response. Page 24 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG 6 How to Create and Use a Workflow 6.1 Creating a Workflow First you must create your workflow. You can then apply an instance of this (version dependent) when managing your website. Important Actions on workflows can only be undertaken if: • you are working with the admin account • the account has been assigned to the default group workflow-users, which holds all the privileges necessary for your users to perform workflow actions. Note For simplicity, the following examples have all been made using the admin account. 6.1.1 Creating a new Workflow Model The actual creation is a small step - a skeleton workflow (with 3 default steps) will be created. 1. Open the Workflow console. 2. From the Models tab, select New from the top navigation bar. The New Workflow dialog will open. 3. Specify the Title for your workflow. 4. Click OK to save and close the dialog. You will be returned to the Models tab, where you see your new workflow in the list. 6.1.2 Editing the Workflow As mentioned above, a skeleton workflow is created with a minimum of steps. For the workflow to become meaningful, you must edit it immediately. 1. Open the Workflow console. 2. From the Models tab, select your workflow. 3. Either click Edit or double-click the name of the workflow. A new tab (named after the workflow) will open for editing and configuring a workflow. This shows 3 panes: • Toolbox Page 25 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Create and Use a Workflow Lists the Step and Split types. Click to display the appropriate list, then use drag the element you want into the appropriate position to build your workflow. Note A complete explanation of all types of workflow steps and splits, together with their related properties, can be found in the next section - the section called “The types of Workflow Steps available”. • Workflow Model Contains the graphical representation of your workflow. Here you can position the steps and splits, edit the workflow name or description and save changes. The Save button is also located here, as is the Model Version. The Model Version is incremented every time the workflow model is updated. This is reflected in the monitoring displays. As multiple versions of a workflow can be in use at any one time, this helps you track the version being used in each instance. • Properties Allows you to edit properties of the individual steps and splits. Note A complete explanation of all types of workflow steps and splits, together with their related properties, can be found in the next section - the section called “The types of Workflow Steps available”. Three steps have already been created: Start A mandatory step to start the workflow. This cannot be edited, nor deleted. Step 1 A Participant step which is an example. This must be edited, or replaced if required. Further steps can be added. End A mandatory step for every workflow. The End step is used to cleanly terminate the workflow, or to pass control back to the parent workflow if used as a child workflow. Page 26 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Create and Use a Workflow You can either define a full workflow, or a sub-section of a workflow. Sub-workflows can then be referenced by other workflows to form part of a complete workflow. This simplifies the construction of complex workflows, and also allows you to reuse sub-workflows which occur repeatedly. 4. Enter a Model Description for the workflow (you can also edit the Model Title) from the center pane. Click on the field to enter edit mode. 5. You can now design your workflow by dragging steps onto the Workflow Model, then configuring the properties. 6. When finished, Save your model, then close the tab. 6.1.2.1 Example To illustrate some of the possibilities for creating a workflow, the following example emulates a variation of the Publish Example workflow. 1. Edit Step 1 using on the step itself. a. Enter Validate Content for the Title and Description. b. Set the User/Group to admin. c. Set the Timeout to Off and Timeout Handler empty. 2. Click on Splits to display the list of split types. 3. Drag an Or Split onto the workflow and position it between Validate Content and End. An Or Split will be added to your workflow. 4. Edit the left-hand branch: a. Click the icon on the actual branch. b. Set Default Route to true. c. Click the icon on New Step in the left-hand branch. This will be a Participant step. 5. d. Enter Cancel Publish for the Title and Description. e. Set the User/Group to admin. Edit the right-hand branch: a. Click the icon on the actual branch. Page 27 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Create and Use a Workflow b. Set Default Route to false. c. Leave the Rule empty. This is for demonstration purposes. d. Click the icon on New Step in the right-hand branch. Change this from a Participant to a Process step; the properties available will be updated. e. Enter Publish Page for the Title and Description. f. Set the Handler Advance to false. g. Select com.day.cq.workflow.example.publish.PublishProcess as the Implementation script. This implementation will publish the selected page to the publisher instances. 6. Now you have specified all steps in your workflow, click Save. 7. Finally close the tab and return to the main console. 6.2 Using the Workflow After you have defined your workflow you will want it to be used when managing your website. The following sections detail the different tasks when using workflows. 6.2.1 Starting the Workflow for an individual page There are two methods of starting a workflow; from the Workflow Console or the siteadmin: In either case you need to link a workflow to its payload. The payload (including pages, nodes, resources) will then be subject to this instance of the workflow. Page 28 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Create and Use a Workflow Important The current version of the workflow model is assigned; if the main copy of the workflow is updated later then the changes will have no impact on the instance assigned. Procedure 6.1. Starting a workflow from the workflow console 1. Open the Workflow console. 2. From the Models tab select the required workflow. 3. Click Start from the top navigation. 4. The Start Workflow dialog opens allowing you to enter the payload and a comment. Specify the payload (includes pages, nodes, resources, etc) to which the workflow is to be applied. You can use the drop down selector to browse the repository when selecting: 5. Click OK to save your selection and start the workflow. Now the workflow is running. Procedure 6.2. Starting a workflow from the sidekick 1. Open the siteadmin. 2. Open the required page. 3. Select the Workflow tab from the sidekick. 4. Select Start Workflow... to open a new dialog allowing you to select the workflow and a enter a comment. Page 29 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Create and Use a Workflow 5. Click Start to save your selection and start the workflow. Now the workflow is running. Once a page has been linked to a workflow it will be indicated in the siteadmin: 6.2.2 Automatically Assigning a Workflow To simplify the action of starting a workflow it is possible to Auto Assign workflows. With this, you can automatically assign one or more workflows to a content tree, dependent on the page template being used. As soon as a page is created within this tree and with the specified template, the workflow is applied to that page. 1. Open the siteadmin. 2. Select the page at the root of the content tree. Any pages created underneath this page will be subject the specified workflow. 3. From the Workflow menu select Auto Assign. The Auto Assign Workflow dialog will open. 4. Click Add to open the Auto Assign Rule dialog: Page 30 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Create and Use a Workflow This allows you to specify the: Template Any page created using this template will be subject to the rule. Workflow The workflow to be applied to any page created - with the specified template and in the given path. Path Path to which the rule is applied. 5. Click OK to save the rule. 6. The rule will now be listed in the Auto Assign Workflow window. Note You can create several rules, so you must take care that the rules do not conflict. Page 31 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Create and Use a Workflow 7. Click Close to complete the definition. From now on, as soon as a page is created within the specified trees with the specified templates the appropriate workflows are applied. This will be indicated in the In Workflow column, 6.2.3 Taking actions on a Participant Step Any participant steps that you have created will be assigned to the specific user or group, who will need to take action: • When the task is completed they then acknowledge this fact by completing the workflow step (see Completing a Participant step). • If the specific user(s) are unable to take action they can delegate responsibility to another user or group (see Delegating a Participant step). • If necessary they can step back to repeat a section of the workflow (see Performing Step Back on a Participant step). 6.2.3.1 Selecting a Participant Step to take action Before you can take any action on a Participant step, you need to select it: 1. Open the Workflow console. 2. Select the Inbox tab to see when an action is assigned to you. This occurs when a workflow reaches a Participant step with your account, or group, specified: Page 32 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Create and Use a Workflow 3. Select the entry. 6.2.3.2 Completing a Participant step After you have taken the action indicated you can complete the workflow step, thus allowing the workflow to continue. 1. Click the Complete button in the top navigation bar. 2. In the resulting dialog, select the Next Step; that is, the step to execute next. A drop down list will show all appropriate destinations. A Comment can also be entered. Note The number of steps listed depends on the design of the workflow. 3. Click OK to confirm the action. 6.2.3.3 Delegating a Participant Step If a step has been assigned to you, but for any reason you are unable to take action, you can delegate the step to another user or group. 1. Click the Delegate button in the top navigation bar. 2. In the resulting dialog, select the User you want to pass the action to. A drop down list will show all appropriate users. If the step has been defined with one user, then only this user will be available - the step cannot be delegated to anyone else. If a group has been defined, then the list will show the group itself and all individual users within the group. You can delegate to either the entire group, or an individual user within that group. A Comment can also be entered. Page 33 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Create and Use a Workflow 3. Click OK to confirm the action. 6.2.3.4 Performing Step Back on a Participant step If you discover that a step, or series of steps, needs to be repeated you can step back. This allows you to select a step which occurred earlier in the workflow for reprocessing. The workflow will return to the step you specify, then proceed from there. 1. Click the Step Back button in the top navigation bar. 2. In the resulting dialog, select the Previous Step; that is, the step to execute next - even though it is a step that occurs earlier in the workflow. A drop down list will show all appropriate destinations. Note The number of previous steps available in the list depends on the design of the workflow. 3. Click OK to confirm the action. 6.2.4 Suspending, Resuming and Terminating a Workflow instance Aside from workflow instances that require your immediate action and show up in your Workflow Inbox, you can perform certain other actions on running workflow instances. Page 34 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Create and Use a Workflow 1. Open the Workflow console. 2. Select the Instances tab. You will see a list of active (neither finished, nor terminated) workflow instances. 3. Select an entry. 4. To suspend the workflow, click the Suspend button in the navigation bar. The State will changed to Suspended. This can be helpful in exceptional cases when you do not want the workflow to proceed; for instance for maintenance. 5. While a workflow is suspended, you can then click Resume. This will restart the workflow from where it was suspended, with the same configuration. Again the State will be updated. 6. To finally terminate the workflow, click Terminate. This will immediately end the workflow execution - the state will change to ABORTED. A terminated workflow instance cannot be restarted. The Instances tab is not only useful for taking action on running workflows, you can also use it to monitor workflow instances, without necessarily modifying them. 6.2.5 Monitoring the Status of Workflow Instances To monitor the status of workflow instances, you can use the Instances or Archive tabs. Instances tab Shows all running instances. Archive tab Shows terminated workflow instances. 6.2.5.1 Monitoring Workflows in progress From the Instances tab you can see the status of a Workflow in progress. A list of the active Models is shown; in this case RUNNING: With the Instances tab you can take various actions (see Suspending, Resuming and Terminating a Workflow instance) and also Open History to show the actions executed to date on the workflow instance: Page 35 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Create and Use a Workflow 6.2.5.2 Archived Workflows After a Workflow instance has finished, for whatever reason (terminated, as below, or after successful completion), it can (only) be seen in the Archive tab: As the workflow has already completed, no further action can be taken on these instances. However, if you need further details of a completed workflow you can still use Open History. Page 36 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG 7 Upgrading to CQ5 7.1 How to Upgrade Your Communiqué Instance (3 or 4) to CQ5 The upgrade tool allows you to launch a standardized upgrade process. It is delivered with a configuration to be used “out of the box,” though several settings can be updated when necessary. You: • provide the URL of the Communiqué instance to be upgraded, together with the superuser access credentials • can configure a list of page handles to be included in the upgrade • can set debug parameters if required. Note The following procedure uses a standard Communiqué 4 installation, complete with Playground and DesignGround, to illustrate the upgrade process. 1. Navigate to the Upgrade window, by one of the following methods: a. Select the Miscellaneous tab in CQ WCM, then double-click on the Migrate Page to open. b. Navigate directly to http://<cq-context-path>/etc/migration for example, http://localhost:4502/etc/migration (if not already logged in you will be required to). In either case the following form will be shown: 2. Update any of the default settings if required. Page 37 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG Upgrading to CQ5 3. Click Migrate to start the process. A status message will shown while this is running: 4. When complete, the upgraded items will be listed (the following screenshot is an extract): 5. You can now access the upgraded items in your CQ5 instance: Note You must test the operation of the upgraded website; highly customized items may need to be upgraded separately. Page 38 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG 8 Installing CQ5 8.1 How to Install CQ WCM Author and Publish Instances using Quickstart This section describes how to install CQ WCM. Generally, when you set up CQ WCM, you need to set up an Author and a Publish instance, which are described in Installing an Author instance and Installing a Publish instance. If, for testing or other purposes, you need to install CQ WCM out of the box, you can use the generic procedure. 8.1.1 Installing a CQ WCM instance - Generic procedure This procedure is a generic, quickstart procedure for installing CQ WCM. You do not need to perform this procedure before installing an author or publish instance. To install an author or publish instance, see Installing an Author instance and Installing the Publish instance. To install a CQ WCM instance: 1. Copy the CQ WCM cq-wcm-quickstart-<version>.jar file (for example, cq-wcmquickstart-5.1.0.20081114.jar) to the desired directory on the host file system. 2. Copy a valid license.properties file into the same directory as the cq-wcmquickstart-<version>.jar file. Note If when starting the application, you do not provide the license.properties file, CQ WCM redirects you to the Welcome screen where you enter a valid license key. You can also request a valid license key from Day at this time. 3. Start CQ WCM Quickstart by doing one of the following: • If using a GUI file-system explorer, double-click the cq-wcm-quickstart<version>.jar file. This installs and automatically starts the server. Note The repository data is stored in the subdirectory crx-quickstart/ repository. • If using the command line, type the following: java -jar cq-wcm-quickstart-<version>.jar • Use a custom script located in the crx quickstart folder, such as server.bat to start CQ. The Start and Stop scripts are for UNIX, Linux, and Macintosh. The server.bat script is for Windows. Note You cannot use a custom script when you install the quickstart.jar file unless you expand the file first. Use the -unpack option on the command line to unpack the contents before running the script as in java -jar cq-wcmquickstart-<version>.jar -unpack. 4. When the installation is complete, you are automatically redirected to http:// localhost:4502/bin/login.html. Page 39 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG Installing CQ5 Note CQ WCM quickstart selects the first available port from the following list: 4502,8080,8081,8082,8083,8084,8085,8888,9362,<random>. You can also set the port number. See installing an author instance for an example on how to set a port number. 8.1.2 Installing an Author instance This procedure describes how to set up a default Author instance on port 4502 of the desired host. To install an author instance: 1. On the host file system, create a directory and name it author. 2. Copy the CQ5 cq-wcm-quickstart-<version>.jar file into author/ and rename the file cq5-author-4502.jar. A different port can be set in the filename. 3. Copy a valid license.properties file into the same directory as the cq-wcmquickstart-<version>.jar file. Note If when starting the application, you do not provide the license.properties file, CQ WCM redirects you to the Welcome screen where you enter a valid license key. You can also request a valid license key from Day at this time. 4. Start CQ WCM Quickstart: • If using a GUI file-system explorer, double-click the cq5-author-4502.jar file. • If using the command line, type: java -jar cq5-author-4502.jar • Use a custom script located in the crx quickstartfolder, such as server.bat to start CQ. The Start and Stop scripts are for UNIX, Linux, and Macintosh. The server.bat script is for Windows. Important You cannot use a custom script when you install the quickstart.jar file unless you expand the file first. Use the -unpack option on the command line to unpack the contents before running the script as in java -jar cq-wcmquickstart-<version>.jar -unpack. 5. When the installation is completed, you are automatically redirected to http:// localhost:4502/bin/login.html. Note With the default settings, the syndication agent points toward the publish instance at http://localhost:4503/. 8.1.3 Installing a Publish instance To set up a publish instance on port 4503 of the desired host, you perform the same steps as in installing an author instance except that you create a directory named publish (instead of author) and you rename the quickstart.jar file as cq5-publish-4503.jar. You can select any port number. Page 40 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG Installing CQ5 To install a publish instance: 1. On the host file system, create a directory and name it publish. 2. Copy the CQ WCM cq-wcm-quickstart-<version>.jar file into publish/ and rename it cq5-publish-4503.jar. A different port can be set in the filename. 3. Copy a valid license.properties file into the same directory as the cq-wcmquickstart-<version>.jar file. Note If when starting the application, you do not provide the license.properties file, CQ WCM redirects you to the Welcome screen where you enter a valid license key. You can also request a valid license key from Day at this time. 4. Start CQ WCM Quickstart: • If using a GUI file-system explorer, double-click the cq5-publish-4503.jar file. • If using the command line, type: java -jar cq5-publish-4503.jar • Use a custom script located in the crx quickstartfolder, such as server.bat to start CQ. The Start and Stop scripts are for UNIX, Linux, and Macintosh. The server.bat script is for Windows. Important You cannot use a custom script when you install the quickstart.jar file unless you expand the file first. Use the -unpack option on the command line to unpack the contents before running the script as in java -jar cq-wcm-quickstart<version>.jar -unpack. 5. When the installation is completed, you can browse your site (for example, http:// localhost:4503/content/geometrixx/en/company.html) 8.2 How to install CQ5 with an Application Server The following sections detail how to install CQ5 in conjunction with various application servers: • WebSphere v6.1 • WebLogic v10.1 • Tomcat v6 • JBoss v4 A generic overview is also given for general usage and information: • Generic Procedures 8.2.1 WebSphere v6.1 After installing WebSphere v6.1 you: 8.2.1.1 Install CQ5 1. Unpack the installation files of the CQ5 Quickstart into a directory (without starting the server); the installation directory will be referred to as <cq-installation-dir>: Page 41 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG Installing CQ5 • Start the CQ5 Quickstart jar with the option -unpack; for example: java -jar cq-wcm-quickstart-5.1.0.jar -unpack This will create a folder <cq-installation-dir>crx-quickstart containing the files and folders used for installation, without actually starting the installation. Important This must be done from the command line. If you open the jar file directly you will activate the Quickstart installation and start the server. 2. Copy the following jar files to the application server folder holding shared libraries: a. CRX\server\lib\container\jcr-1.0.jar b. CRX\server\lib\container\crx-shared.jar 3. Restart WebSphere. 4. Deploy the following web applications; they can be found in <cq-installationdir>\crx-quickstart\server\webapps: a. CRX webapp; crx-explorer_crx.war. For example, deploy with the context path /crx. b. Launchpad webapp; crx-launchpad.war. For example, deploy with the context path /launchpad. 5. Start the two applications. 6. Register your CRX license: a. Access your CRX installation: http://<server>:<port>/<context-path>/index.jsp for example: http://<server>:<port>/crx/index.jsp b. Click the red warning message - “Click here...” (the message is a link). c. Enter your license key. 8.2.1.2 Configure the default JDK WebSphere v6.1 uses JDK 1.5. By default the SAMLv2 JSP JDK source level uses JDK 1.3. As the SAMLv2 sample configuration uses the JDK 1.5 syntax, running it with the default source level will not work. The following steps should be used to configure the source level as 1.5: 1. Within the deployed crx-explorer_crx.war, edit ibm-web-ext.xmi and add the following configuration parameter to specify the JSP engine: <jspAttributes xmi:id="JSPAttribute_1225281520121" name="jdkSourceLevel" value="15"/> Note The integer (n) referenced in JSPAttribute_<n> must be unique within the file. 2. Repeat for crx-launchpad.war. Page 42 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG Installing CQ5 Note The default configuration directory for the web module is: <WAS_ROOT>\profiles\profilename\config\cells\cellname \applications\enterpriseappname\ deployments\deployedname \webmodulename\WEB-INF\ If you have already checked the option Use Binary Configuration the files are extracted to the following directory, where they can be edited: <WAS_ROOT>\profiles\profilename\installedApps\nodename \enterpriseappname\webmodulename\ Where <WAS_ROOT> is the root directory of the web application server installation. 3. Restart Websphere. 8.2.1.3 Install your Content Packages 1. Access the CRX main console. 2. Log in to the crx.system workspace as admin. 3. Navigate to the Package Manager in CRX. 4. Upload and install the following CQ5 package from <cq-installation-dir>\crxquickstart\repository\install\system: • WCM Security Content Package; cq-security-content-<cq-version>.jar. 5. Switch to the crx.default workspace, again as admin 6. Upload and install the following CQ5 packages from <cq-installation-dir>\crxquickstart\repository\install in the following order: a. Sling Content Package; 0001-cq-wcm-sling-content-<cq-version>.jar. b. WCM Content Package; 0002-cq-wcm-content-<cq-version>.jar. 8.2.1.4 Enable Replication for Author instances of CQ5 For an author instance of CQ5 you must configure it to start in “author run mode” so that you can perform replications. 1. Open the file: <cq-installation-dir>\crx-quickstart\launchpad \sling.properties for edit. 2. Add the following two properties to the file: sling.jcrinstall.folder.name.regexp = .*/(install|config)(.author)?$ sling.run.modes = author 3. Restart the crx-launchpad web application. 8.2.2 WebLogic v10.3 After installing WebLogic v10.3 and creating your domain you: 8.2.2.1 Configure the Server Locale When you deploy CQ5 with WebLogic 10.3 you must have the server locale set to en_US to avoid errors such as: Page 43 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG Installing CQ5 java.lang.IllegalArgumentException: Bad date header: 'Wed, 12 Nov 2008 16:34:28 GMT' These can occur when, for example, requesting a resource such as /libs/widgets/0.gif. To configure the server locale on Microsoft Windows: 1. Open the Control Panel. 2. Open Regional and Languages Options. 3. In the Regional Options tab, for Standards and formats select English(United States). To configure the server locale on Linux or Unix: • set the environment variable LANG to en_US. 8.2.2.2 Enable Basic Authentication Headers To enable out-of-the-box authentication of users in CQ5, authentication by the application server must be switched off: 1. Open <WebLogic-installation-dir>/user_projects/domains/<your-domain>/ config/config.xml. 2. Locate the element <security-configuration>. 3. Add the following child element to it: <enforce-valid-basic-auth-credentials> false </enforce-valid-basic-auth-credentials> 4. If you had already started WebLogic then you will need to restart it. 8.2.2.3 Install CQ5 1. Unpack the installation files of the CQ5 Quickstart into a directory (without starting the server); the installation directory will be referred to as <cq-installation-dir>: • Start the CQ5 Quickstart jar with the option -unpack; for example: java -jar cq-wcm-quickstart-5.1.0.jar -unpack This will create a folder <cq-installation-dir>crx-quickstart containing the files and folders used for installation, without actually starting the installation. Important This must be done from the command line. If you open the jar file directly you will activate the Quickstart installation and start the server. 2. Copy the following jar files to the application server folder holding shared libraries: a. CRX\server\lib\container\jcr-1.0.jar b. CRX\server\lib\container\crx-shared.jar 3. Restart WebLogic. 4. Deploy the following web applications; they can be found in <cq-installationdir>\crx-quickstart\server\webapps: Page 44 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG Installing CQ5 a. CRX webapp; crx-explorer_crx.war. For example, deploy with the context path /crx. b. Launchpad webapp; crx-launchpad.war. For example, deploy with the context path /launchpad. 5. Start the two applications. 6. Register your CRX license: a. Access your CRX installation: http://<server>:<port>/<context-path>/index.jsp for example: http://<server>:<port>/crx/index.jsp b. Click the red warning message - “Click here...” (the message is a link). c. Enter your license key. 8.2.2.4 Install your Content Packages 1. Access the CRX main console. 2. Log in to the crx.system workspace as admin. 3. Navigate to the Package Manager in CRX. 4. Upload and install the following CQ5 package from <cq-installation-dir>\crxquickstart\repository\install\system: • WCM Security Content Package; cq-security-content-<cq-version>.jar. 5. Switch to the crx.default workspace, again as admin 6. Upload and install the following CQ5 packages from <cq-installation-dir>\crxquickstart\repository\install in the following order: a. Sling Content Package; 0001-cq-wcm-sling-content-<cq-version>.jar. b. WCM Content Package; 0002-cq-wcm-content-<cq-version>.jar. 8.2.2.5 Enable Replication for Author instances of CQ5 For an author instance of CQ5 you must configure it to start in “author run mode” so that you can perform replications. 1. Open the file: <cq-installation-dir>\crx-quickstart\launchpad \sling.properties for edit. 2. Add the following two properties to the file: sling.jcrinstall.folder.name.regexp = .*/(install|config)(.author)?$ sling.run.modes = author 3. Restart the crx-launchpad web application. 8.2.3 Tomcat v6 After installing Tomcat v6 you: Page 45 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG Installing CQ5 8.2.3.1 Configure Tomcat access accounts Tomcat enables neither admin nor manager access at installation. Therefore you have to manually edit tomcat-users.xml to allow access for these accounts: 1. Navigate to the Tomcat configuration folder. 2. Edit tomcat-users.xml to include access for admin and manager. The configuration should look similar to the following example: <?xml version='1.0' encoding='utf-8'?> <tomcat-users> <role rolename="manager"/> <role rolename="tomcat"/> <role rolename="admin"/> <role rolename="role1"/> <user username="both" password="tomcat" roles="tomcat,role1"/> <user username="tomcat" password="tomcat" roles="tomcat"/> <user username="admin" password="admin" roles="admin,manager"/> <user username="role1" password="tomcat" roles="role1"/> </tomcat-users> 8.2.3.2 Install CQ5 1. Unpack the installation files of the CQ5 Quickstart into a directory (without starting the server); the installation directory will be referred to as <cq-installation-dir>: • Start the CQ5 Quickstart jar with the option -unpack; for example: java -jar cq-wcm-quickstart-5.1.0.jar -unpack This will create a folder <cq-installation-dir>crx-quickstart containing the files and folders used for installation, without actually starting the installation. Important This must be done from the command line. If you open the jar file directly you will activate the Quickstart installation and start the server. 2. Copy the following jar files to the application server folder holding shared libraries: a. CRX\server\lib\container\jcr-1.0.jar b. CRX\server\lib\container\crx-shared.jar 3. Restart Tomcat. 4. Deploy the following web applications; they can be found in <cq-installationdir>\crx-quickstart\server\webapps: a. CRX webapp; crx-explorer_crx.war. For example, deploy with the context path /crx. b. Launchpad webapp; crx-launchpad.war. For example, deploy with the context path /launchpad. 5. Start the two applications. 6. Register your CRX license: Page 46 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG Installing CQ5 a. Access your CRX installation: http://<server>:<port>/<context-path>/index.jsp for example: http://<server>:<port>/crx/index.jsp b. Click the red warning message - “Click here...” (the message is a link). c. Enter your license key. 8.2.3.3 Install your Content Packages 1. Access the CRX main console. 2. Log in to the crx.system workspace as admin. 3. Navigate to the Package Manager in CRX. 4. Upload and install the following CQ5 package from <cq-installation-dir>\crxquickstart\repository\install\system: • WCM Security Content Package; cq-security-content-<cq-version>.jar. 5. Switch to the crx.default workspace, again as admin 6. Upload and install the following CQ5 packages from <cq-installation-dir>\crxquickstart\repository\install in the following order: a. Sling Content Package; 0001-cq-wcm-sling-content-<cq-version>.jar. b. WCM Content Package; 0002-cq-wcm-content-<cq-version>.jar. 8.2.3.4 Enable Replication for Author instances of CQ5 For an author instance of CQ5 you must configure it to start in “author run mode” so that you can perform replications. 1. Open the file: <cq-installation-dir>\crx-quickstart\launchpad \sling.properties for edit. 2. Add the following two properties to the file: sling.jcrinstall.folder.name.regexp = .*/(install|config)(.author)?$ sling.run.modes = author 3. Restart the crx-launchpad web application. 8.2.4 JBoss v4 After installing JBoss v4 you: 8.2.4.1 Install CQ5 1. Unpack the installation files of the CQ5 Quickstart into a directory (without starting the server); the installation directory is referred to as <cq-installation-dir>: • Start the CQ5 Quickstart jar with the option -unpack; for example: java -jar cq-wcm-quickstart-5.1.0.jar -unpack This creates a folder <cq-installation-dir>crx-quickstart containing the files and folders used for installation, without actually starting the installation. Page 47 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG Installing CQ5 Important This must be done from the command line. If you open the jar file directly you will activate the Quickstart installation and start the server. 2. Copy the following jar files to the application server folder holding shared libraries (<JBOSS_HOME]\server\default\lib>): a. CRX\server\lib\container\jcr-1.0.jar b. CRX\server\lib\container\crx-shared.jar 3. Restart JBoss. 4. Unpack the crx-explorer_crx.war file located in the <cq-installation-dir>\crxquickstart\server\webapps folder. Note In Windows, change the .war extension to .zip and unpack like any zip file. In Linux, type jar xvf crx-explorer_crx.war to unpack. 5. In the WEB-INF folder, open log4j.xml. 6. Remove or comment the line <appender-ref ref="console"/> which is in the Loggers section of the file and save your changes and exit the file. This disables console logging in the CRX web application. 7. In the WEB-INF folder, navigate to the lib folder and delete the following files: • jcr-1.0.jar • jackrabbit-api-1.4.jar • day-commons-naming-1.1.1.jar • crx-api-1.4.1.jar 8. Pack the crx-explorer_crx.war file. Note In Windows, run the zip utility to compress it and rename the crxexplorer_crx.zip file to crx-explorer_crx.war. In Linux, type jar cvf crx-explorer_crx.war. 9. Deploy the following web applications; they can be found in <cq-installationdir>\crx-quickstart\server\webapps: a. CRX webapp; crx-explorer_crx.war. For example, deploy with the context path /crx. b. Launchpad webapp; crx-launchpad.war. For example, deploy with the context path /launchpad. JBoss supports Hot Deployment, so you can simply drag the two files to <JBOSS_HOME> \server\default\deploy. 10. Start the two applications. Page 48 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG Installing CQ5 11. Register your CRX license: a. Access your CRX installation: http://<server>:<port>/<context-path>/index.jsp for example: http://<server>:<port>/crx/index.jsp b. Click the red warning message - “Click here...” (the message is a link). c. Enter your license key. 8.2.4.2 Configure the JBoss Server Login Module By default JBoss' default login configuration attempts to authenticate users against a list of users in the users.properties file. You must configure JBoss as follows to let login attempts by unknown users to pass to the web application (CRX Explorer). The web application will then process authentication by itself. 1. Open the file for editing: <JBOSS_HOME>\server\default\conf\login-config.xml 2. In the section application-policy name="other" (at the bottom of the file) add the attribute: unauthenticatedIdentity="nobody" to the login-module entry. 8.2.4.3 Install your Content Packages Once you have installed CQ5 you will want to install content packages. 1. Access the CRX main console: http://<server>:<port>/crx-explorer_crx/index.jsp 2. Log in to the crx.system workspace as admin. 3. Navigate to the Package Manager in CRX. 4. Upload and install the following CQ5 package from <cq-installation-dir>\crxquickstart\repository\install\system: • WCM Security Content Package; cq-security-content-<cq-version>.jar. 5. Switch to the crx.default workspace, again as admin 6. Upload and install the following CQ5 packages from <cq-installation-dir>\crxquickstart\repository\install in the following order: 7. a. Sling Content Package; 0001-cq-wcm-sling-content-<cq-version>.jar. b. WCM Content Package; 0002-cq-wcm-content-<cq-version>.jar. Restart JBoss. 8.2.4.4 Enable Replication for Author instances of CQ5 For an author instance of CQ5 you must configure it to start in “author run mode” so that you can perform replications. Page 49 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG Installing CQ5 1. Open the file: <cq-installation-dir>\crx-quickstart\launchpad \sling.properties for edit. 2. Add the following two properties to the file: sling.jcrinstall.folder.name.regexp = .*/(install|config)(.author)?$ sling.run.modes = author 3. Restart the crx-launchpad web application. 8.2.5 Generic Procedures After installing the appropriate web application server you: 8.2.5.1 Generic Installation Procedure This section provides generic information about installing CQ5 with an application server. 1. Unpack the installation files of the CQ5 Quickstart into a directory (without starting the server); the installation directory will be referred to as <cq-installation-dir>: • Start the CQ5 Quickstart jar with the option -unpack; for example: java -jar cq-wcm-quickstart-5.1.0.jar -unpack This will create a folder <cq-installation-dir>crx-quickstart containing the files and folders used for installation, without actually starting the installation. Important This must be done from the command line. If you open the jar file directly you will activate the Quickstart installation and start the server. 2. Copy the following jar files to the application server folder holding shared libraries: a. CRX\server\lib\container\jcr-1.0.jar b. CRX\server\lib\container\crx-shared.jar 3. Restart your web application server. 4. Deploy the following web applications; they can be found in <cq-installationdir>\crx-quickstart\server\webapps: a. CRX webapp; crx-explorer_crx.war. For example, deploy with the context path /crx. b. Launchpad webapp; crx-launchpad.war. For example, deploy with the context path /launchpad. 5. Start the two applications. 6. Register your CRX license: a. Access your CRX installation: http://<server>:<port>/<context-path>/index.jsp for example: http://<server>:<port>/crx/index.jsp b. Click the red warning message - “Click here...” (the message is a link). Page 50 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG Installing CQ5 c. Enter your license key. 8.2.5.2 Install Content Packages Once you have installed CQ5 you will want to install content packages. 1. Access the CRX main console. 2. Log in to the crx.system workspace as admin. 3. Navigate to the Package Manager in CRX. 4. Upload and install the following CQ5 package from <cq-installation-dir>\crxquickstart\repository\install\system: • WCM Security Content Package; cq-security-content-<cq-version>.jar. 5. Switch to the crx.default workspace, again as admin 6. Upload and install the following CQ5 packages from <cq-installation-dir>\crxquickstart\repository\install in the following order: a. Sling Content Package; 0001-cq-wcm-sling-content-<cq-version>.jar. b. WCM Content Package; 0002-cq-wcm-content-<cq-version>.jar. 8.2.5.3 Enable Replication for Author instances of CQ5 For an author instance of CQ5 you must configure it to start in “author run mode” so that you can perform replications. 1. Open the file: <cq-installation-dir>\crx-quickstart\launchpad \sling.properties for edit. 2. Add the following two properties to the file: sling.jcrinstall.folder.name.regexp = .*/(install|config)(.author)?$ sling.run.modes = author 3. Restart the crx-launchpad web application. Page 51 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG 9 How to Use, Create, and Edit a Page 9.1 Managing Pages within CQ WCM This section describes how to create a page within CQ WCM and then create content on that page. Important Your account needs the appropriate access rights to create or edit pages. 9.1.1 Creating a New Page Unless all pages have been created for you in advance, before you can start creating content, you must create a page: 1. From the wcm/siteadmin window, select the level at which you want to create a new page. In the following example, you are creating a page under the level English - shown in the left pane; the right pane shows the existing pages at this level. 2. In the Page menu, select Create. The Create Page window opens. 3. In the Title field, select a title that is displayed to the user. 4. In the Label field, select a label that is used to create the URI. 5. Click the template used to create the new page, which determines the basic layout of the page. Page 52 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Use, Create, and Edit a Page 6. Click Create to create the page. You return to the wcm/siteadmin window where you can see an entry for the new page. This provides information about the page (for example when it was lasted edited and by whom) which is updated as necessary. Page 53 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Use, Create, and Edit a Page 9.1.2 Editing a Page After the page has been created, you can edit its content. When you first create a page, the page includes only the text and elements from the template. You add content by double-clicking or dragging and dropping components onto the page. 9.1.2.1 Opening a page You can open the page to be edited by one of several methods: • From wcm/siteadmin, you can double-click on the page title to open it for editing. Your page opens in a new window. • After you have opened a page, you can navigate to other pages within the site to edit them by clicking hyperlinks. 9.1.2.2 Inserting a new paragraph After you open the page, you can start to add content. You do this by adding paragraphs (also called components). To insert a new paragraph: 1. Double-click the area labeled Drag components or assets here... or drag a component from the floating toolbar to insert a new paragraph. This area appears wherever new content can be added, such as at the end of the list if other paragraphs exist or at the end of a column. Note If a paragraph already exists, you can right-click the paragraph and select Insert. This inserts the new paragraph before the existing one. 2. After you select to insert a paragraph, you see a list of the available paragraph types. Note Depending on your production environment, these choices may differ. For complete details on components, see Default Components. Page 54 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Use, Create, and Edit a Page 3. Select the component that you want and click OK. A window opens that allows you to configure your paragraph and add content. 9.1.2.3 Editing a paragraph To edit an existing paragraph, do one of the following: • Double-click the paragraph to open it. You see the same window as when you created the paragraph with the existing content. Make your changes and click OK. • Right-click the paragraph and click Edit. 9.1.2.4 Moving a paragraph To move a paragraph: 1. Click the paragraph you want to move. CQ WCM highlights the paragraph. Page 55 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Use, Create, and Edit a Page 2. Drag the paragraph to the new location and drop it. Your paragraph is moved. CQ WCM indicates where paragraphs can be moved to with a green checkmark. Page 56 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Use, Create, and Edit a Page 9.1.2.5 Deleting a paragraph To delete a paragraph: 1. Select the paragraph and right-click. Page 57 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Use, Create, and Edit a Page 2. Select Delete from the menu. CQ WCM confirms that you want to delete the paragraph as this action cannot be undone. 3. Click OK. 9.1.3 Moving or Renaming Page The procedure to move or rename a page is the same. You do not need to do both: you can rename a page without moving it or vice versa. To move or rename a page: 1. From the wcm/siteadmin window, click to select the page, then select the Page menu and select Move. (You can also right-click after you click the page and select Move.) The Move window opens where you can either specify a new location, a new name for the page, or both. Page 58 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Use, Create, and Edit a Page 2. Fill in the following fields, as appropriate: Move Specify the page to be moved - this is usually filled in by default, depending on how and where you started the move action. to Use the sitemap (available via the drop-down menu ) to select the location where the page should be moved to. If you are only renaming the page, ignore this field. Rename to The current page label displays by default. Specify the new page label, if required. 3. Click Move. CQ WCM confirms that you want to move or rename the current page. Click OK to confirm. 9.1.4 Deleting a Page 1. You can delete a page from various locations: • Within the wcm/siteadmin window, click to select the page, then open the Page menu and select Delete. • Within sidekick use the page actions tab to select Delete - this deletes the page currently open • Within sidekick use the site map tab - navigate to page to be deleted, then right-click and select Delete 2. After the page has been selected you must confirm the deletion of the page - as the action cannot be undone. Note If the page has been published you can restore the latest (or a specific) version, but this may not have exactly the same content. See the section called “How To Restore Pages” for further details. 9.1.5 Setting the Page Properties Page Properties define the various properties of the page, such as titles, when they appear on the website and others. 1. Open the page you want to edit. 2. In the sidekick, click the Page icon. Select Page Properties... from the list. Page 59 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Use, Create, and Edit a Page 3. In the window that opens, you can modify the global, advanced, tags, impressions, and page analytics of a page: a. Global Title Text The page title - as appears in the siteadmin list. Page Title A title to be used on the page. Navigation Title A title for the page for use within the navigation map. Often shorter than the full title. Page 60 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Use, Create, and Edit a Page Subtitle A subtitle for use on the page. Page Language The Hide Page in Navigation A toggle switch to indicate whether the page will be shown, or hidden in the page navigation. b. Advanced On Time The date and time at which the published page will be activated. When published this page will be kept dormant until the specified time. Leave these fields empty for pages you want to publish immediately (the normal scenario). Off Time The time at which the published page will be deactivated. Again leave these fields empty for pages you want to publish immediately. Vanity URL Allows you to enter a vanity URL for this page. Redirect Vanity URL Indicates whether you want the page to use the vanity URL. c. Tags/Keywords Here you can add, or remove tags from the page by updating the list in the selection box: • A completely new tag can be entered by typing the name on an empty space in the selection box. • With the drop-down functionality you can select from existing tags. • An x will appear when you mouse-over a tag entry in the selection box; this can be used to remove that tag for this page. Page 61 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Use, Create, and Edit a Page d. Impressions This shows the activity on the page as in the impressions generated. e. Page Analytics Page 62 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Use, Create, and Edit a Page Provider The provider who will be generating the analytical statistics. ID / Snippet The ID or code snippet to be included on the page. 4. Click OK to save the new properties. Page 63 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG 10 How to Publish a Page 10.1 How To Publish Pages This section describes how to publish pages in CQ WCM. To publish a page, you activate its contents. Conversely, to remove a page from publication, you deactivate its contents. When you are working on pages that you are modifying, you can lock the pages so other users cannot make changes or accidentally activate the content. In addition, you preview a page before publishing by selecting Preview Mode in the sidekick. If you are a system administrator and need to test the publish environment, see How to install CQ5 author and publish instances. 10.1.1 Activating Content You activate pages in the wcm/siteadmin window. After you have opened a page and modified its contents, you return to the wcm/siteadmin window to activate the content of that page or of an entire tree of pages. To activate page content: 1. In the siteadmin/wcm window, select the page that you want to activate. 2. In the Page menu, select Activation and then either Activate or Activate Tree. To activate the content of only that page, select Activate. To activate the content of the page and all its sub-pages, click Activate Tree. If you want to cancel the activation, click Cancel. 3. CQ WCM activates the selected content. To see that the page and its sub-pages (if selected) have been published, refresh the page. The published page or pages appears in the siteadmin/wcm window with information about who activated the content as well as date and time of activation. Page 64 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Publish a Page 10.1.2 Deactivating Content To remove a page from the publish environment, you deactivate the content. To deactivate a page: 1. In the siteadmin/wcm window, select the page that you want to deactivate. 2. In the Page menu, select Activation and then Deactivate. 3. Refresh the siteadmin/wcm window and the content is no longer published. 10.1.3 Determining Page Publication Status The colors next to pages in the siteadmin/wcm window indicate publication status. Table 10.1. Color Description Green Publication was successful. Content is published. Yellow Publication is pending. Confirmation of publication has not yet been received by the system. Page 65 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Publish a Page Color Red Description Publication failed. There is no connection with the publish instance. This can also mean that the content was deactivated. 10.1.4 Locking Pages To lock a page that you are working on so no one can modify the contents or activate it: 1. In the siteadmin/wcm window, select the page that you want to lock. 2. In the Page menu, select Locking and then Lock. That page is locked to other users. 3. CQ WCM displays the page as locked and indicates which user has locked the page. 10.1.5 Unlocking Pages You can only unlock locked pages if you locked the page or if you have administrator privileges. To unlock a page: 1. In the siteadmin/wcm window, select the page you want to unlock. 2. In the Page menu, select Locking and then Unlock. CQ WCM indicates that the page is no longer locked. 10.1.6 Using Preview Mode This mode allows you to preview the page as if it were appearing on your website in its final form. Page 66 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Publish a Page To access Preview mode: 1. In the siteadmin/wcm window, open the page you want to view in Preview mode. 2. In the sidekick, click the magnifying glass (preview mode). CQ WCM displays the page as it appears on your web site in its final form. Page 67 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG 11 How to Restore a Page 11.1 How To Restore Pages This section describes how to restore pages that have been previously deleted. Note Only pages that have been previously activated can be restored. Each time you activate a page or tree, CQ WCM creates a new version of that page or tree. To restore a page to a previous version: 1. In the wcm/siteadmin window, navigate to the page you want to restore and select it. 2. In the Page menu, select Restore and then Version or Tree. Selecting Version lists previous versions of the document. Selecting Tree lists previous version of the content tree. 3. Click Restore. CQ WCM restores the version or tree to the one you selected. Page 68 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG 12 How to Create Templates 12.1 Developing Page Templates CQ5 page templates are simply models used to create new pages. They can contain as little, or as much, initial content as needed, their role being to create the correct initial node structures, with the required properties (primarily sling:resourceType) set to allow editing and rendering. 12.1.1 Creating a new Template (based on an existing template) Needless to say a new template can be created completely from scratch, but often an existing template will be copied and updated to save you time and effort. For example, the templates within Geometrixx can be used to get you started. 1. Copy an existing template (preferably with a definition as close as possible to what you want to achieve) to a new node. Note Templates are usually stored in /apps/<website-name>/templates/ <template-name>. 2. Change the jcr:title of the new template node to reflect its new role. You can also update the jcr:description if appropriate. 3. Copy the component on which the template is based (this is indicated by the sling:resourceType property of the jcr:content node within the template) to create a new instance. Note Components are usually stored in /apps/<website-name>/components/ <component-name>. 4. Update the jcr:title and jcr:description of the new component. 5. Replace the thumbnail.png if you want a new thumbnail picture to be shown in the template selection list. 6. Update the sling:resourceType of the template's jcr:content node to reference the new component. 7. Make any further changes to the functionality or design of the template and/or its underlying component. Changes made to the /apps/<website>/templates/<template-name> node will affect the template instance (as in the selection list). Changes made to the /apps/<website>/components/<component-name> node will affect the content page created when the template is used. You can now create a page within your website using the new template. Page 69 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG 13 How to Use Tags 13.1 How to Manage Tags in CQ WCM 13.1.1 Using Sidekick to access and assign Tags Many users will assign tags directly to the page they are editing. This can be done using the sidekick: 1. Within sidekick select the Page tab. 2. Open Page Properties. 3. Select the Tags/Keywords tab. Here you can either enter a tag by either typing a new name, or selecting an existing tag from the list of matching tags: Or selecting a tag according to namespace, by using the drop-down option: Page 70 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Use Tags 13.1.2 The Tag Administration Console The Tag Administration console can be used to manage your tags and taxonomies. It shows information about the tags already created for your website, and a count of how often they are referenced in the website: From here you can perform various actions on tags and/or namespaces. 13.1.2.1 Creating or Editing Tags and Namespaces 1. Depending on the level you are starting from you can create either a tag or a namespace: a. If you select Tags you can create a namespace: Page 71 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Use Tags b. 2. If you select a namespace (for example Demo) you can create a tag within that namespace: In both cases enter a name, title and description then click Create. 13.1.2.2 Deleting Tags 1. In the right-hand pane select the namespace or tag that you want to delete. 2. Click Delete. 3. You will be asked to confirm the delete action. Click Yes to delete the item. 13.1.2.3 Activating and Deactivating Tags 1. In the right-hand pane select the namespace or tag that you want to activate or deactivate. 2. Click Activate, Activate Tree or Deactivate as required. 13.1.2.4 List - showing where tags are referenced List will open a new window showing the paths of all pages using the highlighted tag: Page 72 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Use Tags 13.1.3 Searching for Tags You can search for tags in both the author and publish environments. 13.1.3.1 Searching for tags with the Search component The search component covers tags and can be used in both the author and publish environments. Page 73 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Use Tags 13.1.3.2 Searching for tags with the Content Finder In the author environment you can use the content finder to search for tags: 1. Select the Pages tab in the content finder. 2. Enter the tag you want to search for. Using the prefix “tags:” will limit the search to tags only. Page 74 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG 14 Integrating with CQ DAM 14.1 How to Integrate CQ DAM into your CQ5 WCM Installation The following details how to integrate an existing installation of CQ DAM into CQ5 WCM. In this scenario CQ WCM and CQ DAM will be installed separately. The integration will result in a new tab in the CQ WCM content finder that allows you to find and use media from DAM. Note CQ DAM has to be mounted as a virtual repository for ALL author and publish installations (independently if in a cluster). See the CRX documentation for further information. 1. Install and start CQ5 WCM. See the section called “How to Install CQ WCM Author and Publish Instances using Quickstart” for further information. 2. Create a mount point in the repository. 3. 4. a. Open the CRX explorer. b. Create /etc/mnt/dam (see the code sample in step 7.b). The new nodes /mnt and / dam should be of type sling:Folder. c. With Mixins... add mix:referenceable to /etc/mnt/dam. Integrate CQ DAM functionality. a. Copy the file crx-quickstart/opt/examples/extensions/contentfinder/ dam.js to /libs/wcm/extensions/contentfinder by using WebDAV. b. Stop CQ5. Enable RMI in the CRX used by CQ DAM. a. Open <CQDAM_HOME>/server/runtime/0/_crx/WEB-INF/web.xml. b. Configure the RMI configuration for the Repository Servlet; set the port to 8303. <!-RMI configuration --> <init-param> <param-name>rmi-port</param-name> <param-value>8303</param-value> <description>The RMI port for registering the repository in the RMI Registry. If equals 0, the default port is used. Omit this parameter to disable RMI server entirely. </description> </init-param> 5. Configure CQ DAM as the virtual repository for CQ5 WCM. Note CQ DAM has an issue if it is installed in a path containing space characters. In such a case you have to add the JVM Property Djava.rmi.server.useCodebaseOnly=true as the first parameter to CQ5, when DAM is mounted as a virtual repository in CQ5. Page 75 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG Integrating with CQ DAM a. Open <CQ5_HOME>/server/runtime/0/_crx/WEB-INF/web.xml. b. In the Repository Servlet definition replace the following (either comment out, or remove): <servlet-class>com.day.crx.j2ee.CRXRepositoryStartupServlet</servlet-class> with the following configuration: <servlet-class>com.day.crx.mount.virtual.VirtualRepositoryStartupServlet</servletclass> <init-param> <param-name>primaryWorkspace</param-name> <param-value>crx.default</param-value> </init-param> <!-- virtual DAM repository --> <init-param> <param-name>mount.crx.default@rmi://127.0.0.1:8303/crx</param-name> <param-value>/etc/mnt/dam</param-value> </init-param> Note Make sure that: • the port in rmi://127.0.0.1:8303 matches the port used in step 5.b (Enable RMI in the CRX used by CQ DAM). • the mount point /etc/mnt/dam matches that specified in step 2.b (Create a mount point in the repository). 6. Start CQ5. 7. A new tab in the content finder allows you to find and use your media from CQ DAM: Page 76 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG 15 How to Find Logs and Audit Entries 15.1 Finding the Audit Records and Log Files Auditing records and log files relating to CQ5 can be found at various locations. The following is provided to give you a overview of what you can find where. Note As CQ WCM is based on CRX, some of the log files listed below are actually generated by CRX. Please see the CRX documentation for full details of these. 15.1.1 Audit Records Audit records are held to provide a record of who did what when. Different audit records are generated for both CQ WCM and OSGi events. 15.1.1.1 CQ WCM Audit records from within the siteadmin 1. Open a page. 2. From the sidekick you can select the tab, then double-click on Audit Log... 3. A new window will open showing the list of audit records for the current page. 4. Click OK when you want to close the window. 15.1.1.2 CQ WCM Auditing records within the repository Within the /var/audit folder, audit records are held according to the resource. You can drill down until you can see the individual records and the information they contain. Note These entries hold the same information as displayed above in the siteadmin. Page 77 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Find Logs and Audit Entries 15.1.1.3 OSGi Audit records from within the Felix console OSGi events also generate audit records which can be seen from the Audit Log tab in the Felix Web Management Console: 15.1.2 Log files Various log files are held on the file server where you installed CQ5: • <installation-path>\launchpad\logs • error.log Error messages, of varying levels of severity, related to the CRX Quick launchpad are registered here. • <installation-path>\logs • access.log All access requests to CQ WCM and the repository are registered here. • error.log Error messages (of varying levels of severity) are registered here. • request.log Each access request is registered here together with the response. • server.log All actions made by the server are registered here. • stderr.log Holds error messages, again of varying levels of severity, generated during startup. • stdout.log Holds logging messages indicating events during startup. Page 78 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Find Logs and Audit Entries • <installation-path>\logs\crx • error.log Error messages (of varying levels of severity) related to the repository are registered here. • translation.log Translation journaling. • <installation-path>\repository\ • revision.log Revision journaling information. • <installation-path>\repository\repository\index • redo.log Redo event journaling. • <installation-path>\repository\shared\journal • journal.log<.x> Event journaling on the repository; multiple versions. • <installation-path>\repository\workspaces\<workspace>\index • indexing_queue.log Index journaling. • redo.log Redo event journaling. • <installation-path>\server\logs • access.log All access requests to CQ WCM and the repository are registered here. Page 79 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG 16 Security Checklists This section deals with various steps you should take to ensure that your CQ5 installation is secure. 16.1 Security Checklist for System Administrators 16.1.1 Disable WebDAV WebDAV should be disabled on the publish environment. See the CRX documentation for further details. 16.1.2 Restrict Access via the Dispatcher By configuring the Dispatcher you should restrict access so that only the following are available to external visitors: • /content - Site content • /etc - Miscellaneous content such as designs The following should be entered in the configuration file dispatcher.any: # only handle the requests in the following acl. default is 'none' # the glob pattern is matched against the first request line /filter { /0001 { /glob "*" /type "deny" } /0002 { /glob "* /content[./]" /type "allow" } /0003 { /glob "* /etc[./]" /type "allow" } Note This configuration includes the following restrictions: 1. Restricts access to the Servlet Engine Administration /admin 2. Restricts access to the Sling Console /system 3. Restricts access to CRX /crx 4. Restricts access to the following application specific folders: • /apps – Application data • /libs – CQ5 Library • /var – var folder Page 80 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG Security Checklists • /etc – Miscellaneous folder • /home – User’s home folder 5. Restricts access to /tmp 6. Denies POST requests in case forms are not used. 16.1.3 Check for Cross-Site Scripting (XSS) Cross-site scripting (XSS) allows attackers to inject code into web pages viewed by other users. This security vulnerability can be exploited by malicious web users to bypass access controls. Warning CQ5 example code is not protected against such attacks. 16.2 Security Checklist for Power Users 16.2.1 Change Default Passwords Day strongly recommends that you change the passwords for the following two accounts: 1. Change the password for the CQ5 admin account. Important To change the password for the CQ5 admin account, you need to change the admin password in both CRX and the OSGi Console. See the section called “Changing the admin account in the CRX console” and the section called “Changing the admin account in the OSGi Apache Felix console”. 2. Change the password for the CQSE (Communiqué Servlet Engine) admin account. Important Further actions are described in the table the section called “Default Users and Groups”, which gives an overview of the default users and groups included in the standard installation. 16.2.1.1 Changing the admin account in the CRX console To change the admin account in the CRX console: 1. Log in to http://<server>:<port_number>/crx to open the CRX console. 2. Log in as the administrator and switch to the crx.system workspace. 3. Open the Content Explorer and navigate to the admin user and select it. Page 81 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG Security Checklists 4. In the Security menu, select Set User Password. A Set User Password window opens. 5. Enter the new password and re-enter to confirm and click OK. 6. Save your changes. 16.2.1.2 Changing the admin account in the OSGi Apache Felix console To change the admin account in the OSGi Apache Felix console: 1. Log in to http://<server>:<port_number>/system/console/configMgr to open configurations in the Apache Felix console. 2. In the Configurations menu, select CRX Sling Client Repository. Page 82 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG Security Checklists 3. In the Admin password field, change the password to match the one you entered in the CRX console. 4. Click Save to save your changes. 16.3 Security Checklist for Developers 16.3.1 Use the user session, not the administrative session This means you should use: slingRequest.getResourceResolver().adaptTo(Session.class); Page 83 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG 17 Defining Performance Tests on Your Publish Environment 17.1 Introduction Performance is of prime importance to your publish environment. Therefore, you need to carefully plan and analyze the performance tests you will make for the publish environment while implementing your project. 17.1.1 Purpose of this How To To give a standardized overview of the issues involved with defining a Test Concept specifically for Performance Tests on your Publish environment. 17.1.2 Target Audience • QA Engineers • Project Managers • System Administrators 17.2 Phases to be used This document covers a standardized approach to performance tests for a CQ5 application on the Publish environment. This involves the following 5 phases (which will be covered in more detail in the next 5 sections): 1. Verification of Knowledge 2. Definition of Scope 3. Definition of Performance Goals 4. Test Methodologies 5. Optimization Controlling is an additional, all-encompassing process - necessary but not limited to testing. Page 84 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG Defining Performance Tests on Your Publish Environment Figure 17.1. The 5 Phases of Performance Testing on your Publish Environment 17.3 Verification of Knowledge A first step is to document the basis information which you need to know before you can start testing: • the architecture of your test environment • an application map detailing the internal elements which will need testing (both in isolation and combination) 17.3.1 Test Architecture You should clearly document the architecture of the test environment being used for your performance testing. You will need a reproduction of your planned production Publish environment, together with Dispatcher and Load Balancer. 17.3.2 Application Map To get a clear overview you can create a map of the entire application (you may well have this from tests on the Author environment). A diagram representation of the internal elements of the application, can give an overview of the testing requirements; with color-coding it can also act as a basis for reporting. The example below illustrates the level of detail appropriate: Page 85 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG Defining Performance Tests on Your Publish Environment Figure 17.2. Verification Map 17.4 Scope Definition An application will usually have a selection of use cases. Some will be very important, others less so. To focus the scope of the performance testing on publish, we recommend that you define the: • most important business use cases • most critical technical use cases The number of use cases is up to you, but it should be limited to an easily manageable number (e.g. between 5 to 10). Once the key use cases have been selected, then the key performance indicators (KPI) and the tools used to measure them can be defined for each case. Examples of common KPIs include: • End to end response time • Servlet response time • Response time for a single component • Response time for the services • Number of idle threads in the thread pool • Number of free connections • System resources such as CPU and I/O access 17.5 Test Methodologies This concept has 4 scenarios used for defining and testing the performance goals: 1. Single component tests 2. Combined component tests Page 86 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG Defining Performance Tests on Your Publish Environment 3. Going Live scenario 4. Error scenarios Based on the following principles. Component Breakpoints Each component has a specific breaking point when related to performance. This means that a component can show good performance until a specific point is reached, after which performance will degrade rapidly. To get a full overview of the application, you must first verify your components to determine when the breakpoint of each is reached. To find the breakpoint you can perform a load test where, over a period of time, you increase the number of users to create an increasing load. By monitoring this load, and the response of the components, you will encounter specific performance behavior when the breaking point of the component is reached. The point can be qualified by the number of concurrent transactions per second, together with the number of concurrent users (if the component is sensitive to this KPI). This information can then act as a benchmark for improvements, indicate the efficiency of the measures being used, and help define test scenarios. Transactions The term transaction is used to represent the request of a complete web page, including the page itself and all subsequent calls; i.e. the page request, any AJAX calls, images and other objects. Request Drill Down To fully analyze each request you can represent each element of the call stack, then total the average processing time for each. 17.6 Defining the Performance Goals Once the scope, and related KPIs have been defined, the specific performance goals can be set. This involves devising test scenarios, together with target values. You will need to test performance under both average and peak conditions. In addition, you will need Going Live scenario tests to ensure that you can cater for increased interest in your website when it is first made available. Any experience, or statistics which you may have collected from an existing website can also be useful in determining future goals; for example top traffic from your live website. Note As already mentioned, performance is of prime importance to a CQ5 project. Therefore the goals (for both individual components and scenarios) should be defined at the beginning of the project and verified during the implementation phase. See also the Target Metrics section in the Project Manager Guide. 17.6.1 Single Component Tests Critical components will need to be tested - under both average and peak conditions. In both cases, you can define the expected number of transactions per second when a predefined number of users are using the system. Page 87 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG Defining Performance Tests on Your Publish Environment Table 17.1. Example - Single Component Test Component Test Type Homepage Single User Homepage 100 Users #Users Tx/sec (Expected) Average 1 1 Peak 1 3 Average 100 3 Peak 100 3 Tx/sec (Tested) Description 17.6.2 Combined Component Tests Testing the components in combination gives a closer reflection of the applications behavior. Again average and peak conditions must be tested. Table 17.2. Example - Combined Component Tests Scenario Component Mixed average Homepage Mixed peak #Users Tx/sec (Expected) 10 1 Search 10 1 News 10 2 Events 10 1 Activations 10 3 Homepage 100 5 Search 50 5 News 100 10 Events 100 10 Activations 20 20 Tx/sec (Tested) Description Simulation of author behavior. Simulation of author behavior. 17.6.3 Going Live Tests During the first few days after your website is made available, you can expect an increased level of interest. This will probably be even greater than the peak values you have been testing for. It is strongly recommended to test Going Live scenarios to ensure that the system can cater for this situation. Table 17.3. Example - Going Live Tests Scenario Going Live peak Test Type #Users Tx/sec (Expected) Homepage 200 20 Search 100 10 News 200 20 Events 200 20 Activations 20 20 Page 88 of 117 Tx/sec (Tested) Description Simulation of author behavior. CQ 5.1 WCM Copyright 1993-2008 Day Management AG Defining Performance Tests on Your Publish Environment 17.6.4 Error Tests Error scenarios must also be tested to ensure that the system reacts correctly and appropriately. Not only in how the error itself is handled, but the impact it may have on performance. For example: • what happens when the user tries to input an invalid search term in the search box • what happens when the search term is so general that it returns an excessive number of results When devising these tests it should be remembered that not all scenarios will occur regularly. However, their impact on the entire system is important. Table 17.4. Example - Error Scenario Tests Error Scenario Search component overload Error Type #Users Tx/sec (Expected) Tx/sec (Tested) Description Search on global wildcard (asterisk) 10 1 Only *** are searched. Stop word 20 2 Searching for a stop word. Empty string 10 1 Searching for an empty string. Special characters 10 1 Searching for special characters. 17.6.5 Endurance Tests Certain issues will only be encountered after the system has been running for a continued period of time; be that either hours or even days. An endurance test is used to test an constant average load over a required period of time. Any performance degradation can then be analyzed. Table 17.5. Example - Endurance Tests Scenario Test Type Endurance test Homepage (72 hours) #Users Tx/sec (Expected) 10 1 Search 10 1 News 20 2 Events 10 1 Activations 1 3 Tx/sec (Tested) Description Simulation of author behavior. 17.7 Optimization In the later stages of implementation you will need to optimize the application to fulfill / maximize the performance goals. Any optimizations made must be tested to ensure they have not affected the functionality and verified with the load tests before being released. Page 89 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG Defining Performance Tests on Your Publish Environment A selection of tools is available to help you with load-generation, performance monitoring and/or results analysis: • JMeter • Load Runner (HP) • CA Wily Introscope • Determyne InsideApps • InfraRED • Java Interactive Profile • many more... After optimization, you will need to test again to confirm the impact. 17.8 Reporting On-going reporting will be needed to keep everyone informed of the status; as mentioned previously with color-coding the Architecture Map can be used for this. After all tests have been completed you will want to report on: • any critical errors encountered • non-critical issues which will still need further investigation • any assumptions made during testing • any recommendations to arise from the testing Page 90 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG 18 How to Create a Fully Featured Internet Website How to Create a Fully Featured Internet Website Page 91 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG 19 How to Set Up the Development Environment with Eclipse 19.1 How to Set Up the Development Environment with Eclipse This document describes the process of setting up a local development environment for a simple CQ5 project with Eclipse. It then describes how to integrate logic into the project through Java coding and JSP scripting. Lastly, it points to open source software to enable collaborative and automated developing. The setup described here is an alternative among others and may vary from project to project. The local development environment involves: • A CQ5 installation that will act as your local environment. • CRX Explorer within the CQ5 instance to create and edit nodes and properties within the CRX repository. • FileVault (VLT), a Day developed utility that maps the CRX repository to your file system. • Eclipse to edit the project source on your local file system. • Apache Maven to run local snapshot builds. 19.1.1 Creating the Project Structure in CQ5 This section describes the creation of a simple project structure in CQ5: 1. Install CQ5 on your machine. Please refer to the section called “Installing a CQ WCM instance - Generic procedure” for the detailed procedure. In the current context, CQ5 runs locally on port 4502. If already installed then ensure it is running and connect. 2. 3. In the CRX Explorer, create the project structure: 1. Under the /apps folder, create the nt:folder myApp. 2. Under the myApp folder, create the nt:folder components. 3. Under the myApp folder, create the nt:folder templates. 4. Under the myApp folder, create the nt:folder install. In your browser, navigate to the Miscellaneous tab. Under designs, create the design page of your application: • Title: My Application Design Page. • Name: myApp. • Template: Design Page Template. 19.1.2 Installing FileVault (VLT) FileVault (VLT) is a tool developed by Day that maps the content of a CRX instance to your file system. The VLT tool has similar functionalities to those of an SVN client, providing normal check in, check out and management operations, as well as configuration options for flexible representation of the project content. Page 92 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Set Up the Development Environment with Eclipse To install VLT, follow the steps: 1. In your file system, go to <cq-installation-dir>/crx-quickstart/opt/filevault. The build is available in both tgz and zip formats. 2. Extract the archive. 3. Add <cq-installation-dir>/crx-quickstart/opt/filevault/vault-cli<version>/bin to your environment PATH so that the command files vlt or vlt.bat are accessed as appropriate. For example, <cq-installation-dir>/crx-quickstart/ opt/filevault/vault-cli-1.1.2/bin 4. Open a command line shell and execute vlt --help. Make sure it displays the following help screen: 19.1.3 Installing Eclipse Eclipse is open source software used to edit the project source locally on your file system. Apache Maven is also open source software, used to run local snapshot builds: it compiles Java code and stores the compiled code in a jar file. In this section, you will install Eclipse and a Maven plugin which embeds the Maven functionality within Eclipse: 1. Download Eclipse - select the Eclipse IDE for Java EE Developers option. 2. Install Eclipse: extract from the downloaded zip file to your destination directory. 3. Start Eclipse: 4. a. Navigate to the directory into which you extracted the contents of the Eclipse installation zip file. For example C:\Program Files\Eclipse\. b. Double-click on eclipse.exe (or eclipse.app) to start Eclipse. Create a new workspace for your project and name it myApp. Page 93 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Set Up the Development Environment with Eclipse 5. Install the Maven plugin (m2) from Sonatype. Disable Maven SCM handler for Subclipse (Optional) and Maven Integration for AJDT (Optional). 6. After installation it is recommended to restart Eclipse. 19.1.4 Creating the Project Structure in Eclipse In this section, you will create 2 Maven projects: • one called UI (after User Interface) which contains the CQ5 project structure with the JSP scripts. • the other called Core which contains the Java code (source and compiled). The compiled code is stored in a jar file. The advantage of such a structure is that it adds modularity and autonomy to the logic your application because each jar file (bundle) can be managed separately. 19.1.4.1 Create the UI Maven Project To create the UI Maven project, follow the steps: 1. In Eclipse open the Workbench. 2. Create the UI Maven project: 1. In the Menu bar, click File, select New, then Other... . 2. In the dialog, expand the Maven folder, select Maven Project and click Next. 3. Check the Create a simple project box and the Use default Workspace locations box, then click Next. 4. Define the Maven project: • Group Id: com.day.cq5.myapp • Artifact Id: ui • Name: CQ5 MyApp UI • Description: This is the UI module 5. 3. Click Finish. Set the Java Compiler to version 1.5: 1. Right-click the ui project, select Properties. 2. Select Java Compiler and set following properties to 1.5: • Compiler compliance level • Generated .class files compatibility • Source compatibility 4. 3. Click OK. 4. In the dialog window, click Yes. Create the filter.xml file which defines the content that will be exported by VLT: 1. In Eclipse, navigate to ui/scr/main and create the content folder. Page 94 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Set Up the Development Environment with Eclipse 2. Under content, create the META-INF folder. 3. Under META-INF, create the vault folder. 4. Under vault, create the filter.xml file. 5. In filter.xml, copy the following code to filter.xml: <?xml version="1.0" encoding="UTF-8"?> <!-Defines which repository items are generally included --> <workspaceFilter vesion="1.0"> <filter root="/apps/myApp" /> <filter root="/etc/designs/myApp" /> </workspaceFilter> 6. 5. Save the changes. Check out the CQ5 content into your ui project with VLT: 1. From the system command line, navigate to the directory holding your Eclipse workspace <eclipse>/<workspace>/myApp/ui/src/main/content. 2. Execute the command: vlt --credentials admin:admin co http://localhost:4502/crx This command creates the folder jcr_root under <eclipse>/<workspace>/ myApp/ui/src/main/content. This maps to the CRX root (/). Under jcr_root the following files and folders are created, as defined in filter.xml: • apps/myApp • etc/designs/myApp It also creates two files, config.xml and settings.xml in <eclipse>/ <workspace>/myApp/ui/src/main/content/META-INF/vault. These are used by VLT. 6. 7. To enable Eclipse to map the file paths used in the JSP scripts, create a link to the apps folder under ui: 1. Right-click ui, select New, then Folder. 2. In the dialog window, click Advanced and check the Link to folder in the file system box. 3. Click Browse, then specify <eclipse>/<workspace>/myApp/ui/src/main/ content/jcr_root/apps. 4. Click OK. 5. Click Finish. To enable Eclipse to identify the Java classes, methods and objects used in the JSP scripts, export the needed Java libraries from the CQ5 server to your file system and reference them in the ui project. In this example, you will reference the following libraries: • libs/cq/install stored in the CQ5 server • libs/sling/install stored in the CQ5 server Page 95 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Set Up the Development Environment with Eclipse • libs/wcm/install stored in the CQ5 server • <cq-installation-dir>/crx-quickstart/server/lib/container stored in your file system Proceed as follows: 1. In your file system, create a CQ5 libraries folder called cq5libs. This folder can be created anywhere. 2. Under cq5libs, create the folders: cq, sling and wcm. 3. From the system command line go to .../cq5libs/cq and execute vlt co http:// localhost:4502/crx /libs/cq/install . to export the libraries stored under /libs/cq/ install from the CQ5 server. 4. From the system command line go to .../cq5libs/sling and execute vlt co http:// localhost:4502/crx /libs/sling/install . to export the libraries stored under /libs/ sling/install from the CQ5 server. 5. From the system command line go to .../cq5libs/wcm and execute vlt co http:// localhost:4502/crx /libs/wcm/install . to export the libraries stored under /libs/wcm/ install from the CQ5 server. 6. In Eclipse, right-click the ui project, select Build Path, then Configure Build Path. In the dialog select the Libraries tab. 7. Click Add External JARS..., navigate to .../cq5libs/cq/jcr_root, select all the jar files and click Open. 8. Click Add External JARS..., navigate to .../cq5libs/sling/jcr_root, select all the jar files and click Open. 9. Click Add External JARS..., navigate to .../cq5libs/wcm/jcr_root, select all the jar files and click Open. 10. Click Add External JARS..., navigate to <cq-installation-dir>/crxquickstart/server/lib/container, select all the jar files and click Open. 11. Click OK. 19.1.4.2 Create the Core Maven Project To create the Core Maven project, follow the steps: 1. In Eclipse, create the Core Maven project: 1. In the Menu bar, click File, select New, then Other... . 2. In the dialog, expand the Maven folder, select Maven Project and click Next. 3. Check the Create a simple project box and the Use default Workspace locations box, then click Next. 4. Define the Maven project: • Group Id: com.day.cq5.myapp • Artifact Id: core • Name: CQ5 MyApp Core Page 96 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Set Up the Development Environment with Eclipse • Description: This is the Core module 5. 2. Click Finish. Add the necessary plugins and dependencies to the core project: 1. Open the pom.xml file under core. 2. Copy-paste following code before the </project> tag: <packaging>bundle</packaging> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.5</source> <target>1.5</target> </configuration> </plugin> <plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-bundle-plugin</artifactId> <version>1.4.3</version> <extensions>true</extensions> <configuration> <instructions> <Export-Package> com.day.cq5.myapp.*;version= ${pom.version} </Export-Package> </instructions> </configuration> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>com.day.cq.wcm</groupId> <artifactId>cq-wcm-api</artifactId> <version>5.1.20</version> </dependency> <dependency> <groupId>com.day.cq</groupId> <artifactId>cq-commons</artifactId> <version>5.1.18</version> </dependency> <dependency> <groupId>org.apache.sling</groupId> <artifactId>org.apache.sling.api</artifactId> <version>2.0.3-incubator-R708951</version> </dependency> </dependencies> 3. 3. Save the changes. Deploy the CQ5 specific artifacts as defined in the pom.xml (cq-wcm-api, cq-commons and org.apache.sling.api) to the local Maven repository: Page 97 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Set Up the Development Environment with Eclipse 1. From the system command line go to <your-user-dir>/.m2/repository/com/ day/cq/wcm/cq-wcm-api/5.1.20 (create the folders if they don't exist) and execute vlt co http://localhost:4502/crx /libs/wcm/install/cq-wcm-api-5.1.20.jar . to export the library from the CQ5 server. 2. From the system command line go to <your-user-dir>/.m2/repository/com/ day/cq/cq-commons/5.1.18 (create the folders if they don't exist) and execute vlt co http://localhost:4502/crx /libs/cq/install/cq-commons-5.1.18.jar . to export the library from the CQ5 server. 3. From the system command line go to <your-user-dir>/.m2/repository/org/ apache/sling/org.apache.sling.api/2.0.3-incubator-R708951 (create the folders if they don't exist) and execute vlt co http://localhost:4502/crx /libs/sling/ install/org.apache.sling.api-2.0.3-incubator-R708951.jar . to export the library from the CQ5 server. Note You don't need to perform this step if the three CQ5 artifacts are globally deployed for the project on a Maven repository (e.g. using Apache Archiva). 4. Set the Java Compiler to version 1.5: 1. Right-click the core project, select Properties. 2. Select Java Compiler and set following properties to 1.5: • Compiler compliance level • Generated .class files compatibility • Source compatibility 5. 3. Click OK. 4. In the dialog window, click Yes. Create the package com.day.cq5.myapp that will contain the Java classes under core/ src/main/java: 1. Under core, right-click src/main/java, select New, then Package. 2. Name it com.day.cq5.myapp and click Finish. 19.1.5 Scripting with Eclipse and CQ5 When editing UI code use the following sequence: • Create a template and a component with the CRX Explorer. • Update the changes with VLT (export from the repository to your file system) . • Create a component script (JSP) with Eclipse. • Check in the changes from the file system into the repository with VLT. The following example illustrates this process: 1. Create a new template with the CRX Explorer: 1. In the CRX Explorer, under /apps/myApp/templates, create a new template: Name: contentpage Type: cq:Template Page 98 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Set Up the Development Environment with Eclipse 2. 2. Under the contentpage Node, edit the Property jcr:title and add as Value: MyApp Content Page Template 3. Under the contentpage Node, add a new Node: Name: jcr:content Type: cq:PageContent 4. Under the jcr:content Node, edit the Property sling:resourceType and add as Value: myApp/components/contentpage 5. Under the jcr:content Node, add a new Property: Name: personName Value: myName Create a new component with the CRX Explorer: • 3. 4. In the CRX Explorer, under /apps/myApp/components, create a new component: Name: contentpage Type: cq:Component Use VLT to update the changes made from your repository to your file system, and therefore Eclipse: 1. From the system command line navigate to <eclipse>/<workspace>/myApp/ui/ src/main/content/jcr_root. 2. Execute: vlt st --show-update to see the changes made on the repository. 3. Execute: vlt up to update the changes from the repository to your file system. Create the component script (JSP) with Eclipse: 1. In Eclipse, navigate to ui/src/main/content/jcr_root/apps/myApp/ components/contentpage. 2. Right-click contentpage, select New, then File. 3. In the dialog, name the file contentpage.jsp and click Finish. 4. Copy the following code into contentpage.jsp: This is the contentpage component. 5. 5. 6. Save the changes. With VLT check in the changes from the file system into the repository: 1. From the system command line navigate to <eclipse>/<workspace>/myApp/ui/ src/main/content/jcr_root. 2. Execute: vlt st to see the changes made on the file system. 3. Execute: vlt add apps/myApp/components/contentpage/contentpage.jsp to add the contentpage.jsp file to VLT control. 4. Execute: vlt ci to commit the contentpage.jsp file to the repository. From CQ5 create a page based on this template. Open the page to make sure it displays the following message: This is the contentpage component. Page 99 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Set Up the Development Environment with Eclipse Tip It is possible to define the VLT commands as External Tools in Eclipse. This enables you to run the VLT commands from within Eclipse. 19.1.6 Java Developing with Eclipse and CQ5 When editing Core code use the following sequence: • Create a Java class. • Compile the Java class. • Reference the jar file in the ui library. • Embed the Java Class logic into the JSP script. • Use VLT to check these changes to the JSP script (in the file system) into the repository. • Use VLT to deploy the jar file (with the compiled class) from the file system into the repository. The following example illustrates this process: 1. Create the Java class: 1. In Eclipse, under core/src/main/java, right-click the com.day.cq5.myapp package, select New, then Class. 2. In the dialog window, name the Java Class HelloPerson and click Finish. Eclipse creates and opens the file HelloPerson.java. 3. In HelloPerson.java replace the existing code with the following: package com.day.cq5.myapp; import com.day.cq.wcm.api.Page; public class HelloPerson { private Page personPage; public static final String PN_PERSON_NAME = "personName"; public HelloPerson(Page personPage) { this.personPage = personPage; } public String getHelloMessage() { String personName = personPage.getProperties().get(PN_PERSON_NAME).toString(); return personName != null ? personName : "--empty--"; } } 4. 2. 3. Save the changes. Compile the Java class: 1. Right-click the core project, select Run As, then Maven Install. 2. Make sure that a new file core-0.0.1-SNAPSHOT.jar (containing the compiled class) is created under core/target. Reference this jar file in the ui library to enable the code completion when accessing this class with the JSP script: Page 100 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Set Up the Development Environment with Eclipse 4. 1. In Eclipse, right-click the ui project, select Build Path, then Configure Build Path. In the dialog select the Libraries tab. 2. Click Add JARS... and navigate to core/target, select the core-0.0.1SNAPSHOT.jar file and click OK. 3. Click OK to close the dialog. Embed the Java Class logic into the JSP script: 1. In Eclipse, open the JSP script contentpage.jsp in ui/src/main/content/ jcr_root/apps/myApp/components/contentpage. 2. Replace the existing code with the following: <%@ page import="com.day.cq5.myapp.HelloPerson" %> <%@include file="/libs/wcm/global.jsp"%> <% HelloPerson hello = new HelloPerson(currentPage); String msg = hello.getHelloMessage(); %> Hello, <%= msg %>.</br></br> This is the contenpage component. 3. 5. 6. 7. Save the changes. With VTL check in the changes to the JSP script from the file system to the repository: 1. From the system command line navigate to <eclipse>/<workspace>/myApp/ui/ src/main/content/jcr_root. 2. Execute: vlt st to see the changes made on the file system. 3. Execute: vlt ci to commit the modified contentpage.jsp file to the repository. Deploy the jar file containing the compiled class from the file system into the repository with VLT: 1. In Eclipse, under core/target, copy the core-0.0.1-SNAPSHOT.jar file. 2. In Eclipse navigate to ui/scr/main/content/jcr_root/apps/myapp/install and paste the copied file. 3. From the system command line navigate to <eclipse>/<workspace>/myApp/ui/ src/main/content/jcr_root. 4. Execute: vlt st to see the changes made on the file system. 5. Execute: vlt add apps/myApp/install/core-0.0.1-SNAPSHOT.jar to add the jar file to VLT control. 6. Execute: vlt ci to commit the jar file to the repository. In your browser, refresh the CQ5 page to make sure it displays following message: Hello, myName. This is the contentpage component. 8. In CRX Explorer, change the value myName and make sure that the new value is displayed when you refresh the page. Page 101 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Set Up the Development Environment with Eclipse 19.1.7 Building collaborative and automated projects This section points to three open source softwares which enhance the development of CQ5 projects by adding collaboration and automation features: • Subversion (SVN) to manage a central repository where all the developers involved in the project can commit and retrieve the code and the content they generate on their local instance. • Apache Archiva to centrally store and retrieve the project libraries. • Apache Continuum to automate the build process. 19.1.7.1 Collaboration with Subversion (SVN) As the CQ5 repository can be mapped to your file system with VLT, it is now easy to set up a central repository with SVN. This is used by all developers in the project as a place they can commit, and retrieve, the code and content they generate on their local instances. The setup of an SVN server is not covered in this document as many tutorials are already available online. When VLT is in operation it creates .vlt files within the local directory structure. These .vlt files hold timestamps and other VLT-specific information that should not be checked into the SVN repository. This can be prevented by adding .vlt to the ignore list of the local SVN setup. To do this you add the following code to the local SVN setup file - settings.xml in the .subversion directory of your user's HOME directory: [miscellany] ### Set global-ignores to a set of whitespace-delimited globs ### which Subversion will ignore in its 'status' output, and ### while importing or adding files and directories. global-ignores = .vlt 19.1.7.2 Central dependency management with Apache Archiva Java libraries, called artifacts in Maven language, can be managed centrally through Apache Archiva, an artifact repository that is used to store and retrieve the project artifacts. The setup of Archiva is well detailed online and can be referenced during setup. The Archiva server requires little management outside that of configuring local developer accounts to obtain access to the snapshots and full releases. 19.1.7.3 Build automation with Apache Continuum Once the project content and code is centrally available through an SVN server, it is possible to automate the build process and run the build on a daily basis (for example a nightly build). This is done with Apache Continuum, a continuous integration server with the sole duty of providing build management of artifacts and releases. The setup of Continuum is also well detailed online. Page 102 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG 20 How to Model Data 20.1 Data Modeling - David Nuescheler's Model 20.1.1 Source The following details are ideas and comments expressed by David Nuescheler. David is co-founder and CTO of Day Software AG, a leading provider of global content management and content infrastructure software. He also leads the development of JSR-170, the Java Content Repository (JCR) application programming interface (API), the technology standard for content management. Further updates can also be seen on http://wiki.apache.org/jackrabbit/DavidsModel. 20.1.2 Introduction from David In various discussions I found that developers are somewhat at unease with the features and functionalities presented by JCR when it comes to content modeling. There is no guide and very little experience yet on how to model content in a repository and why one content model is better than the other. While in the relational world the software industry has a lot of experience on how to model data, we are still at the early stages for the content repository space. I would like to start filling this void by expressing my personal opinions on how content should be modeled, hoping that this could some day graduate into something more meaningful to the developers community, which is not just "my opinion" but something that is more generally applicable. So consider this my quickly evolving first stab at it. Important Disclaimer: These guidelines express my personal, sometimes controversial views. I am looking forward to debate these guidelines and refine them. 20.1.3 Seven Simple Rules 20.1.3.1 Rule #1: Data First, Structure Later. Maybe. 20.1.3.1.1 Explanation I recommend not to worry about a declared data structure in an ERD sense. Initially. Learn to love nt:unstructured (& friends) in development. I think Stefano pretty much sums this one up. My bottom-line: Structure is expensive and in many cases it is entirely unnecessary to explicitly declare structure to the underlying storage. There is an implicit contract about structure that your application inherently uses. Let's say I store the modification date of a blog post in a lastModified property. My App will automatically know to read the modification date from that same property again, there is really no need to declare that explicitly. Further data constraints like mandatory or type and value constraints should only be applied where required for data integrity reasons. Page 103 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Model Data 20.1.3.1.2 Example The above example of using a "lastModified" Date property on for example "blog post" node, really does not mean that there is a need for a special nodetype. I would definitely use "nt:unstructured" for my blog post nodes at least initially. Since in my blogging application all I am going to do is to display the lastModified date anyway (possibly "order by" it) I barely care if it is a Date at all. Since I implicitly trust my blog-writing application to put a "date" there anyway, there really is no need to declare the presence of a "lastModified" date in the form a of nodetype. 20.1.3.1.3 Discussion http://www.nabble.com/DM-Rule-#1:-Data-First,-Structure-Later.-Maybe.-tf4039967.html 20.1.3.2 Rule #2: Drive the content hierarchy, don't let it happen. 20.1.3.2.1 Explanation The content hierarchy is a very valuable asset. So don't just let it happen, design it. If you don't have a "good", human-readable name for a node, that's probably that you should reconsider. Arbitrary numbers are hardly ever a "good name". While it may be extremely easy to quickly put an existing relational model into a hierarchical model, one should put some thought in that process. In my experience if one thinks of access control and containment usually good drivers for the content hierarchy. Think of it as if it was your file system. Maybe even use files and folders to model it on your local disk. Personally I prefer hierarchy conventions over the nodetyping system in a lot of cases initially, and introduce the typing later. 20.1.3.2.2 Example I would model a simple blogging system as follows. Please note that initially I don't even care about the respective nodetypes that I use at this point. /content/myblog /content/myblog/posts /content/myblog/posts/what_i_learned_today /content/myblog/posts/iphone_shipping /content/myblog/comments/iphone_shipping/i_like_it_too /content/myblog/comments/iphone_shipping/i_like_it_too/i_hate_it I think one of the things that become apparent is that we all understand the structure of the content based on the example without any further explanations. What may be unexpected initially is why I wouldn't store the "comments" with the "post", which is due to access control which I would like to be applied in a reasonably hierarchical way. Using the above content model I can easily allow the "anonymous" user to "create" comments, but keep the anonymous user on a read-only basis for the rest of the workspace. 20.1.3.2.3 Discussion http://www.nabble.com/DM-Rule-#2:-Drive-the-content-hierarchy,-don't-let-it-happen.tf4039994.html 20.1.3.3 Rule #3: Workspaces are for clone(), merge() and update(). 20.1.3.3.1 Explanation If you don't use clone(), merge() or update() methods in your application a single workspace is probably the way to go. Page 104 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Model Data "Corresponding nodes" is a concept defined in the JCR spec. Essentially, it boils down to nodes that represent the same content, in different so-called workspaces. JCR introduces the very abstract concept of Workspaces which leaves a lot of developers unclear on what to do with them. I would like to propose to put your use of workspaces to the following to test. If you have a considerable overlap of "corresponding" nodes (essentially the nodes with the same UUID) in multiple workspaces you probably put workspaces to good use. If there is no overlap of nodes with the same UUID you are probably abusing workspaces. Workspaces should not be used for access control. Visibility of content for a particular group of users is not a good argument to separate things into different workspaces. JCR features "Access Control" in the content repository to provide for that. Workspaces are the boundary for references and query. 20.1.3.3.2 Example Use workspaces for things like: • v1.2 of your project vs. a v1.3 of your project • a "development", "QA" and a "published" state of content Do not use workspaces for things like: • user home directories • distinct content for different target audiences like public, private, local, ... • mail-inboxes for different users 20.1.3.3.3 Discussion http://www.nabble.com/DM-Rule-#3:-Workspaces-are-for-corresponding-nodes.-tf4040010.html 20.1.3.4 Rule #4: Beware of Same Name Siblings. 20.1.3.4.1 Explanation While Same Name Siblings (SNS) have been introduced into the spec to allow compatibility with data structures that are designed for and expressed through XML and therefore are extremely valuable to JCR, SNS come with a substantial overhead and complexity for the repository. Any path into the content repository that contains an SNS in one of its path segments becomes much less stable, if an SNS is removed or reordered, it has an impact on the paths of all the other SNS and their children. For import of XML or interaction with existing XML SNS maybe necessary and useful but I have never used SNS, and never will in my "green field" data models. 20.1.3.4.2 Example Use /content/myblog/posts/what_i_learned_today /content/myblog/posts/iphone_shipping instead of Page 105 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Model Data /content/blog[1]/post[1] /content/blog[1]/post[2] 20.1.3.4.3 Discussion http://www.nabble.com/DM-Rule-#4:-Beware-of-Same-Name-Siblings.-tf4040024.html 20.1.3.5 Rule #5: References considered harmful. 20.1.3.5.1 Explanation References imply referential integrity. I find it important to understand that references do not just add additional cost for the repository managing the referential integrity, but they also are costly from a content flexibility perspective. Personally I make sure I only ever use references when I really cannot deal with a dangling reference and otherwise use a path, a name or a string UUID to refer to another node. 20.1.3.5.2 Example Let's assume I allow "references" from a document (a) to another document (b). If I model this relation using reference properties this means that the two documents are linked on a repository level. I cannot export/import document (a) individually, since the reference property's target may not exist. Other operations like merge, update, restore or clone are affected as well. So I would either model those references as "weak-references" (in JCR v1.0 his essentially boils down to string properties that contain the uuid of the target node) or simply use a path. Sometimes the path is more meaningful to begin with. I think there are use cases where a system really can't work if a reference is dangling, but I just can't come up with a good "real" yet simple example from my direct experience. 20.1.3.5.3 Discussion http://www.nabble.com/DM-Rule-#5:-References-considered-harmful.-tf4040042.html 20.1.3.6 Rule #6: Files are Files are Files. 20.1.3.6.1 Explanation If a content model exposes something that even remotely smells like a file or a folder I try to use (or extend from) nt:file, nt:folder and nt:resource. In my experience a lot of generic applications allow interaction with nt:folder and nt:files implicitly and know how to handle and display those event if they are enriched with additional metainformation. For example a direct interaction with file server implementations like CIFS or WebDAV sitting on top of JCR become implicit. I think as good rule of thumb one could use the following: If you need to store the filename and the mime-type then nt:file/nt:resource is a very good match. If you could have multiple "files" an nt:folder is a good place to store them. If you need to add meta information for your resource, let's say an "author" or a "description" property, extend nt:resource not the nt:file. I rarely extend nt:file and frequently extend nt:resource. 20.1.3.6.2 Example Let's assume that someone would like to upload an image to a blog entry at: /content/myblog/posts/iphone_shipping Page 106 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Model Data and maybe the initial gut reaction would be to add a binary property containing the picture. While there certainly are good use cases to use just a binary property (let's say the name is irrelevant and the mime-type is implicit) in this case I would recommend the following structure for my blog example. /content/myblog/posts/iphone_shipping/attachments [nt:folder] /content/myblog/posts/iphone_shipping/attachments/front.jpg [nt:file] /content/myblog/posts/iphone_shipping/attachments/front.jpg/jcr:content [nt:resource] 20.1.3.6.3 Discussion http://www.nabble.com/DM-Rule-#6:-Files-are-Files-are-Files.-tf4040063.html 20.1.3.7 Rule #7: IDs are evil. 20.1.3.7.1 Explanation In relational databases IDs are a necessary means to express relations, so people tend to use them in content models as well. Mostly for the wrong reasons through. If your content model is full of properties that end in "Id" you probably are not leveraging the hierarchy properly. It is true that some nodes need a stable identification throughout their live cycle. Much fewer than you might think though. mix:referenceable provides such a mechanism built into the repository, so there really is no need to come up with an additional means of identifying a node in a stable fashion. Keep also in mind that items can be identified by path, and as much as "symlinks" make way more sense for most users than hardlinks in a unix filesystem, a path makes a sense for most applications to refer to a target node. More importantly, it is **mix**:referenceable which means that it can be applied to a node at the point in time when you actually need to reference it. So let's say just because you would like to be able to potentially reference a node of type "Document" does not mean that your "Document" nodetype has to extend from mix:referenceable in a static fashion since it can be added to any instance of the "Document" dynamically. 20.1.3.7.2 Example use: /content/myblog/posts/iphone_shipping/attachments/front.jpg instead of: [Blog] - blogId - author [Post] - postId - blogId - title - text - date [Attachment] - attachmentId - postId - filename Page 107 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG How to Model Data + resource (nt:resource) 20.1.3.7.3 Discussion http://www.nabble.com/DM-Rule-#7:-IDs-are-evil.-tf4040076.html Page 108 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG 21 JSP Tag Libraries 21.1 JSP Tag Libraries The CQ and Sling tab libraries give you access to specific functions for use in the JSP script of your templates and components. 21.1.1 CQ Tag Library The CQ tag library contains helpful CQ functions. To use the CQ Tag Library in your script, the script must start with the following code: <%@taglib prefix="cq" uri="http://www.day.com/taglibs/cq/1.0" %> Note When the /libs/wcm/global.jsp file is included in the script, the cq taglib is automatically declared. Tip When you develop the jsp script of a CQ5 component, it is recommended to include following code at the top of the script: <%@include file="/libs/wcm/global.jsp"%> It declares the sling, cq and jstl taglibs and exposes the regularly used scripting objects defined by the <cq:defineObjects /> tag. This shortens and simplifies the jsp code of your component. 21.1.1.1 <cq:setContentBundle> The <cq:setContentBundle> tag creates an i18n localization context and stores it in the javax.servlet.jsp.jstl.fmt.localizationContext configuration variable. It has the following attribute: language The language of the locale for which to retrieve the resource bundle. The "content bundle" can be simply used by standard JSTL <fmt:message> tags. The lookup of messages by keys is two-fold: 1. First, the JCR properties of the underlying resource that is currently rendered are searched for translations. This allows you to define a simple component dialog to edit those values. 2. If the node does not contain a property named exactly like the key, the fallback is to load a resource bundle from the sling request (SlingHttpServletRequest.getResourceBundle(Locale)). The language or locale for this bundle is defined this way: a. First, if the parameter language of the<cq:setContentBundle> tag is set, this is used. b. Otherwise, the locale of the page is looked up. This is taken from the page path (eg. the path /content/site/en/some/page produces the "en" locale). Example: <%@include file="/libs/wcm/global.jsp"%><% Page 109 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG JSP Tag Libraries %><%@ page import="com.day.cq.wcm.foundation.forms.ValidationInfo, com.day.cq.wcm.foundation.forms.FormsConstants, com.day.cq.wcm.foundation.forms.FormsHelper, org.apache.sling.api.resource.Resource, org.apache.sling.api.resource.ResourceUtil, org.apache.sling.api.resource.ValueMap" %><% %><cq:setContentBundle/> 21.1.1.2 <cq:include> The <cq:include> tag includes a resource into the current page. It has the following attributes: flush A boolean defining whether to flush the output before including the target. path The path to the resource object to be included in the current request processing. If this path is relative it is appended to the path of the current resource whose script is including the given resource. Either path and resourceType, or script must be specified. resourceType The resource type of the resource to be included. If the resource type is set, the path must be the exact path to a resource object: in this case, adding parameters, selectors and extensions to the path is not supported. If the resource to be included is specified with the path attribute that cannot be resolved to a resource, the tag may create a synthetic resource object out of the path and this resource type. Either path and resourceType, or script must be specified. script The jsp script to include. Either path and resourceType, or script must be specified. ignoreComponentHierarchy A boolean controlling whether the component hierarchy should be ignored for script resolution. If true, only the search paths are respected. Example: <%@taglib prefix="cq" uri="http://www.day.com/taglibs/cq/1.0" %><% %><div class="center"> <cq:include path="trail" resourceType="foundation/components/breadcrumb" /> <cq:include path="title" resourceType="foundation/components/title" /> <cq:include script="redirect.jsp"/> <cq:include path="par" resourceType="foundation/components/parsys" /> </div> Note Should you use <%@ include file="myScript.jsp" %> or <cq:include script="myScript.jsp" %> to include a script? • The <%@ include file="myScript.jsp" %> directive informs the JSP compiler to include a complete file into the current file. It is as if the contents of the included file were pasted directly into the original file. • With the <cq:include script="myScript.jsp" %> directive, the file is included at runtime. Note Should you use <cq:include> or <sling:include>? Page 110 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG JSP Tag Libraries • When developing CQ5 components, Day recommends that you use <cq:include>. • <cq:include> allows you to directly include script files by their name when using the script attribute. This takes component and resource type inheritance into account, and is often simpler than strict adherence to Sling's script resolution using selectors and extensions. 21.1.1.3 <cq:defineObjects> The <cq:defineObjects> tag exposes the following, regularly used, scripting objects which can be referenced by the developer. It also exposes the objects defined by the <sling:defineObjects> tag. componentContext the current component context object of the request (com.day.cq.wcm.api.components.ComponentContext interface). component the current CQ5 component object of the current resource (com.day.cq.wcm.api.components.Component interface). currentDesign the current design object of the current page (com.day.cq.wcm.api.designer.Design interface). currentPage the current CQ WCM page object (com.day.cq.wcm.api.Page interface). currentStyle the current style object of the current cell (com.day.cq.wcm.api.designer.Style interface). designer the designer object used to access design information (com.day.cq.wcm.api.designer.Designer interface). editContext the edit context object of the CQ5 component (com.day.cq.wcm.api.components.EditContext interface). pageManager the page manager object for page level operations (com.day.cq.wcm.api.PageManager interface). pageProperties the page properties object of the current page (org.apache.sling.api.resource.ValueMap). properties the properties object of the current resource (org.apache.sling.api.resource.ValueMap). resourceDesign the design object of the resource page (com.day.cq.wcm.api.designer.Design interface). resourcePage the resource page object (com.day.cq.wcm.api.Page interface). It has the following attributes: requestName inherited from sling responseName inherited from sling Page 111 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG JSP Tag Libraries resourceName inherited from sling nodeName inherited from sling logName inherited from sling resourceResolverName inherited from sling slingName inherited from sling componentContextName specific to wcm editContextName specific to wcm propertiesName specific to wcm pageManagerName specific to wcm currentPageName specific to wcm resourcePageName specific to wcm pagePropertiesName specific to wcm componentName specific to wcm designerName specific to wcm currentDesignName specific to wcm resourceDesignName specific to wcm currentStyleName specific to wcm Example: <%@page session="false" contentType="text/html; charset=utf-8" %><% %><%@ page import="com.day.cq.wcm.api.WCMMode" %><% %><%@taglib prefix="cq" uri="http://www.day.com/taglibs/cq/1.0" %><% %><cq:defineObjects/> Note When the /libs/wcm/global.jsp file is included in the script, the <cq:defineObjects / > tag is automatically included. Page 112 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG JSP Tag Libraries 21.1.1.4 <cq:requestURL> The <cq:requestURL> tag writes the current request URL to the JspWriter. The two tags <cq:addParam> and <cq:removeParam> may be used inside the body of this tag to modify the current request URL before it is written. It allows you to create links to the current page with varying parameters. For example, it enables you to transform the request: mypage.html?mode=view&query=something into mypage.html?query=something. The use of addParam or removeParam only changes the occurence of the given parameter, all other parameters are unaffected. <cq:requestURL> does not have any attribute. Examples: <a href="<cq:requestURL><cq:removeParam name="language"/></cq:requestURL>">remove filter</ a> <a title="filter results" href="<cq:requestURL><cq:addParam name="language" value="${bucket.value}"/></cq:requestURL>">${label} (${bucket.count})</a> 21.1.1.5 <cq:addParam> The <cq:addParam> tag adds a request parameter with the given name and value to the enclosing <cq:requestURL> tag. It has the following attributes: name name of the parameter to be added value value of the parameter to be added Example: <a title="filter results" href="<cq:requestURL><cq:addParam name="language" value="${bucket.value}"/></cq:requestURL>">${label} (${bucket.count})</a> 21.1.1.6 <cq:removeParam> The <cq:removeParam> tag removes a request parameter with the given name and value from the enclosing <cq:requestURL> tag. If no value is provided all parameters with the given name are removed. It has the following attributes: name name of the parameter to be removed Example: <a href="<cq:requestURL><cq:removeParam name="language"/></cq:requestURL>">remove filter</ a> 21.1.2 Sling Tag Library The Sling tag library contains helpful Sling functions. Page 113 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG JSP Tag Libraries When you use the Sling Tag Library in your script, the script must start with the following code: <%@ taglib prefix="sling" uri="http://sling.apache.org/taglibs/sling/1.0" %> Note When the /libs/wcm/global.jsp file is included in the script, the sling taglib is automatically declared. 21.1.2.1 <sling:include> The <sling:include> tag includes a resource into the current page. It has the following attributes: flush A boolean defining whether to flush the output before including the target. resource The resource object to be included in the current request processing. Either resource or path must be specified. If both are specified, the resource takes precedence. path The path to the resource object to be included in the current request processing. If this path is relative it is appended to the path of the current resource whose script is including the given resource. Either resource or path must be specified. If both are specified, the resource takes precedence. resourceType The resource type of the resource to be included. If the resource type is set, the path must be the exact path to a resource object: in this case, adding parameters, selectors and extensions to the path is not supported. If the resource to be included is specified with the path attribute that cannot be resolved to a resource, the tag may create a synthetic resource object out of the path and this resource type. replaceSelectors When dispatching, the selectors are replaced with the value of this attribute. addSelectors When dispatching, the value of this attribute is added to the selectors. replaceSuffix When dispatching, the suffix is replaced by the value of this attribute. Note The resolution of the resource and the script that are included with the <sling:include> tag is the same as for a normal sling URL resolution. By default, the selectors, extension, etc. from the current request are used for the included script as well. They can be modified through the tag attributes: for example replaceSelectors="foo.bar" allows you to overwrite the selectors. Examples: <div class="item"><sling:include path="<%= pathtoinclude %>"/></div> <sling:include resource="<%= par %>"/> <sling:include addSelectors="spool"/> Page 114 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG JSP Tag Libraries <sling:include resource="<%= par %>" resourceType="<%= newType %>"/> <sling:include replaceSelectors="content" /> 21.1.2.2 <sling:defineObjects> The <sling:defineObjects> tag exposes the following, regularly used, scripting objects which can be referenced by the developer: slingRequest SlingHttpServletRequest object, providing access to the HTTP request header information extends the standard HttpServletRequest - and provides access to Sling-specific things like resource, path info, selector, etc. slingResponse SlingHttpServletResponse object, providing access for the HTTP response that is created by the server. This is currently the same as the HttpServletResponse from which it extends. request The standard JSP request object which is a pure HttpServletRequest. response The standard JSP response object which is a pure HttpServletResponse. resourceResolver The current ResourceResolver object. It is the same as slingRequest.getResourceResolver(). sling A SlingScriptHelper object, containing convenience methods for scripts, mainly sling.include('/ some/other/resource') for including the responses of other resources inside this response (eg. embedding header html snippets) and sling.getService(foo.bar.Service.class) to retrieve OSGi services available in Sling (Class notation depending on scripting language). resource the current Resource object to handle, depending on the URL of the request. It is the same as slingRequest.getResource(). currentNode If the current resource points to a JCR node (which is typically the case in Sling), this gives direct access to the Node object. Otherwise this object is not defined. log Provides an SLF4J Logger for logging to the Sling log system from within scripts, eg. log.info("Executing my script"). It has the following attributes: requestName responseName resourceName nodeName logName resourceResolverName slingName Page 115 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG JSP Tag Libraries Example: <%@page session="false" %><% %><%@page import="com.day.cq.wcm.foundation.forms.ValidationHelper"%><% %><%@taglib prefix="sling" uri="http://sling.apache.org/taglibs/sling/1.0" %><% %><sling:defineObjects/> Page 116 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG Appendix A. Copyright, Licenses and Formatting Conventions For all copyright statements and license agreements see Copyright, Licenses and Disclaimers. A.1 Formatting Conventions The following tables detail formatting conventions used within this guide: Table A.1. Formatting Conventions - Text Style Description Example Cross-reference Cross-reference to external documents. See the Microsoft Manual of Style for Technical Publications. GUI Item User interface items. Click Save. Keyboard shortcut Keyboard shortcuts. Press Ctrl+A. Mouse Button Mouse buttons. Secondary-mouse button (usually the right-mouse button). Link Link to anchor-points within the current document and/or external sources. http://www.day.com Code Example of programming code. if (weather == sunny) smile; User Input Example of text, or commands, that you type. <Variable User Input> Example of variable text - you type the actual value needed. ls <cq-installation-dir> [Optional Parameter] An optional parameter. ls [<option>] [<filename>] Computer Output Logging and error messages. ls *.xml ls: cannot access error.log: Table A.2. Formatting Conventions - Actions When you see this... It means do this... Ctrl+A Hold down the Ctrl key, then press the A key. Right-click Press the right-mouse button (or the left-mouse button if your mouse has been configured for left-handed use). Drag Hold down the left mouse button while moving the item, then release the mouse button at the new location (or the right mouse button if your mouse has been configured for left-handed use). Page 117 of 117 CQ 5.1 WCM Copyright 1993-2008 Day Management AG