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 [19/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/attachmen...

Added: jackrabbit/site/live/archive/wiki/JCR/Oakathon-November-2018_115513481.html
URL: http://svn.apache.org/viewvc/jackrabbit/site/live/archive/wiki/JCR/Oakathon-November-2018_115513481.html?rev=1859550&view=auto
==============================================================================
--- jackrabbit/site/live/archive/wiki/JCR/Oakathon-November-2018_115513481.html (added)
+++ jackrabbit/site/live/archive/wiki/JCR/Oakathon-November-2018_115513481.html Mon May 20 11:23:18 2019
@@ -0,0 +1,296 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <title>Apache Jackrabbit : Oakathon November 2018</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 : Oakathon November 2018
+                        </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">
+                    <style type='text/css'>/*<![CDATA[*/
+div.rbtoc1558350683176 {padding: 0px;}
+div.rbtoc1558350683176 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1558350683176 li {margin-left: 0px;padding-left: 0px;}
+
+/*]]>*/</style><div class='toc-macro rbtoc1558350683176'>
+<ul class='toc-indentation'>
+<li><a href='#OakathonNovember2018-WhereandWhen'>Where and When</a></li>
+<li><a href='#OakathonNovember2018-Attendees'>Attendees</a></li>
+<li><a href='#OakathonNovember2018-Topics/Discussions/Goals'>Topics/Discussions/Goals</a></li>
+<li><a href='#OakathonNovember2018-AgendaProposal'>Agenda Proposal</a>
+<ul class='toc-indentation'>
+<li><a href='#OakathonNovember2018-Monday'>Monday</a></li>
+<li><a href='#OakathonNovember2018-Tuesday'>Tuesday</a></li>
+<li><a href='#OakathonNovember2018-Wednesday'>Wednesday</a></li>
+<li><a href='#OakathonNovember2018-Thursday'>Thursday</a></li>
+<li><a href='#OakathonNovember2018-Friday'>Friday</a></li>
+</ul>
+</li>
+<li><a href='#OakathonNovember2018-PrepWork'>Prep Work</a></li>
+<li><a href='#OakathonNovember2018-NotesfromtheOakathon'>Notes from the Oakathon</a>
+<ul class='toc-indentation'>
+<li><a href='#OakathonNovember2018-EnableCIforCloudDataStores'>Enable CI for Cloud Data Stores</a>
+<ul class='toc-indentation'>
+<li><a href='#OakathonNovember2018-PrototypeResults'>Prototype Results</a></li>
+</ul>
+</li>
+<li><a href='#OakathonNovember2018-OakCapabilities'>Oak Capabilities</a>
+<ul class='toc-indentation'>
+<li><a href='#OakathonNovember2018-Prototypeof&#39;ApacheSlingCapabilities-OakRepositoryDescriptors&#39;'>Prototype of &#39;Apache Sling Capabilities - Oak Repository Descriptors&#39;</a>
+<ul class='toc-indentation'>
+<li><a href='#OakathonNovember2018-part1:exposingthedescriptorsascapabilities'>part 1 : exposing the descriptors as capabilities</a></li>
+<li><a href='#OakathonNovember2018-part2:actuallycreatingadescriptorwhichdeclaresavailabilityofS3binaryupload'>part 2 : actually creating a descriptor which declares availability of S3 binary upload</a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li><a href='#OakathonNovember2018-Modularization'>Modularization</a></li>
+</ul>
+</li>
+</ul>
+</div>
+
+<h1 id="OakathonNovember2018-WhereandWhen">Where and When</h1>
+<ul>
+	<li>November 5th - 9th 2018</li>
+	<li>Location: Bucharest</li>
+	<li>Meeting Rooms: Game of Thrones 7C (5. - 7., 9.), Breaking Bad 7A (8.)
+<br class="atl-forced-newline"/></li>
+</ul>
+
+
+<h1 id="OakathonNovember2018-Attendees">Attendees</h1>
+<div class="table-wrap"><table class="confluenceTable"><tbody>
+<tr>
+<td class="confluenceTd"><p> Who              </p></td>
+<td class="confluenceTd"><p>  When      </p></td>
+</tr>
+<tr>
+<td class="confluenceTd"><p>Andrei Dulceanu</p></td>
+<td class="confluenceTd"><p>5. - 8.</p></td>
+</tr>
+<tr>
+<td class="confluenceTd"><p>Bogdan Ieran Draghiciu</p></td>
+<td class="confluenceTd"><p>5. - 9.</p></td>
+</tr>
+<tr>
+<td class="confluenceTd"><p>Michael Dürig</p></td>
+<td class="confluenceTd"><p>6. - 9. </p></td>
+</tr>
+<tr>
+<td class="confluenceTd"><p>Marcel Reutegger</p></td>
+<td class="confluenceTd"><p>5. - 8. (remote) </p></td>
+</tr>
+<tr>
+<td class="confluenceTd"><p>Francesco Mari</p></td>
+<td class="confluenceTd"><p>6. - 9.</p></td>
+</tr>
+<tr>
+<td class="confluenceTd"><p>Axel Hanikel</p></td>
+<td class="confluenceTd"><p>5. - 9.</p></td>
+</tr>
+<tr>
+<td class="confluenceTd"><p>Matt Ryan</p></td>
+<td class="confluenceTd"><p>5. - 9.</p></td>
+</tr>
+<tr>
+<td class="confluenceTd"><p>Tomek Rękawek</p></td>
+<td class="confluenceTd"><p>5. - 9.</p></td>
+</tr>
+<tr>
+<td class="confluenceTd"><p>Thomas Müller</p></td>
+<td class="confluenceTd"><p>6. - 8. (remote) </p></td>
+</tr>
+<tr>
+<td class="confluenceTd"><p>Stefan Egli</p></td>
+<td class="confluenceTd"><p>5. - 8. (remote) </p></td>
+</tr>
+<tr>
+<td class="confluenceTd"><p>Julian Reschke</p></td>
+<td class="confluenceTd"><p>5. - 9. (remote) (Tuesday and Thursday afternoon only) </p></td>
+</tr>
+</tbody></table></div>
+
+
+<h1 id="OakathonNovember2018-Topics/Discussions/Goals">Topics/Discussions/Goals</h1>
+<div class="table-wrap"><table class="confluenceTable"><tbody>
+<tr>
+<td class="confluenceTd"><p> Title        </p></td>
+<td class="confluenceTd"><p> Summary                 </p></td>
+<td class="confluenceTd"><p> Effort                      </p></td>
+<td class="confluenceTd"><p> Participants                           </p></td>
+<td class="confluenceTd"><p> Proposed by </p></td>
+</tr>
+<tr>
+<td class="confluenceTd"><p> Independently-Releasable Oak Module </p></td>
+<td class="confluenceTd"><p> In the last Oakathon we discussed making it possible to release some Oak modules independently.  We could try to split one out during the Oakathon to see what is required to make this work and determine the feasibility of the effort. Maybe another outcome could be to evaluate which modules it makes sense to release independently and which ones don't make sense. </p></td>
+<td class="confluenceTd"><p> 2-5d </p></td>
+<td class="confluenceTd"><p> </p></td>
+<td class="confluenceTd"><p> Matt Ryan </p></td>
+</tr>
+<tr>
+<td class="confluenceTd"><p> Enable CI for cloud blob storage </p></td>
+<td class="confluenceTd"><p> In the last Oakathon we talked about CI for the cloud-dependent bundles (e.g. <code>oak-blob-cloud</code>, <code>oak-blob-cloud-azure</code>). We could pick one and try to get CI working for it using a storage emulator (e.g. <a href="https://github.com/adobe/S3Mock" class="external-link" rel="nofollow">S3Mock</a> for <code>oak-blob-cloud</code> - <a href="https://issues.apache.org/jira/browse/OAK-7743" class="external-link" rel="nofollow">OAK-7743</a>, <a href="https://github.com/azure/azurite" class="external-link" rel="nofollow">Azurite</a> for <code>oak-blob-cloud-azure</code> - <a href="https://issues.apache.org/jira/browse/OAK-7742" class="external-link" rel="nofollow">OAK-7742</a>) and document any gaps in the emulator that would need addressing (e.g. direct binary access capabilities). </p></td>
+<td class="confluenceTd"><p> 2-5d </p></td>
+<td class="confluenceTd"><p> Matt Ryan and at least one more person </p></td>
+<td class="confluenceTd"><p> Matt Ryan </p></td>
+</tr>
+<tr>
+<td class="confluenceTd"><p> Oak Capabilities </p></td>
+<td class="confluenceTd"><p> The <a href="https://github.com/apache/sling-org-apache-sling-capabilities" class="external-link" rel="nofollow">Sling Capabilities module</a> is a fairly new Sling module that allows a user to query the system capabilities.  I'd like to explore how we could make it possible for this functionality to determine repository capabilities and provide them to users - or if we should even do this in Oak.  One use case for this is for a remote client to determine whether direct binary access is available.  </p></td>
+<td class="confluenceTd"><p> 2h </p></td>
+<td class="confluenceTd"><p> Everyone interested, Stefan Egli </p></td>
+<td class="confluenceTd"><p> Matt Ryan </p></td>
+</tr>
+<tr>
+<td class="confluenceTd"><p> OAK-7511        </p></td>
+<td class="confluenceTd"><p> 1.8, null annotations, and impact on backports (tracked in OAK-7669)</p></td>
+<td class="confluenceTd"><p> 1h </p></td>
+<td class="confluenceTd"><p> </p></td>
+<td class="confluenceTd"><p> Julian Reschke </p></td>
+</tr>
+<tr>
+<td class="confluenceTd"><p> Branching Oak 1.10 </p></td>
+<td class="confluenceTd"><p> ...and Jackrabbit 2.18 </p></td>
+<td class="confluenceTd"><p> 1h </p></td>
+<td class="confluenceTd"><p> Davide Giannella, Julian Reschke </p></td>
+<td class="confluenceTd"><p> Julian Reschke </p></td>
+</tr>
+</tbody></table></div>
+
+
+<h1 id="OakathonNovember2018-AgendaProposal">Agenda Proposal</h1>
+
+<h2 id="OakathonNovember2018-Monday">Monday</h2>
+
+<ul>
+	<li>Morning: Enable CI for cloud blob storage, OAK-7511 and Oak Capabilities
+<br class="atl-forced-newline"/></li>
+</ul>
+
+
+<h2 id="OakathonNovember2018-Tuesday">Tuesday</h2>
+
+<ul>
+	<li>After lunch: Independently-Releasable Oak Module.
+<br class="atl-forced-newline"/></li>
+</ul>
+
+
+<h2 id="OakathonNovember2018-Wednesday">Wednesday</h2>
+
+<h2 id="OakathonNovember2018-Thursday">Thursday</h2>
+
+<h2 id="OakathonNovember2018-Friday">Friday</h2>
+
+<h1 id="OakathonNovember2018-PrepWork">Prep Work</h1>
+
+<h1 id="OakathonNovember2018-NotesfromtheOakathon">Notes from the Oakathon</h1>
+
+<h2 id="OakathonNovember2018-EnableCIforCloudDataStores">Enable CI for Cloud Data Stores</h2>
+<p>We discussed this issue and the proposal to try using S3Mock for S3 data store and azurite for Azure data store.  The following topics were discussed:</p>
+
+<ul>
+	<li>Mock frameworks by definition lag behind the official implementation.  Using a mock framework can be helpful, but we need to be sure we also continue to run the tests against the real thing to make sure we aren't blind to critical implementation differences.</li>
+	<li>One of the issues we have is that it is not obvious when the S3 and Azure data store unit tests are ignored and not actually executed.  It is reasonable to expect that a developer working on the S3 data store also has an S3 account and is therefore running all the unit tests.  However it is also possible that changes could occur lower in the stack, done by someone not working directly on the cloud data stores, and running the full test suite gives a false sense that everything is fine when it is possible that something broke in the cloud data stores as a result of the change.</li>
+	<li>These tests are also not being executed during release voting.  Voters run the release check and report their results, but the S3 and Azure data store tests aren't running at this time.  We need to include in the release check report which backends were tested (if any) and provide instructions  for how to run the S3 and Azure data store tests to those running the release check.</li>
+	<li>Adding a mock framework for S3 and Azure seems the wrong prioritization.  The most important thing is to make sure the tests are running, and we can solve those problems first, and then worry about mocks.
+<br class="atl-forced-newline"/></li>
+</ul>
+
+
+<p>The proposal for moving forward is:</p>
+
+<ol>
+	<li>In addition to the Apache CI, Adobe is also running CI for Oak internally.  We can't provide S3 or Azure credentials to the public-facing Apache CI system, but we can do this internally at Adobe at least, and that's better than no testing at all.  So we should start by checking the Adobe CI and making sure we are also running the S3 and Azure data store tests as part of that CI. 2. We need to make it more clear when running test suites that the S3 and Azure data store tests aren't being executed, and indicate what needs to be done to enable them. 3. We need to report which backends were tested by the release check, if any, and if any backend is not tested indicate via message to the user what can be done to configure a backend so the backends are tested. 4. Once all of those things are done we can revisit the implementation of mocks, as we still think it would be good to do.
+<br class="atl-forced-newline"/></li>
+</ol>
+
+
+<h3 id="OakathonNovember2018-PrototypeResults">Prototype Results</h3>
+<p>We tried this out in Jenkins with a configured storage container for each service with access tokens for each service.  The config was provided to the build using the <code>-Ds3.config option</code> for !S3DataStore  and <code>-Dazure.config</code> for AzureDataStore.  We were able to perform successful CI builds of the Oak codebase using these config files and see that all the tests for the cloud data stores were executed (not ignored as before).</p>
+
+<p><a href="https://issues.apache.org/jira/browse/OAK-7887" class="external-link" rel="nofollow">OAK-7887</a> was found during this process.  A quick fix was prototyped to isolate the problem to the creation of the container in the <code>init()</code> function of the S3 backend, where presumably some test threads are trying to delete the container at the same time as others are trying to create it.  Wrapping the create bucket call in a loop with a limited number of retries solved the problem.  Further investigation is warranted to figure out the best way of handling this in the production and test code.</p>
+
+<p>The cloud data stores are subject to occasional test failures caused by network glitches or service glitches, etc.  These don't happen frequently but they do have the potential to cause a build to report a failure due to no issues with the code itself.  We instead could create separate CI jobs in Jenkins, one for each cloud data store, that only builds that data store and runs the tests, and leave the regular CI build alone.  For example, to do this for <code>oak-blob-cloud</code> you can run <code>mvn clean test -pl oak-blob-cloud -am -Ds3.config=&lt;file&gt;</code>.  Doing this in separate builds allows us to get CI going for these data stores without failing the main build due to external issues.</p>
+
+<h2 id="OakathonNovember2018-OakCapabilities">Oak Capabilities</h2>
+<p>Sling has a new <a href="https://github.com/apache/sling-org-apache-sling-capabilities" class="external-link" rel="nofollow">Sling Capabilities module</a> which allows an HTTP client to determine specific capabilities supported by the system.</p>
+
+<p>The first topic to be discussed was, should we even worry about trying to support this in Oak?  After some discussion we seemed to align with the position that doing so would be useful for Oak.  The argument was made that while it is currently possible to make a determination that a capability should be available (for example, by calling an API and getting an exception or null value returned), it would be preferable to have a method that is specifically designed to answer the question of whether a capability is available or not, rather than relying on a convention or side effect of another API not designed to answer this specific question.</p>
+
+<p>The next thing discussed was an approach to the problem.  We want to avoid a tight coupling between Sling and Oak.  In particular we don't want a pattern where there is a 1:1 relationship between an Oak capability and a Sling Capabilities provider.  At best that potentially means lots of Sling providers; at worst, it means potentially long lead times between when a capability is available in Oak and when it can be queried through Sling since Sling depends on a stable oak release (e.g. direct binary access - the feature is in Oak trunk now, but a Sling provider specifically for direct binary access could not be released in Sling until after the next Oak stable release).  We discussed a couple of ways to do this, including JMX and repository descriptors.</p>
+
+<p>After discussion around JMX we started leaning away from it due to inconsistencies between when the repository becomes available in OSGi and when a JMX Mbean would become available.  This could lead to situations where a capability is reported as unavailable even if it is available.  It would be preferable to tie the lifecycle of a capability to the lifecycle of the service providing it.  This puts us more in favor of repository descriptors, which are simply registered with OSGi at the time the service starts.</p>
+
+<h3 id="OakathonNovember2018-Prototypeof&#39;ApacheSlingCapabilities-OakRepositoryDescriptors&#39;">Prototype of 'Apache Sling Capabilities - Oak Repository Descriptors'</h3>
+<p>Note that 'Sling Capabilities' is still a very young project and there's currently a <a href="https://sling.markmail.org/thread/l2ygknp7adkrlldi" class="external-link" rel="nofollow">discussion</a> going on about it on the  sling list.</p>
+
+<h4 id="OakathonNovember2018-part1:exposingthedescriptorsascapabilities">part 1 : exposing the descriptors as capabilities</h4>
+<p><a href="https://github.com/apache/sling-whiteboard/tree/master/capabilities-oak" class="external-link" rel="nofollow">https://github.com/apache/sling-whiteboard/tree/master/capabilities-oak</a></p>
+<h4 id="OakathonNovember2018-part2:actuallycreatingadescriptorwhichdeclaresavailabilityofS3binaryupload">part 2 : actually creating a descriptor which declares availability of S3 binary upload</h4>
+<p><a href="attachments/115513481/115513482.descriptor" data-linked-resource-id="115513482" data-linked-resource-version="1" data-linked-resource-type="attachment" data-linked-resource-default-alias="store.data.binary.upload.descriptor" data-linked-resource-content-type="application/octet-stream" data-linked-resource-container-id="115513481" data-linked-resource-container-version="1">store.data.binary.upload.descriptor</a></p>
+
+<h2 id="OakathonNovember2018-Modularization">Modularization</h2>
+
+<p>Different modules were discussed as candidates to try out releasing a module independently. Modules that were considered easier and a better start are oak-api and oak-commons. Similarly modules in Jackrabbit could also be released independently (e.g. jackrabbit-api), which may make it easier in the future to add new features. Adding a new method or interface to jackrabbit-api would then only require a new release of the API bundle and not the entire Jackrabbit project. However, to keep things simple for now, an Oak module will be picked for a prototype.</p>
+
+<p>Previous discussions with open questions and concerns can be found on the <a href="https://wiki.apache.org/jackrabbit/Oakathon%20September%202018#Modularization" class="external-link" rel="nofollow">September 2018 Oakathon</a> wiki page. The goal of the prototype should be to find answers to those questions and point out which of those didn't apply to the picked module.</p>
+
+<p>The prototype is on <a href="https://github.com/mattvryan/jackrabbit-oak/tree/oak-api-modularization" class="external-link" rel="nofollow">GitHub</a>.</p>
+                    </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/115513481/115513482.descriptor">store.data.binary.upload.descriptor</a> (application/octet-stream)
+                                <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/Oakathon-November-2018_115513481.html
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jackrabbit/site/live/archive/wiki/JCR/Oakathon-November-2018_115513481.html
------------------------------------------------------------------------------
    svn:executable = *

Added: jackrabbit/site/live/archive/wiki/JCR/Oakathon-September-2018_115513483.html
URL: http://svn.apache.org/viewvc/jackrabbit/site/live/archive/wiki/JCR/Oakathon-September-2018_115513483.html?rev=1859550&view=auto
==============================================================================
--- jackrabbit/site/live/archive/wiki/JCR/Oakathon-September-2018_115513483.html (added)
+++ jackrabbit/site/live/archive/wiki/JCR/Oakathon-September-2018_115513483.html Mon May 20 11:23:18 2019
@@ -0,0 +1,343 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <title>Apache Jackrabbit : Oakathon September 2018</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 : Oakathon September 2018
+                        </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">
+                    
+<style type='text/css'>/*<![CDATA[*/
+div.rbtoc1558350683193 {padding: 0px;}
+div.rbtoc1558350683193 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1558350683193 li {margin-left: 0px;padding-left: 0px;}
+
+/*]]>*/</style><div class='toc-macro rbtoc1558350683193'>
+<ul class='toc-indentation'>
+<li><a href='#OakathonSeptember2018-WhereandWhen'>Where and When</a></li>
+<li><a href='#OakathonSeptember2018-Attendees'>Attendees</a></li>
+<li><a href='#OakathonSeptember2018-Topics/Discussions/Goals'>Topics/Discussions/Goals</a></li>
+<li><a href='#OakathonSeptember2018-AgendaProposal'>Agenda Proposal</a>
+<ul class='toc-indentation'>
+<li><a href='#OakathonSeptember2018-Monday'>Monday</a></li>
+<li><a href='#OakathonSeptember2018-Tuesday'>Tuesday</a></li>
+<li><a href='#OakathonSeptember2018-Wednesday'>Wednesday</a></li>
+<li><a href='#OakathonSeptember2018-Thursday'>Thursday</a></li>
+<li><a href='#OakathonSeptember2018-Friday'>Friday</a></li>
+</ul>
+</li>
+<li><a href='#OakathonSeptember2018-PrepWork'>Prep Work</a></li>
+<li><a href='#OakathonSeptember2018-NotesfromtheOakathon'>Notes from the Oakathon</a>
+<ul class='toc-indentation'>
+<li><a href='#OakathonSeptember2018-CITestingforcloud-basedOakcomponents'>CI Testing for cloud-based Oak components</a></li>
+<li><a href='#OakathonSeptember2018-Modularization'>Modularization</a></li>
+</ul>
+</li>
+</ul>
+</div>
+
+<h1 id="OakathonSeptember2018-WhereandWhen">Where and When</h1>
+<ul>
+	<li>September 3rd - 7th 2018</li>
+	<li>Location: <a href="https://goo.gl/maps/7sMbCv4HsXT2" class="external-link" rel="nofollow">Adobe Basel</a>, Rhein meeting room (5th floor), guests please register at reception on 2nd floor.
+<br class="atl-forced-newline"/></li>
+</ul>
+
+
+<h1 id="OakathonSeptember2018-Attendees">Attendees</h1>
+<div class="table-wrap"><table class="confluenceTable"><tbody>
+<tr>
+<td class="confluenceTd"><p> Who              </p></td>
+<td class="confluenceTd"><p>  When      </p></td>
+</tr>
+<tr>
+<td class="confluenceTd"><p>Marcel Reutegger  </p></td>
+<td class="confluenceTd"><p>	3. - 6.   </p></td>
+</tr>
+<tr>
+<td class="confluenceTd"><p>Michael Dürig     </p></td>
+<td class="confluenceTd"><p>	3. - 7. except for Wed. </p></td>
+</tr>
+<tr>
+<td class="confluenceTd"><p>Matt Ryan         </p></td>
+<td class="confluenceTd"><p>  3. - 6.   </p></td>
+</tr>
+<tr>
+<td class="confluenceTd"><p>Robert Munteanu   </p></td>
+<td class="confluenceTd"><p>  5. - 7.   </p></td>
+</tr>
+<tr>
+<td class="confluenceTd"><p>Andrei Dulceanu   </p></td>
+<td class="confluenceTd"><p>  3. - 7.   </p></td>
+</tr>
+<tr>
+<td class="confluenceTd"><p>Axel Hanikel      </p></td>
+<td class="confluenceTd"><p>  3. - 7.   </p></td>
+</tr>
+<tr>
+<td class="confluenceTd"><p>Bogdan Ieran      </p></td>
+<td class="confluenceTd"><p>  3. - 7.   </p></td>
+</tr>
+<tr>
+<td class="confluenceTd"><p>Thomas Mueller    </p></td>
+<td class="confluenceTd"><p>  4. - 7.   </p></td>
+</tr>
+<tr>
+<td class="confluenceTd"><p>Julian Reschke    </p></td>
+<td class="confluenceTd"><p>  3. - 7. (remotely, except Tuesday morning)  </p></td>
+</tr>
+</tbody></table></div>
+
+
+<h1 id="OakathonSeptember2018-Topics/Discussions/Goals">Topics/Discussions/Goals</h1>
+<div class="table-wrap"><table class="confluenceTable"><tbody>
+<tr>
+<td class="confluenceTd"><p> Title        </p></td>
+<td class="confluenceTd"><p> Summary                 </p></td>
+<td class="confluenceTd"><p> Effort                      </p></td>
+<td class="confluenceTd"><p> Participants                           </p></td>
+<td class="confluenceTd"><p> Proposed by </p></td>
+</tr>
+<tr>
+<td class="confluenceTd"><p> CI Testing for cloud-based Oak components </p></td>
+<td class="confluenceTd"><p> While we currently have good test coverage for Oak cloud-based data stores (!S3DataStore and AzureDataStore), these tests require that the person running them have an account with the service provider and that their environment is configured properly to use their cloud service account for the tests.  This makes them ill-suited for CI.  We should come up with a good plan to allow CI testing on these components in a way that doesn't risk exposing any individual's cloud account credentials. </p></td>
+<td class="confluenceTd"><p> 1-2h discussion </p></td>
+<td class="confluenceTd"><p> Matt Ryan, Amit Jain, Tomek Rekawek, Bogdan Ieran, others?? </p></td>
+<td class="confluenceTd"><p> Matt Ryan </p></td>
+</tr>
+<tr>
+<td class="confluenceTd"><p> Direct Binary Access contribution post-mortem </p></td>
+<td class="confluenceTd"><p> I'd like to discuss this latest contribution to Oak, to see how I can do this better in the future. </p></td>
+<td class="confluenceTd"><p> 1h discussion </p></td>
+<td class="confluenceTd"><p> Matt Ryan, Marcel Reutegger, Michael Duerig, Amit Jain, Julian Reschke, Bogdan Ieran, anyone else who wants to attend </p></td>
+<td class="confluenceTd"><p> Matt Ryan </p></td>
+</tr>
+<tr>
+<td class="confluenceTd"><p> Golden Master: variants and alternatives </p></td>
+<td class="confluenceTd"><p> Can we do a way with the golden master entirely removing a potential single point of failure? Can we leverage the pipeline to move segments around? Can we avoid copying &quot;old&quot; segments to new publish instances? </p></td>
+<td class="confluenceTd"><p> </p></td>
+<td class="confluenceTd"><p> Francesco Mari, Andrei Dulceanu, Axel Hanikel, Michael Dürig, Bogdan Ieran, Tomek Rekawek </p></td>
+<td class="confluenceTd"><p> Michael Dürig </p></td>
+</tr>
+<tr>
+<td class="confluenceTd"><p> Modularization: single module release </p></td>
+<td class="confluenceTd"><p> Evaluate modularizing a single leaf module from the Oak codebase and start releasing it independently </p></td>
+<td class="confluenceTd"><p> 1d </p></td>
+<td class="confluenceTd"><p> Robert Muntenau </p></td>
+<td class="confluenceTd"><p> Robert Munteanu </p></td>
+</tr>
+<tr>
+<td class="confluenceTd"><p> JCR Locking deprecation </p></td>
+<td class="confluenceTd"><p> State in Oak, plans for Sling and AEM? </p></td>
+<td class="confluenceTd"><p> 1h </p></td>
+<td class="confluenceTd"><p> ? </p></td>
+<td class="confluenceTd"><p> Julian Reschke </p></td>
+</tr>
+</tbody></table></div>
+
+
+<h1 id="OakathonSeptember2018-AgendaProposal">Agenda Proposal</h1>
+
+<h2 id="OakathonSeptember2018-Monday">Monday</h2>
+
+<ul>
+	<li>9:30 - 10:30 Present proposals and schedule sessions</li>
+	<li>13:30 - 14:30 Golden Master: variants and alternatives kick off
+<br class="atl-forced-newline"/></li>
+</ul>
+
+
+<h2 id="OakathonSeptember2018-Tuesday">Tuesday</h2>
+
+<ul>
+	<li>10:30 - 11:30 GM alternative topologies. Sync up and discussion of Tomek's ideas</li>
+	<li>1:30 - 2:30 Offline text extraction POC (Matt &amp; Thomas)
+<br class="atl-forced-newline"/></li>
+</ul>
+
+
+<h2 id="OakathonSeptember2018-Wednesday">Wednesday</h2>
+
+<ul>
+	<li>13:30 - 16:00 Modularization: single module releases
+<br class="atl-forced-newline"/></li>
+</ul>
+
+
+<h2 id="OakathonSeptember2018-Thursday">Thursday</h2>
+
+<ul>
+	<li>9:15 - 10:30 Direct binary access post-mortem</li>
+	<li>14:30 - 16:00 CI Testing for cloud-based Oak components</li>
+	<li>16:00 - 17:00 Wrap-up part one
+<br class="atl-forced-newline"/></li>
+</ul>
+
+
+<h2 id="OakathonSeptember2018-Friday">Friday</h2>
+
+<ul>
+	<li>16:00 - 17:00 Wrap-up part two
+<br class="atl-forced-newline"/></li>
+</ul>
+
+
+<h1 id="OakathonSeptember2018-PrepWork">Prep Work</h1>
+
+<h1 id="OakathonSeptember2018-NotesfromtheOakathon">Notes from the Oakathon</h1>
+
+<h2 id="OakathonSeptember2018-CITestingforcloud-basedOakcomponents">CI Testing for cloud-based Oak components</h2>
+
+<p>Oak already has tests using docker and azurite. See module oak-segment-azure.</p>
+
+<p>The Apache build infrastructure (builds.apache.org) seems to have docker installed, though it is not clear whether all slave nodes support it. See notes about <a href="https://cwiki.apache.org/confluence/display/INFRA/Old+Jenkins+node+labels" rel="nofollow">old Jenkins node labels</a>.</p>
+
+<p>Since we already are using docker and azurite for oak-segment-store, the proposal is to also use azurite for oak-blob-cloud-azure and to use something similar (s3mock) for oak-blob-cloud.  Likewise, the proposal is to also take a similar approach for other modules requiring external infrastructure for complete test coverage, like MongoMK and RDBMK for example - using appropriate docker containers.</p>
+
+<p>Tests would need to be modified to leverage the capability, and should be aware whether the external infrastructure is available or not.</p>
+
+<p>By default, tests should simply skip the external dependencies, so that new users running the tests don't get failures due to not having the supported infrastructure set up.  We should define a flag so that it is possible to signify that you want to run all of the tests.</p>
+
+<p><a href="https://issues.apache.org/jira/browse/OAK-7740" class="external-link" rel="nofollow">OAK-7740</a> was created to track this issue.</p>
+
+<h2 id="OakathonSeptember2018-Modularization">Modularization</h2>
+
+<p>The proposal is to build on top of the current modularization work ( <a href="https://issues.apache.org/jira/browse/OAK-6069" class="external-link" rel="nofollow">OAK-6069 - Modularisation of Oak</a> ) and prototype releasing a single module independently. The aim is to get a sense of what is needed for single module releases and assess whether we want to do that for the whole Oak project.</p>
+
+<p>The following topics were discussed</p>
+
+<ul>
+	<li>Dependencies
+	<ul>
+		<li>Currently dependencies to other oak modules use the same version as the one in the reactor, e.g. 1.10-SNAPSHOT now. If we release modules independently that will no longer work - they need to be released versions. The question is - which version? We can use either of a) the latest release, b) the first release of the latest stable branch or c) the version minimally required from an API + implementation point of view</li>
+		<li>A special case of the dependencies is the parent pom. We use it for plugin settings and configurations, but also for dependency versions via the dependencyManagement pom element. We can no longer depend on SNAPSHOT versions of the parent, so this should be a release. The downside is that for each and every version bump in the oak project we would need to release a new parent pom version. A compromise would be to define versions only for truly global dependencies ( e.g. junit/mockito ).
+<br class="atl-forced-newline"/></li>
+	</ul>
+	</li>
+	<li>Supported Oak versions
+	<ul>
+		<li>Once we modularise a project we need to decide which Oak versions it would support. It may happen that a module is tied to a certain Oak stream ( e.g. 1.6.x ) or that it supports all maintained streams ( e.g. 1.2.x → trunk ).
+<br class="atl-forced-newline"/></li>
+	</ul>
+	</li>
+	<li>Which version is the first modularized release going to be:
+	<ul>
+		<li>Currently all Oak versions are in lock-step. With a new modularized release versions numbers will probably drift away so we need to make a conscious decision regarding versioning policy.
+		<ul>
+			<li>Continue from the next version, e.g. after 1.9.8 release 1.9.9, 1.9.10, etc</li>
+			<li>Change the bundle name, start from 1.0
+			<ul>
+				<li>Addtionally, encode the supported Oak stream name, e.g. 1.0.0-1.8</li>
+			</ul>
+			</li>
+			<li>Bump the major version as a one-time change, e.g. start from 2.0</li>
+		</ul>
+		</li>
+		<li>The discussion favoured the major version bump
+<br class="atl-forced-newline"/></li>
+	</ul>
+	</li>
+	<li>Dependency on unstable releases
+	<ul>
+		<li>A point was raised that we should not depend on unstable Oak release from an independently released modules</li>
+		<li>However, this means that for the whole lifetime of an Oak unstable release we could not depend on new changes, only after making a stable release
+<br class="atl-forced-newline"/></li>
+	</ul>
+	</li>
+	<li>How to run integration tests with a separately released module?
+	<ul>
+		<li>Currently we exercise the whole Oak codebase in a reactor build, so for instance a change in oak-api will get tested with all other modules</li>
+		<li>We should be able to run tests with adjusted dependency versions, similar to the AEM evergreen setup
+		<ul>
+			<li>Package + deploy all test artifacts</li>
+			<li>Run the tests with a different classpath, e.g. run with latest SNAPSHOT versions
+<br class="atl-forced-newline"/></li>
+		</ul>
+		</li>
+	</ul>
+	</li>
+	<li>What is the future expected release cadence?
+	<ul>
+		<li>This ties in to the 'dependency on unstable releases' point.</li>
+		<li>What do we expect/want the Oak release schedule to be in the future?
+		<ul>
+			<li>More frequent releases?</li>
+			<li>Give up on unstable releases?</li>
+			<li>What would a fully modularized release look like?</li>
+		</ul>
+		</li>
+		<li>How do we make it easier for projects outside Oak to consume API/feature changes? Currently the 'unstable' label discourages API dependencies from e.g. Sling
+<br class="atl-forced-newline"/></li>
+	</ul>
+	</li>
+	<li>Which modules do we want to use for the m12n prototype?
+	<ul>
+		<li>modules with few outgoing dependencies, such as oak-api?</li>
+		<li>modules with few incoming dependencies, such as oak-blob-cloud-azure?</li>
+		<li>stable modules from Jackrabbit, such as jackrabbit-webdav?
+<br class="atl-forced-newline"/></li>
+	</ul>
+	</li>
+	<li>How can we ensure that we can revert the m12n release work?
+	<ul>
+		<li>Current changes would be to remove a module from the reactor and change all dependencies to releases?</li>
+		<li>What to do if we release and then decide it was not a good idea?
+		<ul>
+			<li>one proposal was to change the artifactId
+<br class="atl-forced-newline"/></li>
+		</ul>
+		</li>
+	</ul>
+	</li>
+	<li>How can we make sure that contributing does not become harder after starting with modularized releases?
+<br class="atl-forced-newline"/></li>
+	<li>We need to update our CI environment to make sure independent modules are tested, since they will no longer be a part of the reactor.
+<br class="atl-forced-newline"/></li>
+	<li>The release check tooling needs to be updated</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/Oakathon-September-2018_115513483.html
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jackrabbit/site/live/archive/wiki/JCR/Oakathon-September-2018_115513483.html
------------------------------------------------------------------------------
    svn:executable = *

