blob: 3ebaa5432021b2de14437e1fb530e10185cbdd4a [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta content="Apache Forrest" name="Generator">
<meta name="Forrest-version" content="0.9-dev">
<meta name="Forrest-skin-name" content="pelt">
<title>Production Checklist</title>
<link type="text/css" href="../../../skin/basic.css" rel="stylesheet">
<link media="screen" type="text/css" href="../../../skin/screen.css" rel="stylesheet">
<link media="print" type="text/css" href="../../../skin/print.css" rel="stylesheet">
<link type="text/css" href="../../../skin/profile.css" rel="stylesheet">
<script src="../../../skin/getBlank.js" language="javascript" type="text/javascript"></script><script src="../../../skin/getMenu.js" language="javascript" type="text/javascript"></script><script src="../../../skin/fontsize.js" language="javascript" type="text/javascript"></script>
<link rel="shortcut icon" href="../../../favicon.ico">
</head>
<body onload="init()">
<script type="text/javascript">ndeSetTextSize();</script>
<div id="top">
<!--+
|breadtrail
+-->
<div class="breadtrail">
<a href="http://www.apache.org/">apache</a> &gt; <a href="http://lenya.apache.org/">lenya</a><script src="../../../skin/breadcrumbs.js" language="JavaScript" type="text/javascript"></script>
</div>
<!--+
|header
+-->
<div class="header">
<!--+
|start group logo
+-->
<div class="grouplogo">
<a href=""><img class="logoImage" alt="Lenya" src="../../../images/apache-lenya-light.png" title=""></a>
</div>
<!--+
|end group logo
+-->
<!--+
|start Project Logo
+-->
<div class="projectlogo">
<a href=""></a>
</div>
<!--+
|end Project Logo
+-->
<!--+
|start Search
+-->
<div class="searchbox">
<form action="http://www.google.com/search" method="get" class="roundtopsmall">
<input value="lenya.apache.org" name="sitesearch" type="hidden"><input onFocus="getBlank (this, 'Search the site with ');" size="25" name="q" id="query" type="text" value="Search the site with ">&nbsp;
<input name="Search" value="Search" type="submit">
</form>
</div>
<!--+
|end search
+-->
<!--+
|start Tabs
+-->
<ul id="tabs">
<li>
<a class="unselected" href="../../../index.html">Project</a>
</li>
<li>
<a class="unselected" href="../../../docs/index.html">Developer</a>
</li>
<li>
<a class="unselected" href="../../../community/index.html">Community</a>
</li>
<li class="current">
<a class="selected" href="../../../docs/2_0_x/index.html">Version 2.0</a>
</li>
<li>
<a class="unselected" href="../../../docs/1_2_x/index.html">Version 1.2</a>
</li>
</ul>
<!--+
|end Tabs
+-->
</div>
</div>
<div id="main">
<div id="publishedStrip">
<!--+
|start Subtabs
+-->
<div id="level2tabs"></div>
<!--+
|end Endtabs
+-->
<script type="text/javascript"><!--
document.write("Last Published: " + document.lastModified);
// --></script>
</div>
<!--+
|breadtrail
+-->
<div class="breadtrail">
&nbsp;
</div>
<!--+
|start Menu, mainarea
+-->
<!--+
|start Menu
+-->
<div id="menu">
<div onclick="SwitchMenu('menu_selected_1.1', '../../../skin/')" id="menu_selected_1.1Title" class="menutitle" style="background-image: url('../../../skin/images/chapter_open.gif');">Version 2.0</div>
<div id="menu_selected_1.1" class="selectedmenuitemgroup" style="display: block;">
<div class="menuitem">
<a href="../../../docs/2_0_x/index.html">Index</a>
</div>
<div class="menuitem">
<a href="../../../docs/2_0_x/faq.html">FAQs</a>
</div>
<div onclick="SwitchMenu('menu_1.1.3', '../../../skin/')" id="menu_1.1.3Title" class="menutitle">Installation</div>
<div id="menu_1.1.3" class="menuitemgroup">
<div class="menuitem">
<a href="../../../docs/2_0_x/installation/index.html">Download</a>
</div>
<div class="menuitem">
<a href="../../../docs/2_0_x/installation/subversion.html">Subversion Access</a>
</div>
<div class="menuitem">
<a href="../../../docs/2_0_x/installation/source_version.html">Install Instructions</a>
</div>
</div>
<div onclick="SwitchMenu('menu_selected_1.1.4', '../../../skin/')" id="menu_selected_1.1.4Title" class="menutitle" style="background-image: url('../../../skin/images/chapter_open.gif');">Tutorials</div>
<div id="menu_selected_1.1.4" class="selectedmenuitemgroup" style="display: block;">
<div class="menuitem">
<a href="../../../docs/2_0_x/tutorials/newpublication/index.html">Create a Publication</a>
</div>
<div onclick="SwitchMenu('menu_1.1.4.2', '../../../skin/')" id="menu_1.1.4.2Title" class="menutitle">Create a Resource Type</div>
<div id="menu_1.1.4.2" class="menuitemgroup">
<div class="menuitem">
<a href="../../../docs/2_0_x/tutorials/resourcetype/part1.html">Declaration</a>
</div>
<div class="menuitem">
<a href="../../../docs/2_0_x/tutorials/resourcetype/part2.html">Creation</a>
</div>
<div class="menuitem">
<a href="../../../docs/2_0_x/tutorials/resourcetype/part3.html">Presentation</a>
</div>
<div class="menuitem">
<a href="../../../docs/2_0_x/tutorials/resourcetype/part4.html">Editing (One-Form)</a>
</div>
<div class="menuitem">
<a href="../../../docs/2_0_x/tutorials/resourcetype/part5.html">Editing (BXE)</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.4.3', '../../../skin/')" id="menu_1.1.4.3Title" class="menutitle">Implement a Usecase</div>
<div id="menu_1.1.4.3" class="menuitemgroup">
<div class="menuitem">
<a href="../../../docs/2_0_x/tutorials/usecase/part1.html">Prerequisites</a>
</div>
<div class="menuitem">
<a href="../../../docs/2_0_x/tutorials/usecase/part2.html">The Usecase</a>
</div>
</div>
<div class="menuitem">
<a href="../../../docs/2_0_x/tutorials/setupide/index.html">Setting up Eclipse</a>
</div>
<div onclick="SwitchMenu('menu_1.1.4.5', '../../../skin/')" id="menu_1.1.4.5Title" class="menutitle">Proxying</div>
<div id="menu_1.1.4.5" class="menuitemgroup">
<div class="menuitem">
<a href="../../../docs/2_0_x/tutorials/proxy/proxying.html">Proxying</a>
</div>
<div class="menuitem">
<a href="../../../docs/2_0_x/tutorials/proxy/proxy.html">mod_proxy</a>
</div>
<div class="menuitem">
<a href="../../../docs/2_0_x/tutorials/proxy/mod_proxy_ajp.html">mod_proxy_ajp</a>
</div>
</div>
<div class="menuitem">
<a href="../../../docs/2_0_x/tutorials/bestpractises.html">Best Practises</a>
</div>
<div class="menupage">
<div class="menupagetitle">Production Checklist</div>
</div>
<div class="menuitem">
<a href="../../../docs/2_0_x/tutorials/tests.html">Writing Tests</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.5', '../../../skin/')" id="menu_1.1.5Title" class="menutitle">Concepts</div>
<div id="menu_1.1.5" class="menuitemgroup">
<div class="menuitem">
<a href="../../../docs/2_0_x/concepts/publication.html">Publication</a>
</div>
<div class="menuitem">
<a href="../../../docs/2_0_x/concepts/documents.html">Working with Documents</a>
</div>
<div class="menuitem">
<a href="../../../docs/2_0_x/concepts/authoring_live.html">Authoring and Live mode</a>
</div>
<div class="menuitem">
<a href="../../../docs/2_0_x/concepts/wysiwyg.html">WYSIWYG</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.6', '../../../skin/')" id="menu_1.1.6Title" class="menutitle">Technical Reference</div>
<div id="menu_1.1.6" class="menuitemgroup">
<div class="menuitem">
<a href="../../../docs/2_0_x/reference/lenya-sitemaps.html">Overview of Lenya Sitemaps</a>
</div>
<div class="menuitem">
<a href="../../../docs/2_0_x/reference/repository/index.html">Repository</a>
</div>
<div class="menuitem">
<a href="../../../docs/2_0_x/reference/ac.html">Access Control Specification</a>
</div>
<div onclick="SwitchMenu('menu_1.1.6.4', '../../../skin/')" id="menu_1.1.6.4Title" class="menutitle">Usecase Framework</div>
<div id="menu_1.1.6.4" class="menuitemgroup">
<div class="menuitem">
<a href="../../../docs/2_0_x/reference/usecase-framework/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../docs/2_0_x/reference/usecase-framework/abstractusecase.html">AbstractUsecase</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.6.5', '../../../skin/')" id="menu_1.1.6.5Title" class="menutitle">Publications</div>
<div id="menu_1.1.6.5" class="menuitemgroup">
<div class="menuitem">
<a href="../../../docs/2_0_x/reference/publication/configuration.html">Configuration</a>
</div>
<div class="menuitem">
<a href="../../../docs/2_0_x/reference/publication/publication-templating/index.html">Publication Templating</a>
</div>
</div>
<div class="menuitem">
<a href="../../../docs/2_0_x/reference/resource-types.html">Resource Types</a>
</div>
<div class="menuitem">
<a href="../../../docs/2_0_x/reference/modules/index.html">Modules</a>
</div>
<div class="menuitem">
<a href="../../../docs/2_0_x/reference/metadata.html">Meta data</a>
</div>
<div onclick="SwitchMenu('menu_1.1.6.9', '../../../skin/')" id="menu_1.1.6.9Title" class="menutitle">Protocols</div>
<div id="menu_1.1.6.9" class="menuitemgroup">
<div class="menuitem">
<a href="../../../docs/2_0_x/reference/protocols/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../docs/2_0_x/reference/protocols/lenya.html">lenya Protocol</a>
</div>
<div class="menuitem">
<a href="../../../docs/2_0_x/reference/protocols/lenya-document.html">lenya-document Protocol</a>
</div>
<div class="menuitem">
<a href="../../../docs/2_0_x/reference/protocols/site.html">site Protocol</a>
</div>
<div class="menuitem">
<a href="../../../docs/2_0_x/reference/protocols/lenyadoc.html">lenyadoc Protocol</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.6.10', '../../../skin/')" id="menu_1.1.6.10Title" class="menutitle">URLs and Links</div>
<div id="menu_1.1.6.10" class="menuitemgroup">
<div class="menuitem">
<a href="../../../docs/2_0_x/reference/urlMapping.html">URL Mapping</a>
</div>
<div class="menuitem">
<a href="../../../docs/2_0_x/reference/link-management.html">Link Management</a>
</div>
</div>
</div>
<div class="menuitem">
<a href="../../../apidocs/2.0/index.html">Core API</a>
</div>
<div onclick="SwitchMenu('menu_1.1.8', '../../../skin/')" id="menu_1.1.8Title" class="menutitle">Core Modules</div>
<div id="menu_1.1.8" class="menuitemgroup">
<div onclick="SwitchMenu('menu_1.1.8.1', '../../../skin/')" id="menu_1.1.8.1Title" class="menutitle">ac</div>
<div id="menu_1.1.8.1" class="menuitemgroup">
<div class="menuitem">
<a href="../../../docs/modules/ac/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../apidocs/2.0/modules/ac/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.8.2', '../../../skin/')" id="menu_1.1.8.2Title" class="menutitle">acusecases</div>
<div id="menu_1.1.8.2" class="menuitemgroup">
<div class="menuitem">
<a href="../../../docs/modules/acusecases/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../apidocs/2.0/modules/acusecases/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.8.3', '../../../skin/')" id="menu_1.1.8.3Title" class="menutitle">administration</div>
<div id="menu_1.1.8.3" class="menuitemgroup">
<div class="menuitem">
<a href="../../../docs/modules/administration/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../apidocs/2.0/modules/administration/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.8.4', '../../../skin/')" id="menu_1.1.8.4Title" class="menutitle">cache</div>
<div id="menu_1.1.8.4" class="menuitemgroup">
<div class="menuitem">
<a href="../../../docs/modules/cache/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../apidocs/2.0/modules/cache/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.8.5', '../../../skin/')" id="menu_1.1.8.5Title" class="menutitle">janitor</div>
<div id="menu_1.1.8.5" class="menuitemgroup">
<div class="menuitem">
<a href="../../../docs/modules/janitor/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../apidocs/2.0/modules/janitor/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.8.6', '../../../skin/')" id="menu_1.1.8.6Title" class="menutitle">ldap</div>
<div id="menu_1.1.8.6" class="menuitemgroup">
<div class="menuitem">
<a href="../../../docs/modules/ldap/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../apidocs/2.0/modules/ldap/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.8.7', '../../../skin/')" id="menu_1.1.8.7Title" class="menutitle">linking</div>
<div id="menu_1.1.8.7" class="menuitemgroup">
<div class="menuitem">
<a href="../../../docs/modules/linking/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../apidocs/2.0/modules/linking/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.8.8', '../../../skin/')" id="menu_1.1.8.8Title" class="menutitle">observation</div>
<div id="menu_1.1.8.8" class="menuitemgroup">
<div class="menuitem">
<a href="../../../docs/modules/observation/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../apidocs/2.0/modules/observation/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.8.9', '../../../skin/')" id="menu_1.1.8.9Title" class="menutitle">properties</div>
<div id="menu_1.1.8.9" class="menuitemgroup">
<div class="menuitem">
<a href="../../../docs/modules/properties/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../apidocs/2.0/modules/properties/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.8.10', '../../../skin/')" id="menu_1.1.8.10Title" class="menutitle">sitemanagement</div>
<div id="menu_1.1.8.10" class="menuitemgroup">
<div class="menuitem">
<a href="../../../docs/modules/sitemanagement/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../apidocs/2.0/modules/sitemanagement/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.8.11', '../../../skin/')" id="menu_1.1.8.11Title" class="menutitle">templating</div>
<div id="menu_1.1.8.11" class="menuitemgroup">
<div class="menuitem">
<a href="../../../docs/modules/templating/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../apidocs/2.0/modules/templating/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.8.12', '../../../skin/')" id="menu_1.1.8.12Title" class="menutitle">usecase</div>
<div id="menu_1.1.8.12" class="menuitemgroup">
<div class="menuitem">
<a href="../../../docs/modules/usecase/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../apidocs/2.0/modules/usecase/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.8.13', '../../../skin/')" id="menu_1.1.8.13Title" class="menutitle">workflow</div>
<div id="menu_1.1.8.13" class="menuitemgroup">
<div class="menuitem">
<a href="../../../docs/modules/workflow/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../apidocs/2.0/modules/workflow/index.html">API</a>
</div>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9', '../../../skin/')" id="menu_1.1.9Title" class="menutitle">Standard Modules</div>
<div id="menu_1.1.9" class="menuitemgroup">
<div onclick="SwitchMenu('menu_1.1.9.1', '../../../skin/')" id="menu_1.1.9.1Title" class="menutitle">blog</div>
<div id="menu_1.1.9.1" class="menuitemgroup">
<div class="menuitem">
<a href="../../../docs/modules/blog/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../apidocs/2.0/modules/blog/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.2', '../../../skin/')" id="menu_1.1.9.2Title" class="menutitle">bxe</div>
<div id="menu_1.1.9.2" class="menuitemgroup">
<div class="menuitem">
<a href="../../../docs/modules/bxe/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../apidocs/2.0/modules/bxe/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.3', '../../../skin/')" id="menu_1.1.9.3Title" class="menutitle">cforms</div>
<div id="menu_1.1.9.3" class="menuitemgroup">
<div class="menuitem">
<a href="../../../docs/modules/cforms/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../apidocs/2.0/modules/cforms/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.4', '../../../skin/')" id="menu_1.1.9.4Title" class="menutitle">collection</div>
<div id="menu_1.1.9.4" class="menuitemgroup">
<div class="menuitem">
<a href="../../../docs/modules/collection/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../apidocs/2.0/modules/collection/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.5', '../../../skin/')" id="menu_1.1.9.5Title" class="menutitle">contactform</div>
<div id="menu_1.1.9.5" class="menuitemgroup">
<div class="menuitem">
<a href="../../../docs/modules/contactform/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../apidocs/2.0/modules/contactform/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.6', '../../../skin/')" id="menu_1.1.9.6Title" class="menutitle">development</div>
<div id="menu_1.1.9.6" class="menuitemgroup">
<div class="menuitem">
<a href="../../../docs/modules/development/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../apidocs/2.0/modules/development/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.7', '../../../skin/')" id="menu_1.1.9.7Title" class="menutitle">editors</div>
<div id="menu_1.1.9.7" class="menuitemgroup">
<div class="menuitem">
<a href="../../../docs/modules/editors/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../apidocs/2.0/modules/editors/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.8', '../../../skin/')" id="menu_1.1.9.8Title" class="menutitle">export</div>
<div id="menu_1.1.9.8" class="menuitemgroup">
<div class="menuitem">
<a href="../../../docs/modules/export/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../apidocs/2.0/modules/export/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.9', '../../../skin/')" id="menu_1.1.9.9Title" class="menutitle">fckeditor</div>
<div id="menu_1.1.9.9" class="menuitemgroup">
<div class="menuitem">
<a href="../../../docs/modules/fckeditor/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../apidocs/2.0/modules/fckeditor/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.10', '../../../skin/')" id="menu_1.1.9.10Title" class="menutitle">kupu</div>
<div id="menu_1.1.9.10" class="menuitemgroup">
<div class="menuitem">
<a href="../../../docs/modules/kupu/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../apidocs/2.0/modules/kupu/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.11', '../../../skin/')" id="menu_1.1.9.11Title" class="menutitle">languageselector</div>
<div id="menu_1.1.9.11" class="menuitemgroup">
<div class="menuitem">
<a href="../../../docs/modules/languageselector/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../apidocs/2.0/modules/languageselector/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.12', '../../../skin/')" id="menu_1.1.9.12Title" class="menutitle">lenyadoc</div>
<div id="menu_1.1.9.12" class="menuitemgroup">
<div class="menuitem">
<a href="../../../docs/modules/lenyadoc/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../apidocs/2.0/modules/lenyadoc/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.13', '../../../skin/')" id="menu_1.1.9.13Title" class="menutitle">linkcheck</div>
<div id="menu_1.1.9.13" class="menuitemgroup">
<div class="menuitem">
<a href="../../../docs/modules/linkcheck/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../apidocs/2.0/modules/linkcheck/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.14', '../../../skin/')" id="menu_1.1.9.14Title" class="menutitle">links</div>
<div id="menu_1.1.9.14" class="menuitemgroup">
<div class="menuitem">
<a href="../../../docs/modules/links/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../apidocs/2.0/modules/links/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.15', '../../../skin/')" id="menu_1.1.9.15Title" class="menutitle">lucene</div>
<div id="menu_1.1.9.15" class="menuitemgroup">
<div class="menuitem">
<a href="../../../docs/modules/lucene/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../apidocs/2.0/modules/lucene/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.16', '../../../skin/')" id="menu_1.1.9.16Title" class="menutitle">migration</div>
<div id="menu_1.1.9.16" class="menuitemgroup">
<div class="menuitem">
<a href="../../../docs/modules/migration/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../apidocs/2.0/modules/migration/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.17', '../../../skin/')" id="menu_1.1.9.17Title" class="menutitle">neutron</div>
<div id="menu_1.1.9.17" class="menuitemgroup">
<div class="menuitem">
<a href="../../../docs/modules/neutron/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../apidocs/2.0/modules/neutron/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.18', '../../../skin/')" id="menu_1.1.9.18Title" class="menutitle">news</div>
<div id="menu_1.1.9.18" class="menuitemgroup">
<div class="menuitem">
<a href="../../../docs/modules/news/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../apidocs/2.0/modules/news/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.19', '../../../skin/')" id="menu_1.1.9.19Title" class="menutitle">notification</div>
<div id="menu_1.1.9.19" class="menuitemgroup">
<div class="menuitem">
<a href="../../../docs/modules/notification/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../apidocs/2.0/modules/notification/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.20', '../../../skin/')" id="menu_1.1.9.20Title" class="menutitle">opendocument</div>
<div id="menu_1.1.9.20" class="menuitemgroup">
<div class="menuitem">
<a href="../../../docs/modules/opendocument/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../apidocs/2.0/modules/opendocument/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.21', '../../../skin/')" id="menu_1.1.9.21Title" class="menutitle">prettyprinting</div>
<div id="menu_1.1.9.21" class="menuitemgroup">
<div class="menuitem">
<a href="../../../docs/modules/prettyprinting/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../apidocs/2.0/modules/prettyprinting/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.22', '../../../skin/')" id="menu_1.1.9.22Title" class="menutitle">profiling</div>
<div id="menu_1.1.9.22" class="menuitemgroup">
<div class="menuitem">
<a href="../../../docs/modules/profiling/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../apidocs/2.0/modules/profiling/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.23', '../../../skin/')" id="menu_1.1.9.23Title" class="menutitle">resource</div>
<div id="menu_1.1.9.23" class="menuitemgroup">
<div class="menuitem">
<a href="../../../docs/modules/resource/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../apidocs/2.0/modules/resource/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.24', '../../../skin/')" id="menu_1.1.9.24Title" class="menutitle">simplesite</div>
<div id="menu_1.1.9.24" class="menuitemgroup">
<div class="menuitem">
<a href="../../../docs/modules/simplesite/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../apidocs/2.0/modules/simplesite/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.25', '../../../skin/')" id="menu_1.1.9.25Title" class="menutitle">sitetree</div>
<div id="menu_1.1.9.25" class="menuitemgroup">
<div class="menuitem">
<a href="../../../docs/modules/sitetree/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../apidocs/2.0/modules/sitetree/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.26', '../../../skin/')" id="menu_1.1.9.26Title" class="menutitle">sourcerepository</div>
<div id="menu_1.1.9.26" class="menuitemgroup">
<div class="menuitem">
<a href="../../../docs/modules/sourcerepository/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../apidocs/2.0/modules/sourcerepository/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.27', '../../../skin/')" id="menu_1.1.9.27Title" class="menutitle">svg</div>
<div id="menu_1.1.9.27" class="menuitemgroup">
<div class="menuitem">
<a href="../../../docs/modules/svg/roundedcorners.html">Rounded Corners</a>
</div>
<div class="menuitem">
<a href="../../../docs/modules/svg/resizeimages.html">Resizing Images</a>
</div>
<div class="menuitem">
<a href="../../../../apidocs/2.0/modules/svg/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.28', '../../../skin/')" id="menu_1.1.9.28Title" class="menutitle">tinymce</div>
<div id="menu_1.1.9.28" class="menuitemgroup">
<div class="menuitem">
<a href="../../../docs/modules/tinymce/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../apidocs/2.0/modules/tinymce/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.29', '../../../skin/')" id="menu_1.1.9.29Title" class="menutitle">usecasedocument</div>
<div id="menu_1.1.9.29" class="menuitemgroup">
<div class="menuitem">
<a href="../../../docs/modules/usecasedocument/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../apidocs/2.0/modules/usecasedocument/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.30', '../../../skin/')" id="menu_1.1.9.30Title" class="menutitle">webdav</div>
<div id="menu_1.1.9.30" class="menuitemgroup">
<div class="menuitem">
<a href="../../../docs/modules/webdav/index.html">Getting started</a>
</div>
<div class="menuitem">
<a href="../../../docs/modules/webdav/monitoring.html">Monitoring</a>
</div>
<div class="menuitem">
<a href="../../../docs/modules/webdav/webdav.html">WebDAV Servers</a>
</div>
<div class="menuitem">
<a href="../../../../apidocs/2.0/modules/webdav/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.31', '../../../skin/')" id="menu_1.1.9.31Title" class="menutitle">xhtml</div>
<div id="menu_1.1.9.31" class="menuitemgroup">
<div class="menuitem">
<a href="../../../docs/modules/xhtml/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../apidocs/2.0/modules/xhtml/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.32', '../../../skin/')" id="menu_1.1.9.32Title" class="menutitle">xopus</div>
<div id="menu_1.1.9.32" class="menuitemgroup">
<div class="menuitem">
<a href="../../../docs/modules/xopus/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../apidocs/2.0/modules/xopus/index.html">API</a>
</div>
</div>
</div>
</div>
<div id="credit"></div>
<div id="roundbottom">
<img style="display: none" class="corner" height="15" width="15" alt="" src="../../../skin/images/rc-b-l-15-1body-2menu-3menu.png"></div>
<!--+
|alternative credits
+-->
<div id="credit2">
<a href="http://wiki.apache.org/lenya/MeetingFreiburg2008"><img border="0" title="Meeting Freiburg 2008" alt="Meeting Freiburg 2008 - logo" src="../../../images/apache-lenya-meeting-freiburg-2008.png" style="width: 160px;height: 40px;"></a>
</div>
</div>
<!--+
|end Menu
+-->
<!--+
|start content
+-->
<div id="content">
<div title="Portable Document Format" class="pdflink">
<a class="dida" href="production.pdf"><img alt="PDF -icon" src="../../../skin/images/pdfdoc.gif" class="skin"><br>
PDF</a>
</div>
<h1>Production Checklist</h1>
<div id="front-matter">
<div id="minitoc-area">
<ul class="minitoc">
<li>
<a href="#General+Deployment+Recommendations">General Deployment Recommendations</a>
</li>
<li>
<a href="#During+Development">During Development</a>
</li>
<li>
<a href="#Preparation+%28Internal+Pilot+Phase%29">Preparation (Internal Pilot Phase)</a>
</li>
<li>
<a href="#Caching+in+Cocoon">Caching in Cocoon</a>
</li>
<li>
<a href="#Performance+Tuning">Performance Tuning</a>
</li>
<li>
<a href="#General+Measures+for+Production">General Measures for Production</a>
</li>
<li>
<a href="#Cosmetics">Cosmetics</a>
</li>
</ul>
</div>
</div>
<p>
Here's a list of points you should take care of when running Lenya
in a production environment. It covers only the most obvious aspects,
but it might prevent you from falling in the biggest traps in
first real-world project.
</p>
<a name="N10011"></a><a name="General+Deployment+Recommendations"></a>
<h2 class="h3">General Deployment Recommendations</h2>
<div class="section">
<ul>
<li>
Seperate your web application from your data. This applies to
the content, access control, and work data (search index, cache).
</li>
<li>
When creating backups of your data, make sure you'll still know
which version of the application they're compatible with when you
need them again.
</li>
<li>
Always have two instances of Lenya ready, and make sure you can
switch between them immediately (e.g., by changing a symlink to
a proxy configuration file).
</li>
<li>
Consider using vendor branches for Lenya, Cocoon etc. This helps you to
stay flexible when you're faced with bugs, endorsed library issues etc.
</li>
<li>
When you deploy a version of your application, <strong>always</strong> create
a branch in your code versioning system. This way, you can merge essential
bugfixes from the trunk and re-deploy the application. <strong>Never</strong>
deploy an un-tagged development version.
</li>
</ul>
</div>
<a name="N10030"></a><a name="During+Development"></a>
<h2 class="h3">During Development</h2>
<div class="section">
<ul>
<li>
Run sophisticated and thorough load tests early and often.
</li>
<li>
Run search engine crawlers on your site. Observe the performance behaviour
and session handling.
</li>
<li>
Test the site in various browsers, using various settings (disabling
JavaScript etc.), and preferrably using different bandwidths.
</li>
<li>
Make sure you don't create weak points for DoS attacks (e.g. by
expensive dynamic generation of non-cached pages based on request
parameters).
</li>
</ul>
</div>
<a name="N10046"></a><a name="Preparation+%28Internal+Pilot+Phase%29"></a>
<h2 class="h3">Preparation (Internal Pilot Phase)</h2>
<div class="section">
<p>
Set the log level to <em>ERROR</em> in
<span class="codefrag">externals/cocoon_2_1_x/src/webapp/WEB-INF/log4j.xconf</span>
(source, needs rebuild to become active) or
<span class="codefrag">build/lenya/webapp/WEB-INF/log4j.xconf</span> (deployed file):
</p>
<pre class="code">
&lt;root&gt;
&lt;priority value="error" /&gt;
&lt;appender-ref ref="COCOON_DEFAULT" /&gt;
&lt;/root&gt;
</pre>
<p>
Make sure that the logs stay clean. If exceptions occur, mercilessly
track them down and eliminate their causes. Even if you consider some
exceptions "normal" behaviour - they aren't.
</p>
<p>
At a later point in your testing process, disable the "DEBUG" setting for the Java compiler in
<span class="codefrag">src/targets/properties-build</span> to speed up your bytecode:
</p>
<pre class="code">
&lt;property name="debug" value="off"/&gt;
</pre>
</div>
<a name="N1006A"></a><a name="Caching+in+Cocoon"></a>
<h2 class="h3">Caching in Cocoon</h2>
<div class="section">
<p>
There's a <a href="http://wiki.apache.org/cocoon-data/attachments/GT2006Notes/attachments/10-caching.pdf">great
presentation</a> (PDF) about caching in Cocoon, held at the Cocoon Get-Together 2006.
</p>
<p>
Cocoon's default store implementation is an in-memory store backed by a disk
store (based on EHCache). You can configure this store using a file called
<span class="codefrag">ehcache.xml</span> which is located in <span class="codefrag">org/apache/cocoon/components/store/impl/ehcache.xml</span>.
The default entries of the <span class="codefrag">defaultCache</span> are as follows:
</p>
<pre class="code">&lt;defaultCache
maxElementsInMemory="10000"
eternal="true"
timeToIdleSeconds="0"
timeToLiveSeconds="0"
overflowToDisk="true"
diskPersistent="true"
diskExpiryThreadIntervalSeconds="120"
/&gt;</pre>
<p>
So, when <span class="codefrag">overflow-to-disk</span> is set to true, <span class="codefrag">eternal</span> to true and
<span class="codefrag">timeToIdleSeconds=0</span>, then once a cachekey is in memory/disk, it will never
be removed which might lead to a cache file becoming very large
(see also thread: <a href="http://java2.5341.com/msg/170235.html">http://java2.5341.com/msg/170235.html</a>).
</p>
<p>
For production use these setting should be changed. A possible configuration might look like:
</p>
<pre class="code">&lt;defaultCache
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="1800"
timeToLiveSeconds="3600"
overflowToDisk="true"
diskPersistent="true"
diskExpiryThreadIntervalSeconds="120"
/&gt;</pre>
<p>
This cache contains a maximum in memory of 10000 elements, and will expire an element
if it is idle for more than 30 minutes and lives for more than 60 minutes. If there are
more than 10000 elements it will overflow to the disk cache.
</p>
</div>
<a name="N100A2"></a><a name="Performance+Tuning"></a>
<h2 class="h3">Performance Tuning</h2>
<div class="section">
<p>
The following hints can be considered to improve the performance of your application:
</p>
<ul>
<li>Set XSLT caching (use-store) to true in <span class="codefrag">cocoon.xconf</span>.</li>
<li>Turn off reloading of sub-sitemaps.</li>
<li>
Enable client-side caching by changing the <span class="codefrag">pipeline-expiration</span> parameter
in <span class="codefrag">global-sitemap.xmap</span>, for instance:
<pre class="code">&lt;global-variables&gt;
&lt;pipeline-expiration&gt;access plus 2 hours&lt;/pipeline-expiration&gt;
&lt;/global-variables&gt;</pre>
</li>
<li>
Configure the expiration time of your resource types. For more information, consult the
<a href="../../../docs/2_0_x/reference/resource-types.html">resource types reference</a>.
</li>
<li>Tips about Cocoon performance tuning: <a href="http://wiki.apache.org/cocoon/CocoonPerformance">http://wiki.apache.org/cocoon/CocoonPerformance</a>
</li>
<li>Tips about Tomcat performance tuning: <a href="http://marc.theaimsgroup.com/?t=103598885300001&r=1&w=2">http://marc.theaimsgroup.com/?t=103598885300001&amp;r=1&amp;w=2</a>
</li>
</ul>
<p>
Doug Chestnut recommends to adapt the garbage collector to make use of all available CPU cores.
This can be done by adding the following to your JAVA options (for a machine with 4 cores):
</p>
<pre class="code">-XX:+UseParallelGC -XX:ParallelGCThreads=4</pre>
<p>
You can also increase stack and heap size to make better use of available memory
(be careful not to starve other processes on the same machine, though):
</p>
<pre class="code">-Xms512m -Xmx1024m</pre>
<p>
Lenya does XML prettyprinting by default, which comes with a performance penalty.
You might want to disable the transformation for maximum speed:
</p>
<pre class="code">&lt;map:transform src="fallback://lenya/modules/prettyprinting/xslt/xml2nicexml.xsl"/&gt;</pre>
</div>
<a name="N100ED"></a><a name="General+Measures+for+Production"></a>
<h2 class="h3">General Measures for Production</h2>
<div class="section">
<ul>
<li>
Double-check your access control settings.
</li>
<li>
Remove the example publications (default and blog). If you use them as templates,
don't forget to remove the example users or change their passwords.
</li>
<li>
Set the log level to <em>FATAL</em> or at least <em>ERROR</em>. This makes the code
faster and prevents the log files from growing very large while keeping them comprehensible.
The log level can be configured in <span class="codefrag">$COCOON_HOME/src/webapp/WEB-INF/log4j.xconf</span> or ultimately
in <span class="codefrag">$LENYA_HOME/build/lenya/webapp/WEB-INF/log4j.xconf</span>.
</li>
<li>
Set the <em>debug</em> property in <span class="codefrag">src/targets/properties-build.xml</span> to <em>off</em>.
This way, the generated byte code will run faster.
</li>
<li>
Disable all modules which accept request to dynamically generate images
to prevent DoS attacks.
</li>
<li>
Consider disabling image upload.
</li>
<li>
Set the session expiration time to the least acceptable value.
</li>
<li>
Prepare for maintenance (updates etc.), either by switching
the application or by showing a friendly information page.
</li>
<li>
Prepare for a worst-case scenario. For instance, have a statically
exported version of the site ready.
</li>
</ul>
</div>
<a name="N10127"></a><a name="Cosmetics"></a>
<h2 class="h3">Cosmetics</h2>
<div class="section">
<p>
In order to hide the default publication from the welcome page
(if you're not going to delete it anyway), change <span class="codefrag">src/pubs/default/publication.xml</span> as follows:
</p>
<pre class="code">--- lenya/ (revision 452350)
&lt;publication xmlns="http://apache.org/cocoon/lenya/publication/1.1" lenya:show="false"&gt;
</pre>
</div>
</div>
<!--+
|end content
+-->
<div class="clearboth">&nbsp;</div>
</div>
<div id="footer">
<!--+
|start bottomstrip
+-->
<div class="lastmodified">
<script type="text/javascript"><!--
document.write("Last Published: " + document.lastModified);
// --></script>
</div>
<div class="copyright">
Copyright &copy;
2002-2007 <a href="http://www.apache.org/licenses/LICENSE-2.0">The Apache Software Foundation.</a>
</div>
<div id="feedback">
Send feedback about the website to:
<a id="feedbackto" href="mailto:dev@lenya.apache.org?subject=Feedback%C2%A0for%C2%A0docs/2_0_x/tutorials/production.html">dev@lenya.apache.org</a>
</div>
<!--+
|end bottomstrip
+-->
</div>
</body>
</html>