You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by mr...@apache.org on 2019/05/20 11:23:20 UTC

svn commit: r1859550 [8/26] - in /jackrabbit/site/live/archive: ./ wiki/ wiki/JCR/ wiki/JCR/attachments/ wiki/JCR/attachments/115513387/ wiki/JCR/attachments/115513390/ wiki/JCR/attachments/115513408/ wiki/JCR/attachments/115513413/ wiki/JCR/attachment...

Added: jackrabbit/site/live/archive/wiki/JCR/ConnectionPooling_115513384.html
URL: http://svn.apache.org/viewvc/jackrabbit/site/live/archive/wiki/JCR/ConnectionPooling_115513384.html?rev=1859550&view=auto
==============================================================================
--- jackrabbit/site/live/archive/wiki/JCR/ConnectionPooling_115513384.html (added)
+++ jackrabbit/site/live/archive/wiki/JCR/ConnectionPooling_115513384.html Mon May 20 11:23:18 2019
@@ -0,0 +1,159 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <title>Apache Jackrabbit : ConnectionPooling</title>
+        <link rel="stylesheet" href="styles/site.css" type="text/css" />
+        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">
+    </head>
+
+    <body class="theme-default aui-theme-default">
+        <div id="page">
+            <div id="main" class="aui-page-panel">
+                <div id="main-header">
+                    <div id="breadcrumb-section">
+                        <ol id="breadcrumbs">
+                            <li class="first">
+                                <span><a href="index.html">Apache Jackrabbit</a></span>
+                            </li>
+                                                    <li>
+                                <span><a href="Home_70731.html">Home</a></span>
+                            </li>
+                                                </ol>
+                    </div>
+                    <h1 id="title-heading" class="pagetitle">
+                                                <span id="title-text">
+                            Apache Jackrabbit : ConnectionPooling
+                        </span>
+                    </h1>
+                </div>
+
+                <div id="content" class="view">
+                    <div class="page-metadata">
+                        
+        
+    
+        
+    
+        
+        
+            Created by <span class='author'> ASF Infrabot</span> on May 20, 2019
+                        </div>
+                    <div id="main-content" class="wiki-content group">
+                    <h1 id="ConnectionPooling-Databaseconnectionpooling">Database connection pooling</h1>
+
+<p>The forthcoming 2.0 release of Jackrabbit will feature connection pooling for database components (also see <a href="http://issues.apache.org/jira/browse/JCR-1456" class="external-link" rel="nofollow">JCR-1456</a>). Connection pooling has been added to:</p>
+<ol>
+	<li>The database data store components: <em>org.apache.jackrabbit.core.data.db.Db{{`Data}}`Store</em> and subclasses. 2. The database filesystem components: <em>org.apache.jackrabbit.core.fs.db.Database{{`File}}`System</em> and subclasses. 3. The database journal components: <em>org.apache.jackrabbit.core.journal.DatabaseJournal</em> and subclasses. 4. The database bundle persistence managers: <em>org.apache.jackrabbit.core.persistence.pool.Bundle{{`Db}}<code>Persistence</code>`Manager</em> and subclasses.
+<br class="atl-forced-newline"/></li>
+</ol>
+
+
+<p><strong>Important:</strong> Please note that the pooling implementations of the bundle persistence managers have not replaced the original implementation but have been added in a separate package.</p>
+
+<p>The components can be configured in the same way as before via the repository descriptor (also see <a href="ConfigurationOverview_115513382.html">ConfigurationOverview</a> and <a href="http://jackrabbit.apache.org/jackrabbit-configuration.html" class="external-link" rel="nofollow">Jackrabbit configuration</a>). The components that have the same database URL, driver and user will share the same connection pool (with an unlimited number of connections). Thus, existing deployments can easily be migrated to use pooling: The only change needed is to replace any bundle persistence manager class by it's twin brother from the pooling package.</p>
+
+<p>A new configuration element has been added to the repository descriptor: the <em>Data{{`Sources</em> element in which you can explicitly configure one or more pooling data sources. Each <em>Data}}`Source</em> has a logical name which can be used in the configuration of the above mentioned components. Here follows an example.</p>
+
+<p><strong>Note:</strong> the <em>logicalName</em> parameter of the <em>DataSource</em> element has been replaced by the <em>name</em> attribute as of 2.0-beta5.</p>
+
+<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
+<pre>&lt;?xml version=&quot;1.0&quot;?&gt;
+&lt;Repository&gt;
+    &lt;DataSources&gt;
+        &lt;DataSource name=&quot;ds1&quot;&gt;
+            &lt;param name=&quot;driver&quot; value=&quot;oracle.jdbc.driver.OracleDriver&quot; /&gt;
+            &lt;param name=&quot;url&quot; value=&quot;jdbc:oracle:thin:@localhost:1521:xe&quot; /&gt;
+            &lt;param name=&quot;user&quot; value=&quot;usr&quot; /&gt;
+            &lt;param name=&quot;password&quot; value=&quot;pwd&quot; /&gt;
+            &lt;param name=&quot;databaseType&quot; value=&quot;oracle&quot;/&gt;
+            &lt;param name=&quot;validationQuery&quot; value=&quot;select &#39;validationQuery&#39; from dual&quot;/&gt;
+            &lt;param name=&quot;maxPoolSize&quot; value=&quot;10&quot;/&gt;
+        &lt;/DataSource&gt;
+    &lt;/DataSources&gt;
+    &lt;FileSystem class=&quot;org.apache.jackrabbit.core.fs.db.OracleFileSystem&quot;&gt;
+        &lt;param name=&quot;dataSourceName&quot; value=&quot;ds1&quot;/&gt;
+        &lt;param name=&quot;schemaObjectPrefix&quot; value=&quot;fs_&quot; /&gt;
+    &lt;/FileSystem&gt;
+    &lt;DataStore class=&quot;org.apache.jackrabbit.core.data.db.DbDataStore&quot;&gt;
+        &lt;param name=&quot;dataSourceName&quot; value=&quot;ds1&quot;/&gt;
+        &lt;param name=&quot;schemaObjectPrefix&quot; value=&quot;ds_&quot; /&gt;
+    &lt;/DataStore&gt;
+    &lt;Security appName=&quot;Jackrabbit&quot;&gt;
+        &lt;SecurityManager class=&quot;org.apache.jackrabbit.core.DefaultSecurityManager&quot; workspaceName=&quot;security&quot; /&gt;
+        &lt;AccessManager class=&quot;org.apache.jackrabbit.core.security.DefaultAccessManager&quot; /&gt;
+        &lt;LoginModule class=&quot;org.apache.jackrabbit.core.security.authentication.DefaultLoginModule&quot;&gt;
+           &lt;param name=&quot;anonymousId&quot; value=&quot;anonymous&quot;/&gt;
+           &lt;param name=&quot;adminId&quot; value=&quot;admin&quot;/&gt;
+        &lt;/LoginModule&gt;
+    &lt;/Security&gt;
+    &lt;Workspaces rootPath=&quot;${rep.home}/workspaces&quot; defaultWorkspace=&quot;default&quot; maxIdleTime=&quot;2&quot;/&gt;
+    &lt;Workspace name=&quot;${wsp.name}&quot;&gt;
+        &lt;FileSystem class=&quot;org.apache.jackrabbit.core.fs.db.OracleFileSystem&quot;&gt;
+            &lt;param name=&quot;dataSourceName&quot; value=&quot;ds1&quot;/&gt;
+            &lt;param name=&quot;schemaObjectPrefix&quot; value=&quot;fs_${wsp.name}_&quot; /&gt;
+        &lt;/FileSystem&gt;
+        &lt;PersistenceManager class=&quot;org.apache.jackrabbit.core.persistence.pool.OraclePersistenceManager&quot;&gt;
+            &lt;param name=&quot;dataSourceName&quot; value=&quot;ds1&quot;/&gt;
+            &lt;param name=&quot;schemaObjectPrefix&quot; value=&quot;pm_${wsp.name}_&quot; /&gt;
+        &lt;/PersistenceManager&gt;
+        &lt;SearchIndex class=&quot;org.apache.jackrabbit.core.query.lucene.SearchIndex&quot;&gt;
+            &lt;param name=&quot;path&quot; value=&quot;${wsp.home}/index&quot;/&gt;
+        &lt;/SearchIndex&gt;
+    &lt;/Workspace&gt;
+    &lt;Versioning rootPath=&quot;${rep.home}/version&quot;&gt;
+        &lt;FileSystem class=&quot;org.apache.jackrabbit.core.fs.db.OracleFileSystem&quot;&gt;
+            &lt;param name=&quot;dataSourceName&quot; value=&quot;ds1&quot;/&gt;
+            &lt;param name=&quot;schemaObjectPrefix&quot; value=&quot;fs_ver_&quot; /&gt;
+        &lt;/FileSystem&gt;
+        &lt;PersistenceManager class=&quot;rg.apache.jackrabbit.core.persistence.pool.OraclePersistenceManager&quot;&gt;
+            &lt;param name=&quot;dataSourceName&quot; value=&quot;ds1&quot;/&gt;
+            &lt;param name=&quot;schemaObjectPrefix&quot; value=&quot;pm_ver_&quot; /&gt;
+        &lt;/PersistenceManager&gt;
+    &lt;/Versioning&gt;
+    &lt;SearchIndex class=&quot;org.apache.jackrabbit.core.query.lucene.SearchIndex&quot;&gt;
+        &lt;param name=&quot;path&quot; value=&quot;${rep.home}/repository/index&quot;/&gt;
+    &lt;/SearchIndex&gt;
+&lt;/Repository&gt;
+</pre>
+</div></div>
+
+<p>Note that you can use data sources from JNDI in both the configuration of the data sources and in configuration of the components (see <a href="UsingJNDIDataSource_115513523.html">UsingJNDIDataSource</a>). Jackrabbit will use these JNDI data sources as-is and will not wrap pools around them.</p>
+
+<p>The configuration options for the data source elements are the following:</p>
+
+<p>Required properties:</p>
+<ul>
+	<li>name : the logical name of the data source which can be used in the configuration of database components</li>
+	<li>driver : the driver (which may be <em>javax.naming.InitialContext</em> for a JNDI data source)</li>
+	<li>url : the database URL (or the JNDI lookup name)</li>
+	<li>dbType : the database type (also called <em>schema</em> in the configuration of some database components)
+<br class="atl-forced-newline"/></li>
+</ul>
+
+
+<p>Optional properties (typically used with non-JNDI data sources):</p>
+<ul>
+	<li>user : the database user</li>
+	<li>password : the password for the database user
+<br class="atl-forced-newline"/></li>
+</ul>
+
+
+<p>Optional properties for non-JNDI data sources:</p>
+<ul>
+	<li>validationQuery : the validation query to use (Jackrabbit guesses a default if it is not specified and logs a warning if it has no proper default)</li>
+	<li>maxPoolSize : the maximum pool size (unlimited by default)</li>
+</ul>
+                    </div>
+
+                    
+                                                      
+                </div>             </div> 
+            <div id="footer" role="contentinfo">
+                <section class="footer-body">
+                    <p>Document generated by Confluence on May 20, 2019 11:11</p>
+                    <div id="footer-logo"><a href="http://www.atlassian.com/">Atlassian</a></div>
+                </section>
+            </div>
+        </div>     </body>
+</html>

Propchange: jackrabbit/site/live/archive/wiki/JCR/ConnectionPooling_115513384.html
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jackrabbit/site/live/archive/wiki/JCR/ConnectionPooling_115513384.html
------------------------------------------------------------------------------
    svn:executable = *

Added: jackrabbit/site/live/archive/wiki/JCR/ContentTrackApacheConUs2009_115513385.html
URL: http://svn.apache.org/viewvc/jackrabbit/site/live/archive/wiki/JCR/ContentTrackApacheConUs2009_115513385.html?rev=1859550&view=auto
==============================================================================
--- jackrabbit/site/live/archive/wiki/JCR/ContentTrackApacheConUs2009_115513385.html (added)
+++ jackrabbit/site/live/archive/wiki/JCR/ContentTrackApacheConUs2009_115513385.html Mon May 20 11:23:18 2019
@@ -0,0 +1,498 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <title>Apache Jackrabbit : ContentTrackApacheConUs2009</title>
+        <link rel="stylesheet" href="styles/site.css" type="text/css" />
+        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">
+    </head>
+
+    <body class="theme-default aui-theme-default">
+        <div id="page">
+            <div id="main" class="aui-page-panel">
+                <div id="main-header">
+                    <div id="breadcrumb-section">
+                        <ol id="breadcrumbs">
+                            <li class="first">
+                                <span><a href="index.html">Apache Jackrabbit</a></span>
+                            </li>
+                                                    <li>
+                                <span><a href="Home_70731.html">Home</a></span>
+                            </li>
+                                                </ol>
+                    </div>
+                    <h1 id="title-heading" class="pagetitle">
+                                                <span id="title-text">
+                            Apache Jackrabbit : ContentTrackApacheConUs2009
+                        </span>
+                    </h1>
+                </div>
+
+                <div id="content" class="view">
+                    <div class="page-metadata">
+                        
+        
+    
+        
+    
+        
+        
+            Created by <span class='author'> ASF Infrabot</span> on May 20, 2019
+                        </div>
+                    <div id="main-content" class="wiki-content group">
+                    <p>This page is for planning the &quot;Content Technology&quot; track at the <a href="http://www.us.apachecon.com/" class="external-link" rel="nofollow">ApacheCon US 2009</a>.</p>
+
+<p>This track has been allocated two days of the ApacheCon US 2009 schedule.</p>
+
+<h2 id="ContentTrackApacheConUs2009-TODO">TODO</h2>
+
+<ol>
+	<li>revise the session descriptions, update them in the CMS (details to be provided soon)</li>
+	<li>notify  planners-2009-us@apachecon.com so the schedule can be published</li>
+	<li>choose from many other interesting project opportunities to engage your communities!</li>
+	<li>option; plan an evening meetup</li>
+	<li>option; request an additional conference day of narrowly focused content or un-con track (smaller audience)</li>
+	<li>option; create a new idea and share it with  planners-2009-us@apachecon.com to see if this can happen
+<br class="atl-forced-newline"/></li>
+</ol>
+
+
+<hr/>
+
+<h1 id="ContentTrackApacheConUs2009-ContentTechnology">Content Technology</h1>
+
+<p>Projects covered by Track:</p>
+
+<ul>
+	<li><a href="http://couchdb.apache.org/" class="external-link" rel="nofollow">Apache CouchDB</a></li>
+	<li><a href="http://jackrabbit.apache.org/" class="external-link" rel="nofollow">Apache Jackrabbit</a></li>
+	<li><a href="http://poi.apache.org/" class="external-link" rel="nofollow">Apache POI</a></li>
+	<li><a href="http://portals.apache.org/" class="external-link" rel="nofollow">Apache Portals</a></li>
+	<li><a href="http://roller.apache.org/" class="external-link" rel="nofollow">Apache Roller</a></li>
+	<li><a href="http://incubator.apache.org/shindig/" class="external-link" rel="nofollow">Apache Shindig</a> (incubating)</li>
+	<li><a href="http://sling.apache.org/" class="external-link" rel="nofollow">Apache Sling</a></li>
+	<li><a href="http://tapestry.apache.org/" class="external-link" rel="nofollow">Apache Tapestry</a></li>
+	<li><a href="http://velocity.apache.org/" class="external-link" rel="nofollow">Apache Velocity</a></li>
+	<li><a href="http://wicket.apache.org/" class="external-link" rel="nofollow">Apache Wicket</a>
+<br class="atl-forced-newline"/></li>
+</ul>
+
+
+<p>PMC Liason/Spokesorganizer(s):</p>
+
+<ul>
+	<li>Jukka Zitting
+<br class="atl-forced-newline"/></li>
+</ul>
+
+
+<p>Planning Team Mentor &amp; Liason:</p>
+
+<ul>
+	<li>Shane Curcuru
+<br class="atl-forced-newline"/></li>
+</ul>
+
+
+<h3 id="ContentTrackApacheConUs2009-TrackDescription">Track Description</h3>
+
+<p><em>Must be suitable for program, one paragraph, identify Who, What and Why. This must be oriented towards the technologist familiar with this subject matter, one who is not yet familiar but would be interested if they knew what the technology was, and the decision maker who would approve their attending this conference!</em></p>
+
+<p>Are you looking for software for modern web publishing and content management? The content technology track covers web-based Apache projects ranging from content applications to web frameworks, protocol libraries and unstructured content storage solutions.</p>
+
+<p>Targeted mainly to server side web developers, this track presents the latest Apache software in this space, and gives the attendees a chance to meet the developers for in-depth discussions and hands-on examples.</p>
+
+<h3 id="ContentTrackApacheConUs2009-TargetAudience">Target Audience</h3>
+
+<p><em>This is for the planners use and marketing. Please list companies who might be interested in sponsoring this content, and include contact name and email, if known, for Delia to contact them.</em></p>
+
+<h2 id="ContentTrackApacheConUs2009-ProposedSchedule">Proposed Schedule</h2>
+
+<div class="table-wrap"><table class="confluenceTable"><tbody>
+<tr>
+<td class="confluenceTd"><p> <strong>Time</strong>    </p></td>
+<td class="confluenceTd"><p> <strong>Session title (and code)</strong>                                  </p></td>
+<td class="confluenceTd"><p> <strong>Speaker</strong>          </p></td>
+</tr>
+<tr>
+<td class="confluenceTd"><p> Wednesday     </p></td>
+<td class="confluenceTd"><p> </p></td>
+<td class="confluenceTd"><p> </p></td>
+</tr>
+<tr>
+<td class="confluenceTd"><p> 09:00 - 10:00 </p></td>
+<td class="confluenceTd"><p> REGISTRATION                                                    </p></td>
+<td class="confluenceTd"><p> </p></td>
+</tr>
+<tr>
+<td class="confluenceTd"><p> 10:00 - 10:50 </p></td>
+<td class="confluenceTd"><p> 413: Tapestry 5: Java Power, Scripting Ease!                    </p></td>
+<td class="confluenceTd"><p> Howard M. Lewis Ship   </p></td>
+</tr>
+<tr>
+<td class="confluenceTd"><p> 10:50 - 11:15 </p></td>
+<td class="confluenceTd"><p> BREAK                                                           </p></td>
+<td class="confluenceTd"><p> </p></td>
+</tr>
+<tr>
+<td class="confluenceTd"><p> 11:15 - 12:05 </p></td>
+<td class="confluenceTd"><p> 332: An Introduction to Apache Velocity 1.6                     </p></td>
+<td class="confluenceTd"><p> Henning Schmiedehausen </p></td>
+</tr>
+<tr>
+<td class="confluenceTd"><p> 12:05 - 13:30 </p></td>
+<td class="confluenceTd"><p> LUNCH                                                           </p></td>
+<td class="confluenceTd"><p> </p></td>
+</tr>
+<tr>
+<td class="confluenceTd"><p> 13:30 - 14:20 </p></td>
+<td class="confluenceTd"><p> KEYNOTE                                                         </p></td>
+<td class="confluenceTd"><p> </p></td>
+</tr>
+<tr>
+<td class="confluenceTd"><p> 14:30 - 15:20 </p></td>
+<td class="confluenceTd"><p> 509: Introduction to Wicket                                     </p></td>
+<td class="confluenceTd"><p> Jeremy Thomerson       </p></td>
+</tr>
+<tr>
+<td class="confluenceTd"><p> 15:20 - 16:00 </p></td>
+<td class="confluenceTd"><p> BREAK                                                           </p></td>
+<td class="confluenceTd"><p> </p></td>
+</tr>
+<tr>
+<td class="confluenceTd"><p> 16:00 - 16:50 </p></td>
+<td class="confluenceTd"><p> 462: What's new in Roller 5.0                                   </p></td>
+<td class="confluenceTd"><p> Dave Johnson           </p></td>
+</tr>
+<tr>
+<td class="confluenceTd"><p> 17:00 - 17:50 </p></td>
+<td class="confluenceTd"><p> 334: Empowering the social web with Apache Shindig              </p></td>
+<td class="confluenceTd"><p> Paul Lindner           </p></td>
+</tr>
+<tr>
+<td class="confluenceTd"><p> 18:00         </p></td>
+<td class="confluenceTd"><p> END OF PROGRAM                                                  </p></td>
+<td class="confluenceTd"><p> </p></td>
+</tr>
+<tr>
+<td class="confluenceTd"><p> Thursday      </p></td>
+<td class="confluenceTd"><p> </p></td>
+<td class="confluenceTd"><p> </p></td>
+</tr>
+<tr>
+<td class="confluenceTd"><p> 09:00 - 10:00 </p></td>
+<td class="confluenceTd"><p> REGISTRATION                                                    </p></td>
+<td class="confluenceTd"><p> </p></td>
+</tr>
+<tr>
+<td class="confluenceTd"><p> 10:00 - 10:50 </p></td>
+<td class="confluenceTd"><p> 545: Content Driven Portals with Jetspeed and Jackrabbit        </p></td>
+<td class="confluenceTd"><p> David S Taylor         </p></td>
+</tr>
+<tr>
+<td class="confluenceTd"><p> 10:50 - 11:15 </p></td>
+<td class="confluenceTd"><p> BREAK                                                           </p></td>
+<td class="confluenceTd"><p> </p></td>
+</tr>
+<tr>
+<td class="confluenceTd"><p> 11:15 - 12:05 </p></td>
+<td class="confluenceTd"><p> 395: JCR in Action - Content-based Applications with Jackrabbit </p></td>
+<td class="confluenceTd"><p> Carsten Ziegeler       </p></td>
+</tr>
+<tr>
+<td class="confluenceTd"><p> 12:05 - 13:30 </p></td>
+<td class="confluenceTd"><p> LUNCH                                                           </p></td>
+<td class="confluenceTd"><p> </p></td>
+</tr>
+<tr>
+<td class="confluenceTd"><p> 13:30 - 14:20 </p></td>
+<td class="confluenceTd"><p> KEYNOTE                                                         </p></td>
+<td class="confluenceTd"><p> </p></td>
+</tr>
+<tr>
+<td class="confluenceTd"><p> 14:30 - 15:20 </p></td>
+<td class="confluenceTd"><p> 408: Rapid JCR applications development with Sling              </p></td>
+<td class="confluenceTd"><p> Felix Meschberger      </p></td>
+</tr>
+<tr>
+<td class="confluenceTd"><p> 15:20 - 16:00 </p></td>
+<td class="confluenceTd"><p> BREAK                                                           </p></td>
+<td class="confluenceTd"><p> </p></td>
+</tr>
+<tr>
+<td class="confluenceTd"><p> 16:00 - 16:50 </p></td>
+<td class="confluenceTd"><p> 550: CouchDB from 10,000 feet                                   </p></td>
+<td class="confluenceTd"><p> J. Chris Anderson      </p></td>
+</tr>
+<tr>
+<td class="confluenceTd"><p> 17:00 - 17:50 </p></td>
+<td class="confluenceTd"><p> 466: Apache POI recipes                                         </p></td>
+<td class="confluenceTd"><p> Paolo Mottadelli       </p></td>
+</tr>
+<tr>
+<td class="confluenceTd"><p> 18:00         </p></td>
+<td class="confluenceTd"><p> END OF PROGRAM                                                  </p></td>
+<td class="confluenceTd"><p> </p></td>
+</tr>
+</tbody></table></div>
+
+
+<p>Do not change capitalized items!  These are part of the master schedule. The individual Session time blocks may be re-sliced, but remember that only five speakers per full day of content receive any speaker benefit.</p>
+
+<p>Each session must be commercially attractive to the audience identified, if content doesn't &quot;fit&quot; into this track but is interesting or useful, consider an Additional Event as described below.</p>
+
+<h2 id="ContentTrackApacheConUs2009-AdditionalEvents">Additional Events</h2>
+
+<p>Reserved so far: space for two evening meetups, up to 100 people each</p>
+
+<ul>
+	<li>NoSQL meetup</li>
+	<li>&quot;Tapestry vs. Wicket deathmatch&quot;</li>
+	<li>individual project <a class="createlink" href="/confluence/pages/createpage.action?spaceKey=JCR&amp;title=BoFs&amp;linkCreation=true&amp;fromPageId=115513385">BoFs</a>, based on demand
+<br class="atl-forced-newline"/></li>
+</ul>
+
+
+<p><em>Small-room (max 50) day of content? No speaker compensation is attached to such events. Attendees must be registered/paid for the conference. It can be organized as an unconference or other structure, or it can have a partially or fully spelled out program. The first deadline to request this is the end of June, with no deadline yet for its content.</em></p>
+
+<p><em>Evening Meetup/BOF's/Other? No speaker compensation is attached to such events, they are free to the public.  The first deadline to request this is the end of July, with no deadline yet for its content.</em></p>
+
+
+<h2 id="ContentTrackApacheConUs2009-SessionSummaries">Session Summaries</h2>
+
+<h3 id="ContentTrackApacheConUs2009-413Tapestry5:JavaPower,ScriptingEase!">413 Tapestry 5: Java Power, Scripting Ease!</h3>
+
+<p>Presentation, 50 minutes by Howard M. Lewis Ship, Wednesday 10:00 - 10:50</p>
+
+<p> The Apache Tapestry web framework has been making a name<br/>
+ for itself in terms of innovative features and ease of use.<br/>
+ In this session, we'll introduce the goals of the Tapestry framework:<br/>
+ Simplicity, Consistency, Efficiency and Feedback.<br/>
+ We'll discuss the challenges of building modern, Web 2.0<br/>
+ applications and the two main approaches:  action-oriented and<br/>
+ component-oriented. We'll show the advantages of the<br/>
+ component-oriented approach, especially as implemented in Tapestry.<br/>
+ Tapestry includes many developer productivity features,<br/>
+ including live class reloading and convention over configuration:<br/>
+ we'll show how these result in minute amounts of code to accomplish<br/>
+ big goals, and how Tapestry brings scripting language productivity<br/>
+ within reach of Java developers without sacrificing any of Java's<br/>
+ inherent speed and power.</p>
+
+<h3 id="ContentTrackApacheConUs2009-332:AnIntroductiontoApacheVelocity1.6">332: An Introduction to Apache Velocity 1.6</h3>
+
+<p>Presentation, 50 minutes by Henning Schmiedehausen, Wednesday 11:15 - 12:05</p>
+
+<p> Apache Velocity is mostly considered an exciting alternative<br/>
+ to the ubiquitous Java Server pages for web apps.<br/>
+ But Velocity is much more.  As a general purpose templating<br/>
+ engine written in Java it is at the heart of code generators,<br/>
+ mass mail senders or documentation frameworks.  This talk gives<br/>
+ an overview over the language features and the integration<br/>
+ of Velocity into your own applications.</p>
+
+<h3 id="ContentTrackApacheConUs2009-509:IntroductiontoWicket">509: Introduction to Wicket</h3>
+
+<p>Presentation, 50 minutes by Jeremy Thomerson, Wednesday 14:30 - 15:20</p>
+
+<p> Apache Wicket is a component oriented Java web application<br/>
+ framework that brings back object oriented programming to the Web.<br/>
+ With just HTML and Java, Wicket gives designers and programmers a tool<br/>
+ they can work together in.  In this session you'll be introduced to<br/>
+ Wicket's programming model, and we'll quickly go from simple components,<br/>
+ form processing and providing feedback to integrating with Spring<br/>
+ and Guice, securing, testing and deploying your application.<br/>
+ A lot of ground to cover but the best way to learn everything<br/>
+ you wanted to know about Wicket.</p>
+
+<h3 id="ContentTrackApacheConUs2009-462:What&#39;snewinRoller5.0">462: What's new in Roller 5.0</h3>
+
+<p>Presentation, 50 minutes by Dave Johnson, Wednesday 16:00 - 16:50</p>
+
+<p> We'll cover the features of Apache Roller 5.0 (to be released<br/>
+ Summer 2009) and how it compares to other blog server options,<br/>
+ typical deployment architectures and examples of Roller sites<br/>
+ in production today.  Ongoing student-driven work on !OpenID<br/>
+ and better Media Blogging support will be disucssed in detail.<br/>
+ And, you'll learn how blog software is changing and adapting<br/>
+ to incorporate Social Networking features such as profiles,<br/>
+ friend relationships and social gadgets and how you can use<br/>
+ Apache Shindig and Project SocialSite to add these features to Roller.</p>
+
+<h3 id="ContentTrackApacheConUs2009-334:EmpoweringthesocialwebwithApacheShindig">334: Empowering the social web with Apache Shindig</h3>
+
+<p>Presentation, 50 minutes by Paul Lindner, Wednesday 17:00 - 17:50</p>
+
+<p> The social web is already reality and it makes applications available<br/>
+ to more users by providing common APIs that can be used in many<br/>
+ different contexts.  OpenSocial is an API that can be used by developers<br/>
+ to create applications, using standard JavaScript and HTML.<br/>
+ These applications run on social websites that have implemented<br/>
+ the OpenSocial APIs.  Such websites, known as OpenSocial containers,<br/>
+ allow developers to access their social information; in return<br/>
+ they receive a large suite of applications for their users.<br/>
+ Apache Shindig is a brand new incubator podling implementing<br/>
+ the OpenSocial APIs.  This talk describes Shindig in depth<br/>
+ and shows how it can be embedded into a larger web application<br/>
+ to enable it to host OpenSocial apps.</p>
+
+<h3 id="ContentTrackApacheConUs2009-545:ContentDrivenPortalswithJetspeedandJackrabbit">545: Content Driven Portals with Jetspeed and Jackrabbit</h3>
+
+<p>Presentation, 50 minutes by David S Taylor, Thursday 10:00 - 10:50</p>
+
+<p> If you are looking for a solution that provides end to end content<br/>
+ management and portal based delivery, all under a business friendly,<br/>
+ open source Apache license, this presentation is for you.<br/>
+ Target audience is for software developers, system integrators<br/>
+ and managers interested in Apache's offerings of Open Source Portal<br/>
+ and Enterprise Content technologies.  This one hour presentation<br/>
+ will be short on theory and high on live demonstrations of<br/>
+ the Jetspeed and Jackrabbit projects.  (Jetspeed is the portal,<br/>
+ Jackrabbit is the Java Content Repository (JCR)).</p>
+
+<p> Features discussed and demonstrated include:</p>
+
+<ul>
+	<li>Content Creation - A look at how to create content with Jackrabbit and a CMS</li>
+	<li>Portal Site Management - navigating over content in Jetspeed</li>
+	<li>Content Management - managing content with an advanced, open source Content Management System</li>
+	<li>Content Delivery - delivering enterprise content in Java standard portlets alongside enterprise applications</li>
+	<li>Tools - working with a JCR Site Toolkit to rapidly develop content-based applications that run transparently in a portal and in plain websites
+<br class="atl-forced-newline"/>
+ Using Jetspeed + Jackrabbit + Site Toolkit, a demo will be given<br/>
+ showing how to rapidly develop a collaborative enterprise application.
+<br class="atl-forced-newline"/></li>
+</ul>
+
+
+<h3 id="ContentTrackApacheConUs2009-395:JCRinAction-Content-basedApplicationswithJackrabbit">395: JCR in Action - Content-based Applications with Jackrabbit</h3>
+
+<p>Presentation, 50 minutes by Carsten Ziegeler, Thursday 11:15 - 12:05</p>
+
+<p> The Java Content Repository API (JCR) is the ideal solution<br/>
+ to store hierarchical structured content and develop<br/>
+ content-oriented applications.  This session provides a practical<br/>
+ introduction to quickstart with JCR in your own application.<br/>
+ To demonstrate the basic architecture of such applications, an example<br/>
+ content-based application will be developed during the session.<br/>
+ Basic techniques will be explained including navigation,<br/>
+ searching and observations by using the Apache Jackrabbit project.</p>
+
+<h3 id="ContentTrackApacheConUs2009-408:RapidJCRapplicationsdevelopmentwithSling">408: Rapid JCR applications development with Sling</h3>
+
+<p>Presentation, 50 minutes by Felix Meschberger, Thursday 14:30 - 15:20</p>
+
+<p> Sling is an OSGi-based scriptable applications layer, based on<br/>
+ REST principles, that runs on top of a JCR content repository.<br/>
+ In this talk, we'll see how Sling enables rapid development of JCR-based<br/>
+ content applications, by leveraging the JSR 223 scripting framework<br/>
+ along with the rich set of OSGi components provided by Sling.<br/>
+ We will create a simple application from scratch in a few minutes,<br/>
+ and explain a more complex multimedia application that does a lot<br/>
+ with few lines of code.  This talk will help you get started with<br/>
+ Sling and understand how the different components fit together.</p>
+
+<h3 id="ContentTrackApacheConUs2009-550:CouchDBfrom10,000feet">550: CouchDB from 10,000 feet</h3>
+
+<p>Presentation, 50 minutes by J. Chris Anderson, Thursday 16:00 - 16:50</p>
+
+<p> This presentation takes a look at CouchDB from 10,000 ft.<br/>
+ We try not to lose you in technical details and paint the big picture<br/>
+ that you need to understand CouchDB's strengths and weaknesses.</p>
+
+<p> CouchDB is a document oriented database.  It does not adhere<br/>
+ to the relational principles of traditional databases.<br/>
+ You will learn what that means for your application design.</p>
+
+<p> CouchDB's replication support solves the problems of high-traffic<br/>
+ web sites, distributed peer-to-peer, and offline applications<br/>
+ all at the same time.  We show you what kind of applications you<br/>
+ are able to build with that.</p>
+
+<p> However, CouchDB is no Silver Bullet and there are cases where it<br/>
+ is a poor fit.  You will learn to decide when to use it for your<br/>
+ project and when you are better off with a different solution.</p>
+
+<h3 id="ContentTrackApacheConUs2009-466:ApachePOIrecipes">466: Apache POI recipes</h3>
+
+<p>Presentation, 50 minutes by Paolo Mottadelli, Thursday 17:00 - 17:50</p>
+
+<p> The Apache POI project (<a href="http://poi.apache.org" class="external-link" rel="nofollow">http://poi.apache.org</a>) provides Open Source<br/>
+ Java APIs for the manipulation of Microsoft Office format files. It<br/>
+ was developed to provide OLE2 Compound Document format support. POI<br/>
+ support for the new format was necessitated by the proliferation of<br/>
+ new Office Open XML (OOXML) documents, due to its standardization<br/>
+ driven by Microsoft Office 2007. As a result, a common challenge<br/>
+ emerged for projects that leverage POI to read and write Excel, Word,<br/>
+ and PowerPoint documents: supporting the new format while maintaining<br/>
+ backward compatibility with the earlier one. This session provides an<br/>
+ overview of how the new POI architecture makes that challenge easier<br/>
+ through the common interfaces package and their double implementation.<br/>
+ Participants will also learn about the main new features provided by<br/>
+ POI towards the new OOXML format support. To demonstrate POI's<br/>
+ features, this session will also drive throught a collection of<br/>
+ practical recipes to solve the tough problems of integrating Office<br/>
+ documents in your enterprise applications.</p>
+
+<h3 id="ContentTrackApacheConUs2009-Rejectedsessions">Rejected sessions</h3>
+
+<p>Please list rejected sessions (by session code only), these submittors will be extended courtesies/discounts for their effort:</p>
+
+<ul>
+	<li>358, 383, 393, 404, 427, 432, 434, 435, 453, 454, 464, 465, 469, 539, 549
+<br class="atl-forced-newline"/></li>
+</ul>
+
+
+<h2 id="ContentTrackApacheConUs2009-QuestionsandAnswers">Questions and Answers</h2>
+
+
+<h2 id="ContentTrackApacheConUs2009-Inputfromconferenceplanners">Input from conference planners</h2>
+
+<p>SUGGESTIONS</p>
+
+<ul>
+	<li>People pay to see the scheduled content at ApacheCon. Provide material which will reach and attract our paying audience. If you have Geeks for Geeks content to present, please save that for the daytime un-con tracks, or evening MeetUps/BOFs. Consider that people attending the main tracks probably need to have a clear business case for registration costs - but your community are free to attend the free evening programming (and that's free as in beer!), so choose appropriately!
+<br class="atl-forced-newline"/></li>
+	<li>Work with your community. Some of the best presentations have been from presenters who don't belong to that project's PMC.
+<br class="atl-forced-newline"/></li>
+	<li>Be creative! You're not limited to the strict 50-minute-sessions model. You can organize the schedule in whatever way makes the most sense for your project's content. (Ensure that your attendees still get their coffee- and lunch-breaks and keynote sessions.)
+<br class="atl-forced-newline"/></li>
+	<li>The main track drives paid attendence, so you must submit well-written proposals. If the proposals are not clearly written, and answer &quot;Who, What, and Why?&quot;, then what can be expected of the presentations? We've reviewed the proposals that were received in the main CFP, and they accompany this email. You can use these verbatim (appropriately edited for spelling/to fit the program!), or work with the submitters to refine them to work better within the track you're planning and/or solicit completely new proposals. Use whichever solution creates the most effective program.
+<br class="atl-forced-newline"/></li>
+	<li>During the day, we will run un-con tracks on Wednesday through Friday in smaller rooms (capacity ~50), also coordinated by PMCs. They do not need to be formalized until the morning of the track, but guidance for the prospective audience can be gathered on the un-con tracks' wiki pages. Registration will be required to attend these parallel tracks, but they're a great place to schedule the Geeks4Geeks content that's really interesting for a narrower audience.
+<br class="atl-forced-newline"/></li>
+</ul>
+
+
+<p>FREE STUFF!</p>
+
+<p>During the day, on Monday and Tuesday, we will run a free BarCamp alongside the traditional Hackathon. The space set aside for the BarCamp and Hackathon is truly massive, and should have a very open feel without excessive background noise. By colocating these events, we can enable attendees to jump between hacking together and attending BarCamp sessions.</p>
+
+<p>Free evening activities include MeetUps and BOFs. These will be organized by the PMCs, and can be scheduled for any night from Sunday through Thursday. Wednesday night is set aside for the free BIG FEATHER BIRTHDAY BASH! and Welcome Reception. We expect to attract many commuting attendees from the Bay Area, both for the main program (paid registration required) and for all of these free events and opportunities.</p>
+
+<p>REALITY CHECK</p>
+
+<p>Of course the economic realities do not permit the Conference Producer to cover the costs of everyone who has information to present to such a diverse audience of this many topics. For this conference, for each hour of main track material, the Producer will be covering one (1) hotel night plus one (1) conference pass, and will provide an additional (1) night for overseas travelers. However, the conference will not be paying airfare for speakers from the US and Canada, and will work on a limited case-by-case basis with those from overseas. And with so many friends in the Bay Area, those who are not covered can consider staying with fellow ASF members who are willing to host.</p>
+
+<p>If you're not sure how this will work for you, or what it means when you start getting creative with the program, please check with your planning-mentor.</p>
+
+<p>AND FINALLY</p>
+
+<p>If you need help or guidance, you can contact the planning team any time on planners-2009-us@apachecon.com</p>
+
+<p>You've also been assigned a planning-mentor, who's there as your PMC's personal support system for this conference as mentioned above.</p>
+
+<p>We're looking forward to the most exciting ApacheCon ever, but we need your help to do it!</p>
+                    </div>
+
+                    
+                                                      
+                </div>             </div> 
+            <div id="footer" role="contentinfo">
+                <section class="footer-body">
+                    <p>Document generated by Confluence on May 20, 2019 11:11</p>
+                    <div id="footer-logo"><a href="http://www.atlassian.com/">Atlassian</a></div>
+                </section>
+            </div>
+        </div>     </body>
+</html>

Propchange: jackrabbit/site/live/archive/wiki/JCR/ContentTrackApacheConUs2009_115513385.html
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jackrabbit/site/live/archive/wiki/JCR/ContentTrackApacheConUs2009_115513385.html
------------------------------------------------------------------------------
    svn:executable = *

Added: jackrabbit/site/live/archive/wiki/JCR/ContribTips_115513386.html
URL: http://svn.apache.org/viewvc/jackrabbit/site/live/archive/wiki/JCR/ContribTips_115513386.html?rev=1859550&view=auto
==============================================================================
--- jackrabbit/site/live/archive/wiki/JCR/ContribTips_115513386.html (added)
+++ jackrabbit/site/live/archive/wiki/JCR/ContribTips_115513386.html Mon May 20 11:23:18 2019
@@ -0,0 +1,78 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <title>Apache Jackrabbit : ContribTips</title>
+        <link rel="stylesheet" href="styles/site.css" type="text/css" />
+        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">
+    </head>
+
+    <body class="theme-default aui-theme-default">
+        <div id="page">
+            <div id="main" class="aui-page-panel">
+                <div id="main-header">
+                    <div id="breadcrumb-section">
+                        <ol id="breadcrumbs">
+                            <li class="first">
+                                <span><a href="index.html">Apache Jackrabbit</a></span>
+                            </li>
+                                                    <li>
+                                <span><a href="Home_70731.html">Home</a></span>
+                            </li>
+                                                </ol>
+                    </div>
+                    <h1 id="title-heading" class="pagetitle">
+                                                <span id="title-text">
+                            Apache Jackrabbit : ContribTips
+                        </span>
+                    </h1>
+                </div>
+
+                <div id="content" class="view">
+                    <div class="page-metadata">
+                        
+        
+    
+        
+    
+        
+        
+            Created by <span class='author'> ASF Infrabot</span> on May 20, 2019
+                        </div>
+                    <div id="main-content" class="wiki-content group">
+                    
+
+<h2 id="ContribTips-Commonproblemswhenusing/buildingthejackrabbitjcr-server">Common problems when using / building the jackrabbit jcr-server</h2>
+
+<ul>
+	<li>Follow the build instructions in the <a href="http://svn.apache.org/repos/asf/jackrabbit/trunk/jcr-server/README.txt" class="external-link" rel="nofollow">README.txt</a>
+<br class="atl-forced-newline"/></li>
+	<li>Jackrabbit depends on a &quot;newer&quot; JAXP version than the one shipped with JDK 1.4.x. Xerces 2.6.1 works. Since the xml jars are &quot;endorsed&quot; (javax.xml.xx) you should place them in $JAVA_HOME/jre/lib/ext. If using tomcat you can place the xerces jars in $CATALINA_HOME/common/endorsed
+<br class="atl-forced-newline"/></li>
+	<li>You must add the system property java.security.auth.login.config to point to a jaas configuration file. Use the file jackrabbit/application/test/jaas.config. In tomcat, copy the file to &quot;$CATALINA_HOME/conf&quot; and add the following to the environment var CATALINA_OPTS. (If your tomcat is already using jaas, simply merge the content of jaas.config with the file that tomcat uses.)
+<br class="atl-forced-newline"/></li>
+</ul>
+
+
+<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
+<pre> -Djava.security.auth.login.config=%CATALINA_HOME%/conf/jaas.config
+</pre>
+</div></div>
+
+<p>TODO : Add a list of the exceptions thrown when running without the proper xml api versions, since the exceptions don't give enough hints)</p>
+
+<p><a href="HowtoSpi2Dav_115513407.html">HowtoSpi2Dav</a></p>
+
+<p><a href="HowtoSpi2Rmi_115513408.html">HowtoSpi2Rmi</a></p>
+                    </div>
+
+                    
+                                                      
+                </div>             </div> 
+            <div id="footer" role="contentinfo">
+                <section class="footer-body">
+                    <p>Document generated by Confluence on May 20, 2019 11:11</p>
+                    <div id="footer-logo"><a href="http://www.atlassian.com/">Atlassian</a></div>
+                </section>
+            </div>
+        </div>     </body>
+</html>

Propchange: jackrabbit/site/live/archive/wiki/JCR/ContribTips_115513386.html
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jackrabbit/site/live/archive/wiki/JCR/ContribTips_115513386.html
------------------------------------------------------------------------------
    svn:executable = *

Added: jackrabbit/site/live/archive/wiki/JCR/DataStore_115513387.html
URL: http://svn.apache.org/viewvc/jackrabbit/site/live/archive/wiki/JCR/DataStore_115513387.html?rev=1859550&view=auto
==============================================================================
--- jackrabbit/site/live/archive/wiki/JCR/DataStore_115513387.html (added)
+++ jackrabbit/site/live/archive/wiki/JCR/DataStore_115513387.html Mon May 20 11:23:18 2019
@@ -0,0 +1,378 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <title>Apache Jackrabbit : DataStore</title>
+        <link rel="stylesheet" href="styles/site.css" type="text/css" />
+        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">
+    </head>
+
+    <body class="theme-default aui-theme-default">
+        <div id="page">
+            <div id="main" class="aui-page-panel">
+                <div id="main-header">
+                    <div id="breadcrumb-section">
+                        <ol id="breadcrumbs">
+                            <li class="first">
+                                <span><a href="index.html">Apache Jackrabbit</a></span>
+                            </li>
+                                                    <li>
+                                <span><a href="Home_70731.html">Home</a></span>
+                            </li>
+                                                </ol>
+                    </div>
+                    <h1 id="title-heading" class="pagetitle">
+                                                <span id="title-text">
+                            Apache Jackrabbit : DataStore
+                        </span>
+                    </h1>
+                </div>
+
+                <div id="content" class="view">
+                    <div class="page-metadata">
+                        
+        
+    
+        
+    
+        
+        
+            Created by <span class='author'> ASF Infrabot</span> on May 20, 2019
+                        </div>
+                    <div id="main-content" class="wiki-content group">
+                    <h2 id="DataStore-DataStore">Data Store</h2>
+<style type='text/css'>/*<![CDATA[*/
+div.rbtoc1558350680412 {padding: 0px;}
+div.rbtoc1558350680412 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1558350680412 li {margin-left: 0px;padding-left: 0px;}
+
+/*]]>*/</style><div class='toc-macro rbtoc1558350680412'>
+<ul class='toc-indentation'>
+<li><a href='#DataStore-DataStore'>Data Store</a></li>
+<li><a href='#DataStore-Overview'>Overview</a></li>
+<li><a href='#DataStore-Requirements'>Requirements</a></li>
+<li><a href='#DataStore-HowtoConfiguretheFileDataStore'>How to Configure the File Data Store</a></li>
+<li><a href='#DataStore-FileDataStore'>File Data Store</a>
+<ul class='toc-indentation'>
+<li><a href='#DataStore-Configuration'>Configuration</a></li>
+</ul>
+</li>
+<li><a href='#DataStore-DatabaseDataStore'>Database Data Store</a>
+<ul class='toc-indentation'>
+<li><a href='#DataStore-Configuration.1'>Configuration</a></li>
+<li><a href='#DataStore-Limitations'>Limitations</a></li>
+<li><a href='#DataStore-TemporaryFiles'>Temporary Files</a></li>
+</ul>
+</li>
+<li><a href='#DataStore-FAQ'>FAQ</a></li>
+<li><a href='#DataStore-HowDoesItWork'>How Does It Work</a></li>
+<li><a href='#DataStore-API'>API</a>
+<ul class='toc-indentation'>
+<li><a href='#DataStore-RetrievetheIdentifier'>Retrieve the Identifier</a></li>
+</ul>
+</li>
+<li><a href='#DataStore-DataStoreGarbageCollection'>Data Store Garbage Collection</a>
+<ul class='toc-indentation'>
+<li><a href='#DataStore-RunningDataStoreGarbageCollection(Jackrabbit1.x)'>Running Data Store Garbage Collection (Jackrabbit 1.x)</a></li>
+<li><a href='#DataStore-RunningDataStoreGarbageCollection(Jackrabbit2.x)'>Running Data Store Garbage Collection (Jackrabbit 2.x)</a></li>
+</ul>
+</li>
+<li><a href='#DataStore-HowtoWriteaNewDataStoreImplementation'>How to Write a New Data Store Implementation</a></li>
+<li><a href='#DataStore-FutureIdeas'>Future Ideas</a></li>
+</ul>
+</div>
+
+<h2 id="DataStore-Overview">Overview</h2>
+<p>The data store is optionally used to store large binary values. Normally all node and property data is stored in a persistence manager, but for large binaries such as files special treatment can improve performance and reduce disk usage.</p>
+
+<p>The main features of the data store are:</p>
+
+<ul>
+	<li>Space saving: only one copy per unique object it kept</li>
+	<li>Fast copy: only the identifier is copied</li>
+	<li>Storing and reading does not block others</li>
+	<li>Multiple repositories can use the same data store</li>
+	<li>Objects in the data store are immutable</li>
+	<li>Garbage collection is used to purge unused objects</li>
+	<li>Hot backup is supported</li>
+	<li>Clustering: all cluster nodes use the same data store
+<br class="atl-forced-newline"/></li>
+</ul>
+
+
+<h2 id="DataStore-Requirements">Requirements</h2>
+<p>Jackrabbit 1.4 is required, it is not available in the previous releases.</p>
+
+<p>A Bundle persistence manager is required, or any other persistence manager that supports data stores. The <a class="createlink" href="/confluence/pages/createpage.action?spaceKey=JCR&amp;title=SimpleDbPersistenceManager&amp;linkCreation=true&amp;fromPageId=115513387">SimpleDbPersistenceManager</a> and subclasses do not support the data store, meaning large objects are still saved multiple times if it is used.</p>
+
+<p>The file system must supports files as large as the largest object you want to store. Please note that the file size limit of FAT32 is 2 GB.</p>
+
+<h2 id="DataStore-HowtoConfiguretheFileDataStore">How to Configure the File Data Store</h2>
+<p>To use the file based data store, add this to your repository.xml before the &lt;/Repository&gt;:</p>
+
+<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
+<pre>    &lt;DataStore class=&quot;org.apache.jackrabbit.core.data.FileDataStore&quot;/&gt;
+</pre>
+</div></div>
+<h2 id="DataStore-FileDataStore">File Data Store</h2>
+<p>The file data store stores each binary in a file. The file name is the hash code of the content. When reading, the data is streamed directly from the file (no local or temporary copy of the file is created). The file data store does not use any local cache, that means content is directly read from the files as needed. New content is first stored in a temporary file, and later renamed / moved to the right place.</p>
+
+<p>Because the data store is append-only, the <a class="createlink" href="/confluence/pages/createpage.action?spaceKey=JCR&amp;title=FileDataStore&amp;linkCreation=true&amp;fromPageId=115513387">FileDataStore</a> is guaranteed to be consistent after a crash (unlike the <a class="createlink" href="/confluence/pages/createpage.action?spaceKey=JCR&amp;title=BundleFsPersistenceManager&amp;linkCreation=true&amp;fromPageId=115513387">BundleFsPersistenceManager</a>). It is usually faster than the <a class="createlink" href="/confluence/pages/createpage.action?spaceKey=JCR&amp;title=DbDataStore&amp;linkCreation=true&amp;fromPageId=115513387">DbDataStore</a>, and the preferred choice unless you have strict operational reasons to put everything into a database.</p>
+
+<h3 id="DataStore-Configuration">Configuration</h3>
+<p>This is a full configuration using the default values:</p>
+
+<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
+<pre>    &lt;DataStore class=&quot;org.apache.jackrabbit.core.data.FileDataStore&quot;&gt;
+        &lt;param name=&quot;path&quot; value=&quot;${rep.home}/repository/datastore&quot;/&gt;
+        &lt;param name=&quot;minRecordLength&quot; value=&quot;100&quot;/&gt;
+    &lt;/DataStore&gt;
+</pre>
+</div></div>
+<p>All configuration options are optional:</p>
+
+<ul>
+	<li>path: The name of the directory where this data store keeps the files. The default is /repository/datastore.</li>
+	<li>minRecordLength: The minimum object length. The default is 100 bytes; smaller objects are stored inline (not in the data store). Using a low value means more objects are kept in the data store (which may result in a smaller repository, if the same object is used in many places). Using a high value means less objects are stored in the datastore (which may result in better performance, because less datastore access is required). There is a limitation on the minRecordLength: the maximum value is around 32000. The reason for this is that Java doesn't support strings longer than 64 KB in writeUTF.
+<br class="atl-forced-newline"/></li>
+</ul>
+
+
+<h2 id="DataStore-DatabaseDataStore">Database Data Store</h2>
+<p>The database data store stores data in a relational database. All content is stored in one table, the unique key of the table is the hash code of the content.</p>
+
+<p>When reading, the data may be first copied to a temporary file on the server, or streamed directly from the database (depending on the copyWhenReading setting). New content is first stored in the table under a unique temporary identifier, and later the key is updated to the hash of the content.</p>
+
+<p>When adding a record, by default the stream is first copied to a temporary file. If you get the exception &quot;Can not insert new record java.io.IOException: No space left on device&quot; that means your temporary directory is too small. The reason for the temp file is: most databases need to know the stream size when adding a record, and the JCR API doesn't provide a way to do that. The mechanism used to add a record depends on the property &quot;storeStream&quot; in resource org/apache/jackrabbit/core/data/db/&lt;databaseType&gt;.properties. Implemented mechanisms are: &quot;tempFile&quot; (default; create a temp file before adding a record), &quot;-1&quot; (use the length -1 when adding the record; currently only supported by the H2 database), and &quot;max&quot; (use the length Integer.MAX_VALUE).</p>
+
+<h3 id="DataStore-Configuration.1">Configuration</h3>
+<p>Here is a possible configuration using the database data store:</p>
+
+<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
+<pre>     &lt;DataStore class=&quot;org.apache.jackrabbit.core.data.db.DbDataStore&quot;&gt;
+        &lt;param name=&quot;url&quot; value=&quot;jdbc:postgresql:test&quot;/&gt;
+        &lt;param name=&quot;user&quot; value=&quot;sa&quot;/&gt;
+        &lt;param name=&quot;password&quot; value=&quot;sa&quot;/&gt;
+        &lt;param name=&quot;databaseType&quot; value=&quot;postgresql&quot;/&gt;
+        &lt;param name=&quot;driver&quot; value=&quot;org.postgresql.Driver&quot;/&gt;
+        &lt;param name=&quot;minRecordLength&quot; value=&quot;1024&quot;/&gt;
+        &lt;param name=&quot;maxConnections&quot; value=&quot;3&quot;/&gt;
+        &lt;param name=&quot;copyWhenReading&quot; value=&quot;true&quot;/&gt;
+        &lt;param name=&quot;tablePrefix&quot; value=&quot;&quot;/&gt;
+        &lt;param name=&quot;schemaObjectPrefix&quot; value=&quot;&quot;/&gt;
+    &lt;/DataStore&gt;
+</pre>
+</div></div>
+<p>The configuration options are:</p>
+
+<ul>
+	<li>url: The database URL (required).</li>
+	<li>user: The database user name (required).</li>
+	<li>password: The database password (required).</li>
+	<li><p>databaseType: The database type. By default the sub-protocol of the JDBC database URL is used if it is not set. It must match the resource file [databaseType].properties. Example: mysql. Currently supported are: db2, derby, h2, mssql, mysql, oracle, sqlserver.</p></li>
+	<li>driver: The JDBC driver class name. By default the default driver of the configured database type is used.</li>
+	<li>maxConnections: Set the maximum number of concurrent connections in the pool. At least 3 connections are required if the garbage collection process is used.</li>
+	<li>copyWhenReading: The the copy setting, enabled by default. If enabled, a stream is always copied to a temporary file when reading a stream, so that reads can be concurrent. If disabled, reads are serialized.</li>
+	<li>tablePrefix: The table name prefix. The default is empty. Can be used to select an non-default schema or catalog. The table name is constructed like this: ${tablePrefix}${schemaObjectPrefix}${tableName}. Before Jackrabbit version 2.0, this setting is case sensitive (needs to be lowercase for PostgreSQL and MySQL, and uppercase for other databases).</li>
+	<li>schemaObjectPrefix: The schema object prefix. The default is empty. Available from version 1.6+. Before Jackrabbit version 2.0, this setting is case sensitive (needs to be lowercase for PostgreSQL and MySQL, and uppercase for other databases).
+<br class="atl-forced-newline"/></li>
+</ul>
+
+
+<h3 id="DataStore-Limitations">Limitations</h3>
+<p>MySQL does not support sending very large binaries from the JDBC driver to the database. See also: <a href="http://bugs.mysql.com/bug.php?id=10859" class="external-link" rel="nofollow">http://bugs.mysql.com/bug.php?id=10859</a> and <a href="http://forums.mysql.com/read.php?10,258333,260405#msg-260405" class="external-link" rel="nofollow">http://forums.mysql.com/read.php?10,258333,260405#msg-260405</a> .</p>
+
+<h3 id="DataStore-TemporaryFiles">Temporary Files</h3>
+<p>By default, the database data store creates temporary files that start with &quot;dbRecord&quot; in the temp directory (the directory where the system property &quot;java.io.tmpdir&quot; points to). To disable this behavior, set the configuration property &quot;copyWhenReading&quot; to &quot;false&quot; (see above).</p>
+
+<h2 id="DataStore-FAQ">FAQ</h2>
+<p>Q: Can I disable the data store? A: Only if there are no elements in the data store. If there it is not empty, you need to copy the data to a new repository.</p>
+
+<p>Q: When I use the database data store I get the message: 'Table or view does not exists'. A: Maybe the data store table already exists in another schema. When starting the repository, the database data store checks if the table already exists (using a database meta data call), and will create the table if not. If the table exists, but is in another schema, the table is not created, but accessing it may fail (if the other schema is not in the schema search path for this user).</p>
+
+<p>Q: What would happen when multiple users download large files from the store? A: <a class="createlink" href="/confluence/pages/createpage.action?spaceKey=JCR&amp;title=DbDataStore&amp;linkCreation=true&amp;fromPageId=115513387">DbDataStore</a>: It depends on whether the copyWhenReading option is enabled or not (see there). <a class="createlink" href="/confluence/pages/createpage.action?spaceKey=JCR&amp;title=FileDataStore&amp;linkCreation=true&amp;fromPageId=115513387">FileDataStore</a>: The same file would be opened multiple times. The file would be in the operating system / file system block cache, so that wouldn't be a problem.</p>
+
+<p>Q: Can I change the file content in the data store? A: No. The whole point of the data store is that the content is immutable.</p>
+
+<p>Clustering is supported if you use a shared file system, such as SAN or NFS (Windows file sharing works as well). You need to set data store path of all cluster nodes to the same location.</p>
+
+<p>Blob Store: When the data store is enabled, the blob store is not used. The data store solves the same (and more) problems than the blob store. Therefore, the blob store is now deprecated, however it will be supported for quite some time.</p>
+
+<p>Transaction: transactional semantics are guaranteed.</p>
+
+<p>There is only one data store per repository (not one per Workspace).</p>
+
+<p>Backup: It is very easy to backup the data store: just copy all files. They are never modified, and only renamed from temp file to live file. Deleted only when no longer used (and only by the garbage collector). Backup can be incremental. Backup at runtime (hot backup) is supported.</p>
+
+<p>The main advantages of the data store over the blob store are: unlike the blob store, the data store keeps only one copy per object, even if it is used multiple times. The data store detects if the same object is already stored and will only store a link to the existing object. The data store can be shared across multiple workspaces, and even across multiple repositories if required. Data store operations (read and write) don't block other users because they are done outside the persistence manager. Multiple data store operations can be done at the same time.</p>
+
+<p>Migration: currently there is no special mechanism to migrate data from a blob store to a data store. You will have to convert the whole repository, see also <a href="BackupAndMigration_115513344.html">BackupAndMigration</a>.</p>
+
+<h2 id="DataStore-HowDoesItWork">How Does It Work</h2>
+<p>When adding a binary object, Jackrabbit checks the size of it. When it is larger than minRecordLength, it is added to the data store, otherwise it is kept in-memory. This is done very early (possible when calling Property.setValue(stream)). Only the unique data identifier is stored in the persistence manager (except for in-memory objects, where the data is stored). When updating a value, the old value is kept there (potentially becoming garbage) an the new value is added. There is no update operation.</p>
+
+<p>The current implementation still stores temporary files in some situations, for example in the RMI client. Those cases will be changed to use the data store directly where it makes sense.</p>
+
+<p>Very small objects (where it does not make sense to create a file) are stored in the persistence manager (in-place).</p>
+
+<p>Objects in the data store are only removed when they are not reachable (that means, objects referenced in the cache or in memory are not collected). There is no 'update' operation, only 'add new entry'. Data is added before the transaction is committed. Additions are globally atomic, cluster nodes can share the same data store. Even different repositories can share the same store, as long as garbage collection is done correctly.</p>
+
+<p>Overview:</p>
+
+<p>DataStoreOverview.png!</p>
+
+<p>Objects are usually stored early in the data store, even before the transaction is committed. Only the the identifier is stored in the persistence manager. The blob store is not used any longer (except for backward compatibility). When using the RMI client, large objects are not stored directly in the data store, instead they are first transferred to the server.</p>
+
+<h2 id="DataStore-API">API</h2>
+<p>The regular JCR API is used read and write entries in the data store.</p>
+
+<h3 id="DataStore-RetrievetheIdentifier">Retrieve the Identifier</h3>
+<p>The identifier can help you locate the file in the data store backend;  however, creating a value instance from a identifier is currently not supported. To get the identifier of a binary value, use <a href="http://jackrabbit.apache.org/api/2.1/org/apache/jackrabbit/api/JackrabbitValue.html#getContentIdentity()" class="external-link" rel="nofollow">JackrabbitValue.getContentIdentity()</a>.  Example:</p>
+
+<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
+<pre>InputStream in;
+Binary b = session.getValueFactory().createBinary(in);
+Value value = session.getValueFactory().createValue(b);
+if (value instanceof JackrabbitValue) {
+    JackrabbitValue jv = (JackrabbitValue) value;
+    String id = jv.getContentIdentity();
+}
+</pre>
+</div></div>
+<h2 id="DataStore-DataStoreGarbageCollection">Data Store Garbage Collection</h2>
+<p>The data store never deletes entries except when running data store garbage collection. Similar to Java heap garbage collection, data store garbage collection will first mark all used entries, and later remove unused items.</p>
+
+<p>Data store garbage collection does not delete entries if the identifier is still in the Java heap memory. To delete as many unreferenced entries as possible, call System.gc() a few times before running the data store garbage collection. Please note System.gc() does not guarantee all objects are garbage collected.</p>
+
+<h3 id="DataStore-RunningDataStoreGarbageCollection(Jackrabbit1.x)">Running Data Store Garbage Collection (Jackrabbit 1.x)</h3>
+<p>Running the garbage collection is currently a manual process. You can run this as a separate thread concurrently to your application:</p>
+
+<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
+<pre>import org.apache.jackrabbit.core.data.GarbageCollector;
+...
+GarbageCollector gc;
+SessionImpl si = (SessionImpl)session;
+gc = si.createDataStoreGarbageCollector();
+
+// optional (if you want to implement a progress bar / output):
+gc.setScanEventListener(this);
+gc.scan();
+gc.stopScan();
+
+// delete old data
+gc.deleteUnused();
+</pre>
+</div></div>
+<p>The process above applies to a standalone repository. When clustered, the garbage collection can be run from any cluster node.</p>
+
+<p>If multiple distinct repositories use the same data store, the process is a bit different: First, call gc.scan() on the first repository, then on the second and so on. At the end, call gc.deleteUnused() on the first repository:</p>
+
+<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
+<pre>gc1.scan();
+gc2.scan();
+gc3.scan();
+gc1.stopScan();
+gc1.deleteUnused();
+gc2.stopScan();
+gc3.stopScan();
+</pre>
+</div></div>
+<p>An alternative is:</p>
+
+<ol>
+	<li>Write down the current time = X</li>
+	<li>Run gc.scan() on each repository</li>
+	<li>Manually delete files with last modified date older than X
+<br class="atl-forced-newline"/></li>
+</ol>
+
+
+<h3 id="DataStore-RunningDataStoreGarbageCollection(Jackrabbit2.x)">Running Data Store Garbage Collection (Jackrabbit 2.x)</h3>
+<p>Running the garbage collection is currently a manual process. You can run this as a separate thread concurrently to your application:</p>
+
+<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
+<pre>JackrabbitRepositoryFactory rf = new RepositoryFactoryImpl();
+Properties prop = new Properties();
+prop.setProperty(&quot;org.apache.jackrabbit.repository.home&quot;, DIR);
+prop.setProperty(&quot;org.apache.jackrabbit.repository.conf&quot;, DIR + &quot;/repository.xml&quot;);
+JackrabbitRepository rep = (JackrabbitRepository) rf.getRepository(prop);
+RepositoryManager rm = rf.getRepositoryManager(rep);
+
+// need to login to start the repository
+Session session = rep.login(new SimpleCredentials(&quot;&quot;, &quot;&quot;.toCharArray()));
+
+DataStoreGarbageCollector gc = rm.createDataStoreGarbageCollector();
+try {
+    gc.mark();
+    gc.sweep();
+} finally {
+    gc.close();
+}
+
+session.logout();
+rm.stop();
+</pre>
+</div></div>
+<p>The process above applies to a standalone repository. When clustered, the garbage collection can be run from any cluster node.</p>
+
+<p>If multiple distinct repositories use the same data store, the process is a bit different: First, call gc.mark() on the first repository, then on the second and so on. At the end, call gc.sweep() on the first repository:</p>
+
+<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
+<pre>gc1.mark();
+gc2.mark();
+gc3.mark();
+gc1.sweep();
+gc1.close();
+gc2.close();
+gc3.close();
+</pre>
+</div></div>
+<p>An alternative is:</p>
+
+<ol>
+	<li>Write down the current time = X</li>
+	<li>Run gc.mark() on each repository</li>
+	<li>Manually delete files with last modified date older than X
+<br class="atl-forced-newline"/></li>
+</ol>
+
+
+<h2 id="DataStore-HowtoWriteaNewDataStoreImplementation">How to Write a New Data Store Implementation</h2>
+<p>New implementations are welcome! Cool would be a S3 data store (<a href="http://en.wikipedia.org/wiki/Amazon_S3" class="external-link" rel="nofollow">http://en.wikipedia.org/wiki/Amazon_S3</a>). A caching data store would be great as well (items that are used a lot are stored in fast file system, others in a slower one).</p>
+
+<h2 id="DataStore-FutureIdeas">Future Ideas</h2>
+<p>Theoretically the data store could be split to different directories / hard drives. Currently this can be done manually moving directories to different disks and by creating softlinks. Content that is accessed more often could be moved to a faster disk, and less used data could eventually be moved to slower / cheaper disk. That would be an extension of the 'memory hierarchy' (see also <a href="http://en.wikipedia.org/wiki/Memory_hierarchy" class="external-link" rel="nofollow">http://en.wikipedia.org/wiki/Memory_hierarchy</a>). Of course this wouldn't limit the space used per workspace, but would improve system performance if done right. Maybe we need to do that anyway in the near future to better support solid state disk.</p>
+
+<p>Other feature requests:</p>
+
+<ul>
+	<li>A replicating data store</li>
+	<li>Currently the <a class="createlink" href="/confluence/pages/createpage.action?spaceKey=JCR&amp;title=FileDataStore&amp;linkCreation=true&amp;fromPageId=115513387">FileDataStore</a> creates a lot of directories (and files). If possible the number of directories (and maybe files) should be reduced to improve performance.</li>
+	<li>Fulltext search and meta data extraction could be done when storing the object (only once per object) and stored next to the object.</li>
+	<li>Client should first send the checksum and size of large objects when they store something (import, adding or updating data), in many cases the actual data does not need to be sent.</li>
+	<li>Speed up garbage collection. One idea is to use 'back references' for larger objects: each larger object would know the set of nodes that reference it. This would be an 'append only' set, that means at runtime links only added, not removed. Only the garbage collection process removes links. The garbage collection would first update links for large objects (this process could stop at the first link that still exists). That way large objects can be removed quickly if they are not used any more. Afterwards, objects with a low use count should be scanned. This algorithm wouldn't necessarily speed up the total garbage collection time, but it would free up space more quickly.</li>
+	<li>Auto-Compressing Datastore (file, db) - if a specific file's content type and size make it likely to have large disk space savings if compressed, set the datastore to auto-compress (whether zip, gzip, bz, etc.).  File datastore is more likely to have this feature than DB, and should not impact retrieval or other normal usage.  (user added 7/17/2009)</li>
+</ul>
+                    </div>
+
+                                        <div class="pageSection group">
+                        <div class="pageSectionHeader">
+                            <h2 id="attachments" class="pageSectionTitle">Attachments:</h2>
+                        </div>
+
+                        <div class="greybox" align="left">
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/115513387/115513388.png">DataStoreOverview.png</a> (image/png)
+                                <br/>
+                                                    </div>
+                    </div>
+                    
+                                                      
+                </div>             </div> 
+            <div id="footer" role="contentinfo">
+                <section class="footer-body">
+                    <p>Document generated by Confluence on May 20, 2019 11:11</p>
+                    <div id="footer-logo"><a href="http://www.atlassian.com/">Atlassian</a></div>
+                </section>
+            </div>
+        </div>     </body>
+</html>

Propchange: jackrabbit/site/live/archive/wiki/JCR/DataStore_115513387.html
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jackrabbit/site/live/archive/wiki/JCR/DataStore_115513387.html
------------------------------------------------------------------------------
    svn:executable = *