| <!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> > <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 "> |
| <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"> |
| |
| |
| </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"> |
| <root> |
| <priority value="error" /> |
| <appender-ref ref="COCOON_DEFAULT" /> |
| </root> |
| </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"> |
| <property name="debug" value="off"/> |
| </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"><defaultCache |
| maxElementsInMemory="10000" |
| eternal="true" |
| timeToIdleSeconds="0" |
| timeToLiveSeconds="0" |
| overflowToDisk="true" |
| diskPersistent="true" |
| diskExpiryThreadIntervalSeconds="120" |
| /></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"><defaultCache |
| maxElementsInMemory="10000" |
| eternal="false" |
| timeToIdleSeconds="1800" |
| timeToLiveSeconds="3600" |
| overflowToDisk="true" |
| diskPersistent="true" |
| diskExpiryThreadIntervalSeconds="120" |
| /></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"><global-variables> |
| <pipeline-expiration>access plus 2 hours</pipeline-expiration> |
| </global-variables></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&r=1&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"><map:transform src="fallback://lenya/modules/prettyprinting/xslt/xml2nicexml.xsl"/></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) |
| <publication xmlns="http://apache.org/cocoon/lenya/publication/1.1" lenya:show="false"> |
| </pre> |
| </div> |
| |
| |
| </div> |
| <!--+ |
| |end content |
| +--> |
| <div class="clearboth"> </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 © |
| 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> |