Added: jackrabbit/site/live/archive/wiki/JCR/Observation_115513484.html
URL: http://svn.apache.org/viewvc/jackrabbit/site/live/archive/wiki/JCR/Observation_115513484.html?rev=1859550&view=auto
==============================================================================
--- jackrabbit/site/live/archive/wiki/JCR/Observation_115513484.html (added)
+++ jackrabbit/site/live/archive/wiki/JCR/Observation_115513484.html Mon May 20 11:23:18 2019
@@ -0,0 +1,79 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <title>Apache Jackrabbit : Observation</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 : Observation
+                        </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>In addition to JCR observation, Jackrabbit support cluster-aware event processing and synchronous observation listeners.</p>
+
+<h2 id="Observation-Cluster-AwareEventProcessing">Cluster-Aware Event Processing</h2>
+
+<p>Sometimes events must only be processed by the cluster node where the event originated, or only by cluster nodes where the event didn't originate. Each event contains an 'external' flag that indicated whether the event originated on another cluster node, that means whether the code that manipulated the node ran in another cluster node. Example source code:</p>
+
+<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
+<pre>import org.apache.jackrabbit.api.observation.JackrabbitEvent;
+public void onEvent(EventIterator events) {
+    while (events.hasNext()) {
+    Event e = events.nextEvent();
+    if (e instanceof JackrabbitEvent &amp;&amp; ((JackrabbitEvent) e).isExternal()) {
+        // event originated in another cluster node
+    } else {
+        // event originated in this cluster node
+    }
+}
+</pre>
+</div></div>
+
+<h2 id="Observation-SynchronousObservationListener">Synchronous Observation Listener</h2>
+
+<p>By default Jackrabbit call observation listeners some time after the event occurs. However, synchronous observation is supported as well. To use it, the observation listener needs to implement the interface org.apache.jackrabbit.core.observation.Synchronous{{`Event}}`Listener. Please note that this interface is <em>not</em> part of the Jackrabbit API, and should only be used if really required.</p>
+
+<p>A synchronous event listener should never write to the repository using the same session that was used to create 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/Observation_115513484.html
------------------------------------------------------------------------------
    svn:eol-style = native

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

Added: jackrabbit/site/live/archive/wiki/JCR/Overlay-Blob-Store_115513485.html
URL: http://svn.apache.org/viewvc/jackrabbit/site/live/archive/wiki/JCR/Overlay-Blob-Store_115513485.html?rev=1859550&view=auto
==============================================================================
--- jackrabbit/site/live/archive/wiki/JCR/Overlay-Blob-Store_115513485.html (added)
+++ jackrabbit/site/live/archive/wiki/JCR/Overlay-Blob-Store_115513485.html Mon May 20 11:23:18 2019
@@ -0,0 +1,184 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <title>Apache Jackrabbit : Overlay Blob Store</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 : Overlay Blob Store
+                        </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="OverlayBlobStore-OverlayBlobStore">Overlay Blob Store</h1>
+
+<p>NOTE:  The current status of this component is a <strong>proposed feature</strong>.</p>
+
+<h2 id="OverlayBlobStore-Overview">Overview</h2>
+<p>The overlay blob store is a multi-source blob store - a logical blob store consisting of at least two delegate blob stores.  In the case of the overlay blob store, the union of all the data in all the delegate blob stores is presented to a user of the overlay blob store as a single logical &quot;view&quot; of the data being stored.</p>
+
+<p>Example:</p>
+
+<p><strong>Delegate Blob Store A</strong></p>
+<ul>
+	<li>FileA</li>
+	<li>FileC</li>
+	<li>FileE
+<br class="atl-forced-newline"/></li>
+</ul>
+
+
+<p><strong>Delegate Blob Store B</strong></p>
+<ul>
+	<li>FileB</li>
+	<li>FileE</li>
+	<li>FileF</li>
+	<li>FileG
+<br class="atl-forced-newline"/></li>
+</ul>
+
+
+<p><strong>Overlay Blob Store View</strong></p>
+<ul>
+	<li>FileA</li>
+	<li>FileB</li>
+	<li>FileC</li>
+	<li>FileE</li>
+	<li>FileF</li>
+	<li>FileG
+<br class="atl-forced-newline"/></li>
+</ul>
+
+
+<p>The delegates for the overlay blob store are specified in configuration.  Part of the configuration must include an indication of the priority of each delegate blob store.  Reads and writes will be attempted in the order specified by the priority.</p>
+
+<h3 id="OverlayBlobStore-Reads">Reads</h3>
+<p>The overlay blob store fulfills read requests by attempting to satisfy the read request from each delegate.  The read is issued to each delegate in priority order.  Once a read is successfully satisfied by a delegate, the result of the delegate read is returned as the result of the overlay blob store read and no subsequent reads are attempted for that request.  It is possible for a blob to exist in more than one delegate.</p>
+
+<h3 id="OverlayBlobStore-Writes">Writes</h3>
+<p>The overlay blob store fulfills write requests by attempting to write to each delegate in priority order.  Once a write is successfully satisfied by a delegate, the result of the delegate write is returned as the result of the overlay blob store write and no subsequent writes are attempted for that request.</p>
+
+<h3 id="OverlayBlobStore-Read-OnlyDelegates">Read-Only Delegates</h3>
+<p>The overlay blob store supports the notion of a read-only delegate blob store.  One or more of the delegate blob stores can be configured in read-only mode, meaning that it can be used to satisfy read requests but not write requests.  An example use case for this scenario is where two content repositories are used, one for a production environment and one for a staging environment.  The staging repository can be configured with an overlay blob store that accesses to the production storage location in read-only mode, so tests can execute in staging using production data without modifying production data or the production store.</p>
+
+<p>Reads issued to a read-only delegate would be processed as normal.  Writes issued to a read-only delegate would fail, causing the overlay blob store to move on to the next delegate to attempt to fulfill the write request.</p>
+
+<p>Note that configuring all delegates of an overlay blob store would make the blob store useless for storing blobs and thus should not be an allowed condition - at least one delegate blob store must not be a read-only delegate.</p>
+
+<h3 id="OverlayBlobStore-Curation">Curation</h3>
+<p>Curation is the process of evaluating the blobs in a blob store to determine if that blob store is still the correct location for blobs to reside.  In the case of the overlay blob store, a reason to curate data may be to gradually move data from one level of storage to a more cost-effective level of storage in a different container or location.</p>
+
+<p>Curation is not in the scope of the overlay blob store; however, it may be prudent to add common curators to the same package in Oak in future efforts.</p>
+
+<h2 id="OverlayBlobStore-UseCases">Use Cases</h2>
+<h3 id="OverlayBlobStore-HierarchicalBlobStore">Hierarchical Blob Store</h3>
+<p>The overlay blob store directly addresses <a href="JCR-Binary-Usecase_115513420.html">JCR Binary Usecase</a> UC14 to store data in one of a number of blob stores based on a hierarchy.</p>
+
+<p>In the example below, blobs are initially stored in the FileDataStore and then once they are more than 30 days old are moved to !S3DataStore.  They can be read from either location.  Note that moving from one data store to the other fits under the category of curation, which is not in this scope.</p>
+
+<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
+<pre>+-------+
+|       |  &lt;30 Days Old  +---------------+
+|       +----------------&gt; FileDataStore |
+|       |                +---------------+
+|  Oak  |
+|       |
+|       |  &gt;=30 Days Old  +-------------+
+|       +-----------------&gt; S3DataStore |
+|       |                 +-------------+
++-------+
+</pre>
+</div></div>
+
+<h3 id="OverlayBlobStore-StagingEnvironment">Staging Environment</h3>
+<p>The overlay blob store can be used to address a production/staging deployment use case, where one Oak repository is the production repository and another is the staging repository.  The production repository accesses a single blob store.  The staging repository uses an overlay blob store to access a staging blob store as well as the production blob store in read-only mode.  Thus staging can serve blobs out of either blob store but can only modify blobs on the staging blob store.</p>
+
+<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
+<pre>+-----------------+        +-----------------+
+| Production Env  |        |   Staging Env   |
+| +-------------+ |        | +-------------+ |
+| |     Oak     | |    +-----+     Oak     | |
+| +------+------+ |    |   | +------+------+ |
+|        |        |  Read- |        |        |
+|        |        |  Only  |        |        |
+| +------V------+ |    |   | +------V------+ |
+| | S3DataStore &lt;------+   | | S3DataStore | |
+| +-------------+ |        | +-------------+ |
+|                 |        |                 |
++-----------------+        +-----------------+
+</pre>
+</div></div>
+
+<h3 id="OverlayBlobStore-S3DataStoreClustering">S3DataStore Clustering</h3>
+<p>The overlay blob store could be used to address <a href="JCR-Binary-Usecase_115513420.html">JCR Binary Usecase</a> UC9, where two Oak nodes in a cluster may both have a record of a blob in the node store but one node may temporarily not be able to access the blob in the case of async upload.  This could be addressed by using an overlay blob store where the first level blob store would be FileDataStore on an NFS mount and the second level blob store would be !S3DataStore without a cache.  The overlay blob store on each node will look for any asset in both the FileDataStore and the !S3DataStore, thus avoiding a split-brain scenario.</p>
+
+<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
+<pre>+-----------------------------+
+| Node 1                      |
+| +-----+                     |
+| |     |                     |
+| |     +-------------------------------+
+| | Oak |                     |         |
+| |     |   +---------------+ |         |
+| |     +--&gt;+ FileDataStore | |  +------V------+
+| |     |   +-------^-------+ |  | S3DataStore |
+| +-----+           |         |  +------+------+
++-------------------|---------+         |
+                    |            +------V------+
+                   NFS           |  S3 Bucket  | 
+                    |            +------^------+
++-------------------|---------+         |
+| Node 2            |         |  +------+------+
+| +-----+           |         |  | S3DataStore |
+| |     |   +-------V-------+ |  +------^------+
+| |     +---&gt; FileDataStore | |         |
+| | Oak |   +---------------+ |         |
+| |     |                     |         |
+| |     +-------------------------------+
+| |     |                     |
+| +-----+                     |
++-----------------------------+
+</pre>
+</div></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/Overlay-Blob-Store_115513485.html
------------------------------------------------------------------------------
    svn:eol-style = native

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

Added: jackrabbit/site/live/archive/wiki/JCR/Performance_115513486.html
URL: http://svn.apache.org/viewvc/jackrabbit/site/live/archive/wiki/JCR/Performance_115513486.html?rev=1859550&view=auto
==============================================================================
--- jackrabbit/site/live/archive/wiki/JCR/Performance_115513486.html (added)
+++ jackrabbit/site/live/archive/wiki/JCR/Performance_115513486.html Mon May 20 11:23:18 2019
@@ -0,0 +1,129 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <title>Apache Jackrabbit : Performance</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 : Performance
+                        </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="Performance-Q.MyXPathqueryistooslow.">Q. My XPath query is too slow.</h2>
+<ol>
+	<li>Quotes from mailist regarding XPath query performance can be found here: <a href="http://markmail.org/message/uew5xeyuzdb7v6bv" class="external-link" rel="nofollow">http://markmail.org/message/uew5xeyuzdb7v6bv</a>
+<br class="atl-forced-newline"/></li>
+</ol>
+
+
+<p>Performance of XPath queries is much better with 1.5 snapshot.</p>
+
+<h2 id="Performance-Q.Ihavetoomanychildnodesandperformancegoesdown.">Q. I have too many child nodes and performance goes down.</h2>
+<ol>
+	<li>The current internal Jackrabbit design is optimized for small to medium sized child node sets, i.e. up to ~10k child nodes per node. Really large child node sets negatively affect write performance.
+<br class="atl-forced-newline"/></li>
+</ol>
+
+
+<p>Please note that this is not a general issue of JCR but specific to Jackrabbit's current internal persistence strategy - independent from the fact if you use a normal persistence manager or a &quot;bundle&quot; persistence manager, albeit the latter one is recommended; see <a class="createlink" href="/confluence/pages/createpage.action?spaceKey=JCR&amp;title=PersistenceManager&amp;linkCreation=true&amp;fromPageId=115513486">PersistenceManager</a>FAQ. Each node contains the references to all its child nodes. This is a design decision inside Jackrabbit to improve speed when using few child nodes. To improve performance, introduce some extra-levels to your content model. This also helps humans to explore the repository when using a browser tool. Typical solutions are to use some categories of the context of your data or date folders, such as &quot;2009/01/09&quot;.</p>
+
+<p>From Jackrabbit 2.2 on there are some utility classes in the org.apache.jackrabbit.flat package of the jcr-commons module for automatically arranging nodes in a B-Tree like manner while maintaining a flat view. See JCR-2688.   </p>
+
+<h2 id="Performance-Q.Ihavemanyreferencestoasinglenodeandperformancegoesdown.">Q. I have many references to a single node and performance goes down.</h2>
+<ol>
+	<li>The current Jackrabbit design is not optimized for many nodes referencing a single node, because for easy back-referencing in the JCR API all those references are stored in the target node. Please note that many people don't recommend references in a content model anyway - see for example <a href="DavidsModel_115513389.html">DavidsModel</a>, <a href="http://wiki.apache.org/jackrabbit/DavidsModel#head-ed794ec9f4f716b3e53548be6dd91b23e5dd3f3a" class="external-link" rel="nofollow">rule #5</a>.
+<br class="atl-forced-newline"/></li>
+</ol>
+
+
+<h2 id="Performance-Q.HowcanIimproveperformancewithremoting(jcr2spi/spi2davex)">Q. How can I improve performance with <a class="createlink" href="/confluence/pages/createpage.action?spaceKey=JCR&amp;title=DavEx&amp;linkCreation=true&amp;fromPageId=115513486">DavEx</a> remoting (jcr2spi / spi2davex)</h2>
+<p>On the current trunk there are 3 parameters which can be used to tweak performance for jcr2spi/spi2davex. These are the size of the item info cache, the size of the item cache and the depth of batch read operations.</p>
+
+<p>Some Background:</p>
+
+<p>The item cache contains JCR items (i.e. nodes and properties). The item info cache contains item infos. An item info is an entity representing nodes or properties on the SPI layer. The jcr2spi module receives item infos from an SPI implementation (i.e. spi2davex) and uses them to build up a hierarchy of JCR items. When an item is requested from the JCR API, jcr2spi first checks whether the item is in the item cache. If so, that item is returned. If not, the request is passed down to the SPI. But before actually calling the SPI the item info cache is check first. If this cache contains the requested item info the relevant part of the JCR hierarchy is build and the corresponding JCR item is placed into the item cache. Only when the item info cache does not contain the requested item info a call will be made to the SPI. Here the batch read depth comes into play. Since calls to the SPI cause some latency (i.e. network round trips), the SPI may - in addition to the actually requested 
 item info - return additional item infos. The batch read depth parameter specifies the depth down to which item infos of the children of the requested item info are returned.</p>
+
+<p>Overall the size of the item info cache and the batch read depth should be used to optimize for the requirements of the back-end (i.e. network and server). In general, the item info cache should be large enough to <strong>easily</strong> hold all items from multiple batches. The batch read depth should be a trade off between network latency and item info cache overhead. Finally the item cache should be used to optimize for the requirements of the front-end (i.e. the JCR API client). It should be able to hold the items in the current working set of the API consumer.</p>
+
+<p>Some pointers:</p>
+
+<p>Batch reading:</p>
+
+<ul>
+	<li>org.apache.jackrabbit.spi.<a class="createlink" href="/confluence/pages/createpage.action?spaceKey=JCR&amp;title=RepositoryService&amp;linkCreation=true&amp;fromPageId=115513486">RepositoryService#getItemInfos()</a>
+<br class="atl-forced-newline"/></li>
+	<li>org.apache.jackrabbit.spi2davex.Spi2davexRepositoryServiceFactory#PARAM_BATCHREAD_CONFIG
+<br class="atl-forced-newline"/></li>
+</ul>
+
+
+<p>Item info cache size:</p>
+
+<ul>
+	<li>org.apache.jackrabbit.spi2davex.Spi2davexRepositoryServiceFactory#PARAM_ITEMINFO_CACHE_SIZE
+<br class="atl-forced-newline"/></li>
+</ul>
+
+
+<p>Item cache size:</p>
+
+<ul>
+	<li>org.apache.jackrabbit.jcr2spi.Jcr2spiRepositoryFactory#PARAM_ITEM_CACHE_SIZE
+<br class="atl-forced-newline"/></li>
+</ul>
+
+
+<p>Related JIRA issues:</p>
+
+<ul>
+	<li>JCR-2497: Improve jcr2spi read performance
+<br class="atl-forced-newline"/></li>
+	<li>JCR-2498: Implement caching mechanism for <a class="createlink" href="/confluence/pages/createpage.action?spaceKey=JCR&amp;title=ItemInfo&amp;linkCreation=true&amp;fromPageId=115513486">ItemInfo</a> batches
+<br class="atl-forced-newline"/></li>
+	<li>JCR-2461: Item retrieval inefficient after refresh
+<br class="atl-forced-newline"/></li>
+	<li>JCR-2499: Add simple benchmarking tools for jcr2spi read perform</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/Performance_115513486.html
------------------------------------------------------------------------------
    svn:eol-style = native

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

Added: jackrabbit/site/live/archive/wiki/JCR/PersistenceManagerFAQ_115513487.html
URL: http://svn.apache.org/viewvc/jackrabbit/site/live/archive/wiki/JCR/PersistenceManagerFAQ_115513487.html?rev=1859550&view=auto
==============================================================================
--- jackrabbit/site/live/archive/wiki/JCR/PersistenceManagerFAQ_115513487.html (added)
+++ jackrabbit/site/live/archive/wiki/JCR/PersistenceManagerFAQ_115513487.html Mon May 20 11:23:18 2019
@@ -0,0 +1,257 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <title>Apache Jackrabbit : PersistenceManagerFAQ</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 : PersistenceManagerFAQ
+                        </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="PersistenceManagerFAQ-PersistenceManager">Persistence Manager</h2>
+
+<style type='text/css'>/*<![CDATA[*/
+div.rbtoc1558350683401 {padding: 0px;}
+div.rbtoc1558350683401 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1558350683401 li {margin-left: 0px;padding-left: 0px;}
+
+/*]]>*/</style><div class='toc-macro rbtoc1558350683401'>
+<ul class='toc-indentation'>
+<li><a href='#PersistenceManagerFAQ-PersistenceManager'>Persistence Manager</a></li>
+<li><a href='#PersistenceManagerFAQ-Overview'>Overview</a>
+<ul class='toc-indentation'>
+<li><a href='#PersistenceManagerFAQ-WhatIsaPersistenceManager(PM)?'>What Is a Persistence Manager (PM)?</a></li>
+<li><a href='#PersistenceManagerFAQ-WhichPersistenceManagerIstheFastest?'>Which Persistence Manager Is the Fastest?</a></li>
+<li><a href='#PersistenceManagerFAQ-Consistency/Atomicy'>Consistency / Atomicy</a></li>
+<li><a href='#PersistenceManagerFAQ-What&#39;sthePMResponsibility?'>What&#39;s the PM Responsibility?</a></li>
+<li><a href='#PersistenceManagerFAQ-HowSmartShouldaPMBe?'>How Smart Should a PM Be?</a></li>
+<li><a href='#PersistenceManagerFAQ-FileSystem(FS)'>File System (FS)</a></li>
+<li><a href='#PersistenceManagerFAQ-WhatCombinationofFSandPMistheBestChoice?'>What Combination of FS and PM is the Best Choice?</a></li>
+</ul>
+</li>
+<li><a href='#PersistenceManagerFAQ-AvailableImplementations'>Available Implementations</a>
+<ul class='toc-indentation'>
+<li><a href='#PersistenceManagerFAQ-BundleDatabasePM'>Bundle Database PM</a></li>
+<li><a href='#PersistenceManagerFAQ-BundleFile-SystemPM'>Bundle File-System PM</a></li>
+<li><a href='#PersistenceManagerFAQ-In-MemoryPM'>In-Memory PM</a></li>
+<li><a href='#PersistenceManagerFAQ-SimpleDatabasePM'>Simple Database PM</a></li>
+<li><a href='#PersistenceManagerFAQ-ObjectPersistenceManager'>ObjectPersistenceManager</a></li>
+<li><a href='#PersistenceManagerFAQ-XMLPersistenceManager'>XMLPersistenceManager</a></li>
+<li><a href='#PersistenceManagerFAQ-ORMPersistenceManager'>ORMPersistenceManager</a></li>
+<li><a href='#PersistenceManagerFAQ-:'>LocalFileSystem:</a></li>
+<li><a href='#PersistenceManagerFAQ-:.1'>MemoryFileSystem:</a></li>
+<li><a href='#PersistenceManagerFAQ-:.2'>DbFileSystem:</a></li>
+</ul>
+</li>
+</ul>
+</div>
+
+<h2 id="PersistenceManagerFAQ-Overview">Overview</h2>
+
+<h3 id="PersistenceManagerFAQ-WhatIsaPersistenceManager(PM)?">What Is a Persistence Manager (PM)?</h3>
+<p>The PM is an *internal* Jackrabbit component that handles the persistent storage of content nodes and properties. Property values are also stored in the persistence manager, with the exception of large binary values (those are usually kept in the <a href="DataStore_115513387.html">DataStore</a>).</p>
+
+<p>Each workspace of a Jackrabbit content repository uses a separate persistence manager to store the content in that workspace. Also the Jackrabbit version handler uses a separate persistence manager. </p>
+
+<p>The persistence manager implementations to use are configured using the <code>PersistenceManager</code><br/>
+configuration element within the <code>Workspace</code> configuration template (and the instantiated workspace  configuration files) and the <code>Versioning</code> configuration element. The layout of a <code>PersistenceManager</code> <br/>
+configuration element is shown below.</p>
+
+<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
+<pre>&lt;PersistenceManager class=&quot;...&quot;&gt;
+    &lt;param name=&quot;...&quot; value=&quot;...&quot;/&gt;
+    ...
+&lt;/PersistenceManager&gt;
+</pre>
+</div></div>
+
+<p>The <code>class</code> attribute of the Persistence{{`Manager element contains the fully qualified class name of the persistence manager implementation class. The class must implement the }}org.apache.jackrabbit.core.persistence.PersistenceManager{{ interface and have an empty default constructor. String properties can be assigned using the }}param{{ elements according to the Java}}`Bean conventions.</p>
+
+<p>See also <a href="http://jackrabbit.apache.org/api/1.4/org/apache/jackrabbit/core/persistence/PersistenceManager.html" class="external-link" rel="nofollow">http://jackrabbit.apache.org/api/1.4/org/apache/jackrabbit/core/persistence/PersistenceManager.html</a></p>
+
+<p>The PM sits at the very bottom layer in jackrabbits system architecture.  Reliability, integrity and performance of the PM are *crucial* to the overall stability &amp; performance of the repository. If e.g. the data that a PM is based upon is allowed to change through external means the integrity of the repository would be at risk (think of referential integrity / node references e.g.).</p>
+
+<h3 id="PersistenceManagerFAQ-WhichPersistenceManagerIstheFastest?">Which Persistence Manager Is the Fastest?</h3>
+<p>The bundle persistence managers are usually the fastest. Bundle persistence managers store each node together with all the properties as one unit. Large binary properties are stored to the BLOBStore by default (or <a href="DataStore_115513387.html">DataStore</a> if configured). Setting the minimum blob size for bundle persistence managers very high decreases the performance.</p>
+
+<p>Storing the data in the file system does not require a database. Depending on the file system and database, database persistence managers are sometimes slower and sometimes faster than the Bundle{{`Fs}}<code>Persistence</code>`Manager. When using a database, please note that embedded Java databases do not have network overhead.</p>
+
+<h3 id="PersistenceManagerFAQ-Consistency/Atomicy">Consistency / Atomicy</h3>
+
+<p>The database persistence managers are atomic if the database is atomic.</p>
+
+<p>The current file based persistence managers are not always atomic. They do support transactions in Jackrabbit, the exception is after a crash: When the process is stopped while a transaction is being written to disk (power failure, process killed, Runtime.halt() called, VM crash), some data of a transaction may be committed and some not. Theoretically, some nodes may be corrupt (depending how and when the system crashed). The algorithms used are minimizing this risk, for example the parent node is written last so in most cases there is no problem even after a crash. </p>
+
+<h3 id="PersistenceManagerFAQ-What&#39;sthePMResponsibility?">What's the PM Responsibility?</h3>
+<p>The PM interface was never intended as being a general SPI that you could implement in order to integrate external datasources with proprietary formats (e.g. a customers database). the reason why we abstracted the PM interface was to leave room for future performance optimizations that  would not affect the rest of the implementation (e.g. by storing the raw data in a b-tree based database instead of individual file).</p>
+
+<h3 id="PersistenceManagerFAQ-HowSmartShouldaPMBe?">How Smart Should a PM Be?</h3>
+<p>A PM should not be 'intelligent'. It should not 'interpret' the data. The only thing a PM should care about is to efficiently, consistently and reliably store and read the data encapsulated in the passed nodeState &amp; propertyState objects. Though it might be feasible to write a custom persistence manager to represent existing legacy data in a level-1 (read-only) repository, I don't think the same is possible for a level-2 repository.  At a minimum, it certainly would not be recommended.</p>
+
+<h3 id="PersistenceManagerFAQ-FileSystem(FS)">File System (FS)</h3>
+
+<p>Jackrabbit uses the org.apache.jackrabbit.core.fs.FileSystem interface as a file system abstraction. Although this interface does not cover all direct file system use of Jackrabbit, it still allows for flexibility in selecting where and how to store various parts of the repository. For example, because it is possible with Jackrabbit to configure separate file systems for different system components (e.g., global repository state, workspaces, search indexes, versioning, etc), it might make sense to store the search indexes on a fast disk and the archived node versions on a slower disk. </p>
+
+<h3 id="PersistenceManagerFAQ-WhatCombinationofFSandPMistheBestChoice?">What Combination of FS and PM is the Best Choice?</h3>
+<p>It depends on your priorities. If you want to store your data in a RDBMS, use Bundle{{`Db}}<code>Persistence</code><code>Manager in conjunction with either a Local</code><code>File</code><code>System or Db</code><code>File</code><code>System. If you want to store your data in an more readily accessible format (just in case <img class="emoticon emoticon-wink" src="images/icons/emoticons/wink.svg" data-emoticon-name="wink" alt="(wink)"/>, you might want to try an XML</code><code>Persistence</code><code>Manager paired with a Local</code><code>File</code>`System.</p>
+
+<h2 id="PersistenceManagerFAQ-AvailableImplementations">Available Implementations</h2>
+
+<h3 id="PersistenceManagerFAQ-BundleDatabasePM">Bundle Database PM</h3>
+<ul>
+	<li>Status: mature (the default persistence manager)</li>
+	<li>Depending on the database, one of the following:
+	<ul>
+		<li>org.apache.jackrabbit.core.persistence.bundle.Derby{{`Persistence}}`Manager (Apache Derby; Java)</li>
+		<li>org.apache.jackrabbit.core.persistence.bundle.H2{{`Persistence}}`Manager (H2 Database Engine; Java)</li>
+		<li>org.apache.jackrabbit.core.persistence.bundle.My{{`Sql}}<code>Persistence</code>`Manager (MySQL)</li>
+		<li>org.apache.jackrabbit.core.persistence.bundle.Postgre{{`SQLPersistence}}`Manager (PostgreSQL)</li>
+		<li>org.apache.jackrabbit.core.persistence.bundle.MSSql{{`Persistence}}`Manager (MS SQL Server)</li>
+		<li>org.apache.jackrabbit.core.persistence.bundle.Oracle{{`Persistence}}`Manager (Oracle 10 or newer)</li>
+		<li>org.apache.jackrabbit.core.persistence.bundle.Oracle9{{`Persistence}}`Manager (Oracle 9)</li>
+		<li>org.apache.jackrabbit.core.persistence.bundle.Bundle{{`Db}}<code>Persistence</code>`Manager (generic database)</li>
+	</ul>
+	</li>
+	<li>Atomic; JDBC based; zero-deployment; fast</li>
+	<li>Auto-reconnect to the database is supported.</li>
+	<li>To use a JNDI data, see <a href="UsingJNDIDataSource_115513523.html">UsingJNDIDataSource</a>.</li>
+	<li>The tables are automatically created. To create them manually, see <a href="ManuallyCreatingDatabaseTables_115513453.html">ManuallyCreatingDatabaseTables</a>.</li>
+	<li><a href="http://jackrabbit.apache.org/api/1.5/org/apache/jackrabbit/core/persistence/bundle/BundleDbPersistenceManager.html" class="external-link" rel="nofollow">BundleDbPersistenceManager</a>
+<br class="atl-forced-newline"/></li>
+</ul>
+
+
+<h3 id="PersistenceManagerFAQ-BundleFile-SystemPM">Bundle File-System PM</h3>
+<ul>
+	<li>Status: mature</li>
+	<li>If the JVM process is killed the repository might turn inconsistent</li>
+	<li>Not meant to be used in production environments (except for read-only uses)</li>
+	<li>org.apache.jackrabbit.core.persistence.bundle.Bundle{{`Fs}}<code>Persistence</code>`Manager</li>
+	<li>Very fast if used with  <a href="http://www.pbali.com" class="external-link" rel="nofollow">.</a>DataStore or BLOBStore</li>
+	<li><a href="http://jackrabbit.apache.org/api/1.4/org/apache/jackrabbit/core/persistence/bundle/BundleFsPersistenceManager.html" class="external-link" rel="nofollow">BundleFsPersistenceManager</a>
+<br class="atl-forced-newline"/></li>
+</ul>
+
+
+<h3 id="PersistenceManagerFAQ-In-MemoryPM">In-Memory PM</h3>
+<ul>
+	<li>Status: mature</li>
+	<li>All data is lost as soon as the repository is closed</li>
+	<li>org.apache.jackrabbit.core.persistence.mem.In{{`Mem}}<code>Persistence</code>`Manager</li>
+	<li>For testing and small (read-only) workspaces</li>
+	<li>Keeps all content in memory</li>
+	<li>A custom binary serializer is optionally used to load and store the persistent state during initialization and shutdown of the persistence manager.</li>
+	<li>Very fast</li>
+	<li><a href="http://jackrabbit.apache.org/api/1.4/org/apache/jackrabbit/core/persistence/mem/InMemPersistenceManager.html" class="external-link" rel="nofollow">InMemPersistenceManager</a>
+<br class="atl-forced-newline"/></li>
+</ul>
+
+
+<h3 id="PersistenceManagerFAQ-SimpleDatabasePM">Simple Database PM</h3>
+<ul>
+	<li>Status: mature</li>
+	<li>Subclasses of org.apache.jackrabbit.core.persistence.db.Simple{{`Db}}<code>Persistence</code>`Manager</li>
+	<li>JDBC based; zero-deployment: schema is automatically created</li>
+	<li>Atomic</li>
+	<li>Fast</li>
+	<li><a href="http://jackrabbit.apache.org/api/1.4/org/apache/jackrabbit/core/persistence/db/SimpleDbPersistenceManager.html" class="external-link" rel="nofollow">SimpleDbPersistenceManager</a></li>
+</ul>
+
+
+<h3 id="PersistenceManagerFAQ-ObjectPersistenceManager"><a class="createlink" href="/confluence/pages/createpage.action?spaceKey=JCR&amp;title=ObjectPersistenceManager&amp;linkCreation=true&amp;fromPageId=115513487">ObjectPersistenceManager</a></h3>
+<ul>
+	<li>Status: obsolete, mature</li>
+	<li>If the JVM process is killed the repository might turn inconsistent</li>
+	<li>Not meant to be used in production environments</li>
+	<li>Persists data in an abstract FileSystem using a simple binary serialization format
+<br class="atl-forced-newline"/></li>
+</ul>
+
+
+<h3 id="PersistenceManagerFAQ-XMLPersistenceManager">XMLPersistenceManager</h3>
+<ul>
+	<li>Status: obsolete, mature</li>
+	<li>If the JVM process is killed the repository might turn inconsistent</li>
+	<li>Persists data in an abstract FileSystem using XML serialization format
+<br class="atl-forced-newline"/></li>
+</ul>
+
+
+<h3 id="PersistenceManagerFAQ-ORMPersistenceManager">ORMPersistenceManager</h3>
+<ul>
+	<li>Status: obsolete, experimental &amp; unfinished, still being maintained?</li>
+	<li>Referential integrity is possible, but not implemented</li>
+	<li>Not so easy to configure.
+<br class="atl-forced-newline"/></li>
+</ul>
+
+
+<h3 id="PersistenceManagerFAQ-:"><a class="createlink" href="/confluence/pages/createpage.action?spaceKey=JCR&amp;title=LocalFileSystem&amp;linkCreation=true&amp;fromPageId=115513487">LocalFileSystem</a>:</h3>
+<ul>
+	<li>Status: mature</li>
+	<li>Slow on window boxes
+<br class="atl-forced-newline"/></li>
+</ul>
+
+
+<h3 id="PersistenceManagerFAQ-:.1"><a class="createlink" href="/confluence/pages/createpage.action?spaceKey=JCR&amp;title=MemoryFileSystem&amp;linkCreation=true&amp;fromPageId=115513487">MemoryFileSystem</a>:</h3>
+<ul>
+	<li>Status: mature</li>
+	<li>All data is lost as soon as the repository is closed</li>
+	<li>For testing and small (read-only) workspaces</li>
+	<li>Keeps all content in memory</li>
+	<li>Very fast
+<br class="atl-forced-newline"/></li>
+</ul>
+
+
+<h3 id="PersistenceManagerFAQ-:.2"><a class="createlink" href="/confluence/pages/createpage.action?spaceKey=JCR&amp;title=DbFileSystem&amp;linkCreation=true&amp;fromPageId=115513487">DbFileSystem</a>:</h3>
+<ul>
+	<li>Status: mature</li>
+	<li>Atomic</li>
+	<li>Meant to be used in combination with a Database Persistence Manager as repository &amp; workspace file system</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/PersistenceManagerFAQ_115513487.html
------------------------------------------------------------------------------
    svn:eol-style = native

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