You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by tr...@apache.org on 2015/04/03 22:03:28 UTC

svn commit: r1671145 [2/2] - in /jackrabbit/site/trunk/src/site/markdown: ./ components/ components/jackrabbit-spi/ status/

Modified: jackrabbit/site/trunk/src/site/markdown/first-hops.md
URL: http://svn.apache.org/viewvc/jackrabbit/site/trunk/src/site/markdown/first-hops.md?rev=1671145&r1=1671144&r2=1671145&view=diff
==============================================================================
--- jackrabbit/site/trunk/src/site/markdown/first-hops.md (original)
+++ jackrabbit/site/trunk/src/site/markdown/first-hops.md Fri Apr  3 20:03:27 2015
@@ -1,55 +1,69 @@
-Title: First Hops
+<!--
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+-->
+
+First Hops
+==========
 Welcome to your first hops into the world of Jackrabbit! This introduction
 gives you a hands-on experience with Jackrabbit and the JCR API. Once you
 have finished hopping through this document, you should be all set to
 continue on your own with the official JCR specification and the
 documentation on this site. 
 
-<a name="FirstHops-Hop0:Gettingstarted"></a>
-## Hop 0: Getting started 
 
+Hop 0: Getting started
+----------------------
 The easiest way to get started with Jackrabbit is to [download](downloads.html)
- the runnable [Standalone Server]
- jar. In addition to running it, you can also put it in your classpath to
-quickly access all the classes and interfaces you need below.
-Alternatively, if you use the [Apache Maven|http://maven.apache.org/]
- build system (which we recommend), you can set up your first hops project
-with the following dependenecies. 
-
+the runnable [Standalone Server](standalone-server.html) jar. In addition to 
+running it, you can also put it in your classpath to quickly access all the classes 
+and interfaces you need below. Alternatively, if you use the [Apache Maven](http://maven.apache.org/)
+build system (which we recommend), you can set up your first hops project
+with the following dependencies. 
 
     <dependencies> 
-    <!-- The JCR API --> 
-    <dependency> 
-    <groupId>javax.jcr</groupId> 
-    <artifactId>jcr</artifactId> 
-    <version>2.0</version> 
-    </dependency> 
-    
-    <!-- Jackrabbit content repository --> 
-    <dependency> 
-    <groupId>org.apache.jackrabbit</groupId> 
-    <artifactId>jackrabbit-core</artifactId> 
-    <version>2.2.4</version> 
-    </dependency> 
-    
-    <!-- Use Log4J for logging --> 
-    <dependency> 
-    <groupId>org.slf4j</groupId> 
-    <artifactId>slf4j-log4j12</artifactId> 
-    <version>1.5.11</version> 
-    </dependency> 
+        <!-- The JCR API --> 
+        <dependency> 
+            <groupId>javax.jcr</groupId> 
+            <artifactId>jcr</artifactId> 
+            <version>2.0</version> 
+        </dependency> 
+        
+        <!-- Jackrabbit content repository --> 
+        <dependency> 
+            <groupId>org.apache.jackrabbit</groupId> 
+            <artifactId>jackrabbit-core</artifactId> 
+            <version>2.2.4</version> 
+        </dependency> 
+        
+        <!-- Use Log4J for logging --> 
+        <dependency> 
+            <groupId>org.slf4j</groupId> 
+            <artifactId>slf4j-log4j12</artifactId> 
+            <version>1.5.11</version> 
+        </dependency> 
     </dependencies> 
 
 
-{note} 
 You probably have an error in your classpath settings if you get a
-*ClassNotFoundException* message when trying to compile or run the
+`ClassNotFoundException` message when trying to compile or run the
 examples below. 
-{note} 
 
-<a name="FirstHops-Hop1:LoggingintoJackrabbit"></a>
-## Hop 1: Logging in to Jackrabbit 
 
+Hop 1: Logging in to Jackrabbit
+-------------------------------
 So let's get started. As a warm-up we'll create a Jackrabbit content
 repository and start a login session for accessing it. The full example
 application that does this is shown below, with line-by-line explanations
@@ -75,22 +89,20 @@ following shortly after.
             Repository repository = new TransientRepository(); 
             Session session = repository.login(); 
             try { 
-            String user = session.getUserID(); 
-            String name = repository.getDescriptor(Repository.REP_NAME_DESC); 
-            System.out.println( 
-            "Logged in as " + user + " to a " + name + " repository."); 
+                String user = session.getUserID(); 
+                String name = repository.getDescriptor(Repository.REP_NAME_DESC); 
+                System.out.println( 
+                "Logged in as " + user + " to a " + name + " repository."); 
             } finally { 
-            session.logout(); 
+                session.logout(); 
             } 
         } 
     } 
 
-
-You can also download the source file as FirstHop.java. If you have your
-classpath set up, you can compile the application with javac FirstHop.java
+You can also download the source file as `FirstHop.java`. If you have your
+classpath set up, you can compile the application with javac `FirstHop.java`
 and run it with java FirstHop to get the following output. 
 
-
     Logged in as anonymous to a Jackrabbit repository. 
 
 
@@ -103,7 +115,6 @@ file and repository directory locations.
 
 Read on for a detailed breakdown of the FirstHop application: 
 
-
     import javax.jcr.Repository; 
     import javax.jcr.Session; 
 
@@ -114,8 +125,8 @@ these interfaces in your content applica
 independent of the underlying content repository implementation. 
 
 The [Repository](http://www.day.com/maven/javax.jcr/javadocs/jcr-2.0/javax/jcr/Repository.html?is-external=true)
- interface represents a given content repository instance and the [Session|http://www.day.com/maven/javax.jcr/javadocs/jcr-2.0/javax/jcr/Session.html?is-external=true]
- interface represents a single login session for accessing the repository.
+interface represents a given content repository instance and the [Session](http://www.day.com/maven/javax.jcr/javadocs/jcr-2.0/javax/jcr/Session.html?is-external=true)
+interface represents a single login session for accessing the repository.
 A session is needed to access any content within a repository. 
 
 Note that a Session instance is not guaranteed to be thread-safe so you
@@ -123,7 +134,6 @@ should start multiple sessions if you ne
 simultaneously from different threads. This is especially important for
 things like web applications. 
 
-
     import org.apache.jackrabbit.core.TransientRepository; 
 
 
@@ -131,31 +141,29 @@ The best practice for deploying Jackrabb
 configuration mechanism in a container environment to keep the application
 code free of direct Jackrabbit dependencies, but since we are creating a
 simple standalone application we can take a shortcut by using the [TransientRepository](http://jackrabbit.apache.org/api/2.2/org/apache/jackrabbit/core/TransientRepository.html)
- class from Jackrabbit core. 
-
+class from Jackrabbit core. 
 
     public class FirstHop 
     public static void main(String[] args) throws Exception 
 
 
 The FirstHop example is a simple standalone application that fits nicely in
-the main() method and lets the JVM take care of the possible exceptions.
+the `main()` method and lets the JVM take care of the possible exceptions.
 More substantial content applications could also be written as web
 application or EJB components with different setup and error handling
 patterns. 
 
-
     Repository repository = new TransientRepository(); 
 
 
-The TransientRepository class implements the JCR Repository interface, so
-you can simply assign a TransientRepository instance to a Repository
+The `TransientRepository` class implements the JCR Repository interface, so
+you can simply assign a `TransientRepository` instance to a Repository
 variable. The default constructor contains a utility feature that will take
 care of the initial configuration and repository construction when the
 first session is started. Thus there is no need for manual configuration
 for now unless you want direct control over the repository setup. 
 
-The TransientRepository implementation will automatically initialize the
+The `TransientRepository` implementation will automatically initialize the
 content repository when the first session is started and shut it down when
 the last session is closed. Thus there is no need for explicit repository
 shutdown as long as all sessions are properly closed. Note that a
@@ -168,19 +176,17 @@ manually remove the lock file in such ca
 chance of repository corruption especially if you use a non-transactional
 persistence manager. 
 
-
     Session session = repository.login(); 
 
 
-The default Repository.login() method starts a repository session using the
+The default `Repository.login()` method starts a repository session using the
 default workspace and no user credentials. Jackrabbit tries to use the Java
 Authentication and Authorization Service (JAAS) configuration in such
 cases, but defaults to the anonymous user if a JAAS Subject is not found. 
 
-Since we use the TransientRepository class as the Repository
+Since we use the `TransientRepository` class as the Repository
 implementation, this step will also cause the repository to be initialized. 
 
-
     try { ... } finally { session.logout(); } 
 
 
@@ -191,18 +197,16 @@ called even if the intervening code thro
 outside the scope (for example using a return, break, or continue
 statement). 
 
-The Session.logout() method in the finally branch closes the session and
+The `Session.logout()` method in the finally branch closes the session and
 since this is the only session we have started, the TransientRepository is
 automatically shut down. 
 
-
     String user = session.getUserID(); 
 
 
 The username or identifier of the user associated with a session is
-available using the Session.getUserID() method. Jackrabbit returns
-"anonymous" by default. 
-
+available using the `Session.getUserID()` method. Jackrabbit returns
+`"anonymous"` by default. 
 
     String name = repository.getDescriptor(Repository.REP_NAME_DESC); 
 
@@ -210,13 +214,13 @@ available using the Session.getUserID()
 Each content repository implementation publishes a number of string
 descriptors that describe the various implementation properties, like the
 implementation level and the supported optional JCR features. See the [Repository](http://www.day.com/maven/javax.jcr/javadocs/jcr-2.0/javax/jcr/Repository.html?is-external=true)
- interface for a list of the standard repository descriptors. The
-REP_NAME_DESC descriptor contains the name of the repository
-implementation, in this case "Jackrabbit". 
+interface for a list of the standard repository descriptors. The
+`REP_NAME_DESC` descriptor contains the name of the repository
+implementation, in this case `"Jackrabbit"`. 
 
-<a name="FirstHops-Hop2:Workingwithcontent"></a>
-## Hop 2: Working with content 
 
+Hop 2: Working with content
+---------------------------
 The main function of a content repository is allow applications to store
 and retrieve content. The content in a JCR content repository consists of
 structured or unstructured data modeled as a hierarchy of nodes with
@@ -248,24 +252,24 @@ outputs it, and finally removes the stor
             Session session = repository.login( 
             new SimpleCredentials("username", "password".toCharArray())); 
             try { 
-            Node root = session.getRootNode(); 
-            
-            // Store content 
-            Node hello = root.addNode("hello"); 
-            Node world = hello.addNode("world"); 
-            world.setProperty("message", "Hello, World!"); 
-            session.save(); 
-            
-            // Retrieve content 
-            Node node = root.getNode("hello/world"); 
-            System.out.println(node.getPath()); 
-            System.out.println(node.getProperty("message").getString()); 
-            
-            // Remove content 
-            root.getNode("hello").remove(); 
-            session.save(); 
+                Node root = session.getRootNode(); 
+                
+                // Store content 
+                Node hello = root.addNode("hello"); 
+                Node world = hello.addNode("world"); 
+                world.setProperty("message", "Hello, World!"); 
+                session.save(); 
+                
+                // Retrieve content 
+                Node node = root.getNode("hello/world"); 
+                System.out.println(node.getPath()); 
+                System.out.println(node.getProperty("message").getString()); 
+                
+                // Remove content 
+                root.getNode("hello").remove(); 
+                session.save(); 
             } finally { 
-            session.logout(); 
+                session.logout(); 
             } 
         } 
         
@@ -277,7 +281,6 @@ SecondHop.java. You can also compile and
 in the first hop example. Running this example should produce the following
 output: 
 
-
     /hello/world 
     Hello, World! 
 
@@ -285,44 +288,41 @@ output:
 The basic structure of this example application is the same as in the First
 Hop example, so let's just walk through the differences: 
 
-
     import javax.jcr.SimpleCredentials; 
     import javax.jcr.Node; 
 
 
 These are two new classes we need for this example. The [SimpleCredentials](http://www.day.com/maven/javax.jcr/javadocs/jcr-2.0/javax/jcr/SimpleCredentials.html?is-external=true)
- class is a simple implementation of the [Credentials|http://www.day.com/maven/javax.jcr/javadocs/jcr-2.0/javax/jcr/Credentials.html?is-external=true]
- interface used for passing explicit user credentials to the
-Repository.login(Credentials) method. 
+class is a simple implementation of the [Credentials](http://www.day.com/maven/javax.jcr/javadocs/jcr-2.0/javax/jcr/Credentials.html?is-external=true)
+interface used for passing explicit user credentials to the
+`Repository.login(Credentials)` method. 
 
 The [Node](http://www.day.com/maven/javax.jcr/javadocs/jcr-2.0/javax/jcr/Node.html?is-external=true)
- interface is used to manage the content nodes in a repository. There is a
-related interface called [Property|http://www.day.com/maven/javax.jcr/javadocs/jcr-2.0/javax/jcr/Property.html?is-external=true]
- for managing content properties, but in this example we use the Property
+interface is used to manage the content nodes in a repository. There is a
+related interface called [Property](http://www.day.com/maven/javax.jcr/javadocs/jcr-2.0/javax/jcr/Property.html?is-external=true)
+for managing content properties, but in this example we use the Property
 interface only indirectly. 
 
-
     new SimpleCredentials("username", "password".toCharArray()) 
 
 
-As discussed in the First Hop example, the default Repository.login()
+As discussed in the First Hop example, the default `Repository.login()`
 method returns an anonymous read-only session in the Jackrabbit default
 configuration. To be able to store and remove content we need to create a
 session with write access, and to do that we need to pass some credentials
 to the 
 
-
     Repository.login(Credentials credentials) method. 
 
 
 The default Jackrabbit login mechanism accepts any username and password as
 valid credentials and returns a session with full write access. Thus we
 only need to construct and use a SimpleCredentials instance with some dummy
-username and password, in this case "username" and "password". 
+username and password, in this case `"username"` and `"password"`. 
 
 The SimpleCredentials constructor follows the JAAS convention of
 representing the username as a normal String, but the password as a
-character array, so we need to use the String.toCharArray() method to
+character array, so we need to use the `String.toCharArray()` method to
 satisfy the constructor. 
 
 
@@ -331,39 +331,36 @@ satisfy the constructor.
 
 Each JCR session is associated with a workspace that contains a single node
 tree. A simple way to access the root node is to call the
-Session.getRootNode() method. Having a reference to the root node allows us
+`Session.getRootNode()` method. Having a reference to the root node allows us
 to easily store and retrieve content in the current workspace. 
 
-
     Node hello = root.addNode("hello"); 
     Node world = hello.addNode("world"); 
 
 
-New content nodes can be added using the Node.addNode(String relPath)
+New content nodes can be added using the `Node.addNode(String relPath)`
 method. The method takes the name (or relative path) of the node to be
 added and creates the named node in the transient storage associated with
 the current session. Until the transient storage is persisted, the added
 node is only visible within the current session and not within any other
 session that is concurrently accessing the content repository. 
 
-This code snippet creates two new nodes, called "hello" and "world", with
-"hello" being a child of the root node and "world" a child of the "hello"
+This code snippet creates two new nodes, called `"hello"` and `"world"`, with
+`"hello"` being a child of the root node and `"world"` a child of the `"hello"`
 node. 
 
-
     world.setProperty("message", "Hello, World!"); 
 
 
-To add some content to the structure created using the "hello" and "world"
-nodes, we use the Node.setProperty(String name, String value) method to add
-a string property called "message" to the "world" node. The value of the
-property is the string "Hello, World!". 
+To add some content to the structure created using the `"hello"` and `"world"`
+nodes, we use the `Node.setProperty(String name, String value)` method to add
+a string property called `"message"` to the `"world"` node. The value of the
+property is the string `"Hello, World!"`. 
 
 Like the added nodes, also the property is first created in the transient
 storage associated with the current session. If the named property already
 exists, then this method will change the value of that property. 
 
-
     session.save(); 
 
 
@@ -375,12 +372,11 @@ application into three pieces for respec
 removing the example content. Such a split would not work unless we
 persisted the changes we make. 
 
-The Session.save() method persists all pending changes in the transient
+The `Session.save()` method persists all pending changes in the transient
 storage. The changes are written to the persistent repository storage and
 they become visible to all sessions accessing the same workspace. Without
 this call all changes will be lost forever when the session is closed. 
 
-
     Node node = root.getNode("hello/world"); 
 
 
@@ -389,16 +385,15 @@ and world node references to access the
 that we've started another session and want to retrieve the content that
 was previously stored. 
 
-The Node.getNode(String relPath) method returns a reference to the node at
+The `Node.getNode(String relPath)` method returns a reference to the node at
 the given path relative to this node. The path syntax follows common file
 system conventions: a forward slash separates node names, a single dot
 represents the current node, and a double dot the parent node. Thus the
-path "hello/world" identifies the "world" child node of the "hello" child
+path `"hello/world"` identifies the `"world"` child node of the `"hello"` child
 node of the current node - in this case the root node. The end result is
 that the method returns a node instance that represents the same content
 node as the world instance created a few lines earlier. 
 
-
     System.out.println(node.getPath()); 
 
 
@@ -409,43 +404,41 @@ the current node or property.
 
 The path of a node or property can be retrieved using the Item.getPath()
 method. The [Item](http://www.day.com/maven/javax.jcr/javadocs/jcr-2.0/javax/jcr/Item.html?is-external=true)
- inteface is a superinterface of Node and Property, and contains all the
+interface is a superinterface of Node and Property, and contains all the
 functionality shared by nodes and properties. 
 
-The node variable references the "world" node, so this statement will
-output the line "/hello/world". 
-
+The node variable references the `"world"` node, so this statement will
+output the line `"/hello/world"`. 
 
     System.out.println(node.getProperty("message").getString()); 
 
 
-Properties can be accessed using the Node.getProperty(String relPath)
+Properties can be accessed using the `Node.getProperty(String relPath)`
 method that returns an instance of the [Property](http://www.day.com/maven/javax.jcr/javadocs/jcr-2.0/javax/jcr/Property.html?is-external=true)
- interface that represents the property at the given path relative to the
+interface that represents the property at the given path relative to the
 current node. In this case the "message" property is the one we created a
 few lines earlier. 
 
 A JCR property can contain either a single or multiple values of a given
 type. There are property types for storing strings, numbers, dates, binary
 streams, node references, etc. We just want the single string value, so we
-use the Property.getString() method. The result of this statement is the
-line "Hello, World!" being outputted. 
-
+use the `Property.getString()` method. The result of this statement is the
+line `"Hello, World!"` being outputted. 
 
     root.getNode("hello").remove(); 
 
 
-Nodes and properties can be removed using the Item.remove() method. The
+Nodes and properties can be removed using the`Item.remove()` method. The
 method removes the entire content subtree, so we only need to remove the
-topmost "hello" node to get rid of all the content we added before. 
+topmost `"hello"` node to get rid of all the content we added before. 
 
 Removals are first stored in the session-local transient storage, just like
 added and changed content. Like before, the transient changes need to be
 explicitly saved for the content to be removed from the persistent storage. 
 
-<a name="FirstHops-Hop3:Importingcontent"></a>
-## Hop 3: Importing content 
 
+Hop 3: Importing content 
+------------------------
 TODO: Update to match the style of previous hops. 
 
 To add content a bit more efficiently, you may want to try JCR's import
@@ -453,6 +446,8 @@ facilities, such as Session.importXML. T
 Elliotte Rusty Harold provides an interesting example that demonstrates a
 repository's namespace capabilities: 
 
+**test.xml**
+
     <xhtml:html xmlns:xhtml="http://www.w3.org/1999/xhtml" 
     xmlns:mathml="http://www.w3.org/1998/Math/MathML"> 
     <xhtml:head><xhtml:title>Three Namespaces</xhtml:title></xhtml:head> 
@@ -506,10 +501,10 @@ repository's namespace capabilities:
 
 
 The third example application shown below will import the XML file called
-test.xml from the current directory into a new content repository node
-called importxml. Once the XML content is imported, the application
+`test.xml` from the current directory into a new content repository node
+called `importxml`. Once the XML content is imported, the application
 recursively dumps the contents of the entire workspace using the simple
-dump() method. 
+`dump()` method. 
 
     import javax.jcr.*; 
     import org.apache.jackrabbit.core.TransientRepository; 
@@ -521,76 +516,75 @@ dump() method.
     */ 
     public class ThirdHop { 
     
-    /**
-    * The main entry point of the example application.
-    *
-    * @param args command line arguments (ignored)
-    * @throws Exception if an error occurs
-    */
-    public static void main(String[] args) throws Exception { 
-    Repository repository = new TransientRepository(); 
-        Session session = repository.login( 
-        new SimpleCredentials("username", "password".toCharArray())); 
-        try { 
-            Node root = session.getRootNode(); 
-            
-            // Import the XML file unless already imported 
-            if (!root.hasNode("importxml")) { 
-                System.out.print("Importing xml... "); 
-                
-                // Create an unstructured node under which to import the XML 
-                Node node = root.addNode("importxml", "nt:unstructured"); 
-                
-                // Import the file "test.xml" under the created node 
-                FileInputStream xml = new FileInputStream("test.xml");
-                session.importXML( 
-                node.getPath(), xml, ImportUUIDBehavior.IMPORT_UUID_CREATE_NEW); 
-                xml.close();
-                session.save(); 
-                System.out.println("done."); 
+        /**
+        * The main entry point of the example application.
+        *
+        * @param args command line arguments (ignored)
+        * @throws Exception if an error occurs
+        */
+        public static void main(String[] args) throws Exception { 
+            Repository repository = new TransientRepository(); 
+                Session session = repository.login( 
+                new SimpleCredentials("username", "password".toCharArray())); 
+                try { 
+                    Node root = session.getRootNode(); 
+                    
+                    // Import the XML file unless already imported 
+                    if (!root.hasNode("importxml")) { 
+                        System.out.print("Importing xml... "); 
+                        
+                        // Create an unstructured node under which to import the XML 
+                        Node node = root.addNode("importxml", "nt:unstructured"); 
+                        
+                        // Import the file "test.xml" under the created node 
+                        FileInputStream xml = new FileInputStream("test.xml");
+                        session.importXML( 
+                        node.getPath(), xml, ImportUUIDBehavior.IMPORT_UUID_CREATE_NEW); 
+                        xml.close();
+                        session.save(); 
+                        System.out.println("done."); 
+                    } 
+                    
+                    //output the repository content
+                    dump(root); 
+                } finally { 
+                    session.logout(); 
+                } 
             } 
-            
-            //output the repository content
-            dump(root); 
-        } finally { 
-            session.logout(); 
-        } 
-    } 
-    
-    /** Recursively outputs the contents of the given node. */ 
-    private static void dump(Node node) throws RepositoryException { 
-        // First output the node path 
-        System.out.println(node.getPath()); 
-        // Skip the virtual (and large!) jcr:system subtree 
-        if (node.getName().equals("jcr:system")) { 
-            return; 
-        } 
         
-        // Then output the properties 
-        PropertyIterator properties = node.getProperties(); 
-        while (properties.hasNext()) { 
-            Property property = properties.nextProperty(); 
-            if (property.getDefinition().isMultiple()) { 
-                // A multi-valued property, print all values 
-                Value[] values = property.getValues(); 
-                for (int i = 0; i < values.length; i++) { 
+        /** Recursively outputs the contents of the given node. */ 
+        private static void dump(Node node) throws RepositoryException { 
+            // First output the node path 
+            System.out.println(node.getPath()); 
+            // Skip the virtual (and large!) jcr:system subtree 
+            if (node.getName().equals("jcr:system")) { 
+                return; 
+            } 
+            
+            // Then output the properties 
+            PropertyIterator properties = node.getProperties(); 
+            while (properties.hasNext()) { 
+                Property property = properties.nextProperty(); 
+                if (property.getDefinition().isMultiple()) { 
+                    // A multi-valued property, print all values 
+                    Value[] values = property.getValues(); 
+                    for (int i = 0; i < values.length; i++) { 
+                        System.out.println( 
+                        property.getPath() + " = " + values[i] .getString()); 
+                    } 
+                } else { 
+                    // A single-valued property 
                     System.out.println( 
-                    property.getPath() + " = " + values[i] .getString()); 
-                } 
-            } else { 
-                // A single-valued property 
-                System.out.println( 
-                property.getPath() + " = " + property.getString()); 
+                    property.getPath() + " = " + property.getString()); 
                 } 
             } 
-            
+                
             // Finally output all the child nodes recursively 
             NodeIterator nodes = node.getNodes(); 
             while (nodes.hasNext()) { 
                 dump(nodes.nextNode()); 
             } 
         } 
-    
     } 
 
 
@@ -642,48 +636,51 @@ persisted (Session.save).
 Let us look at the new methods used in this example, how to import xml
 content:
 
-
-    session.importXML(node.getPath(), xml,
-ImportUUIDBehavior.IMPORT_UUID_CREATE_NEW);
+    session.importXML(node.getPath(), xml, ImportUUIDBehavior.IMPORT_UUID_CREATE_NEW);
 
 
 This deserializes an XML document and adds the resulting item subgraph as a
 child of the node at the provided path.
 
 The flag [ImportUUIDBehavior](http://www.day.com/maven/javax.jcr/javadocs/jcr-2.0/javax/jcr/ImportUUIDBehavior.html?is-external=true)
- governs how the identifiers of incoming nodes are handled. There are four
-options: 
-* ImportUUIDBehavior.IMPORT_UUID_CREATE_NEW: Incoming nodes are added in
-the same way that new node is added with Node.addNode. That is, they are
-either assigned newly created identifiers upon addition or upon save. In
-either case, identifier collisions will not occur. 
-
-* ImportUUIDBehavior.IMPORT_UUID_COLLISION_REMOVE_EXISTING: If an incoming
-node has the same identifier as a node already existing in the workspace
-then the already existing node (and its subgraph) is removed from wherever
-it may be in the workspace before the incoming node is added. Note that
-this can result in nodes "disappearing" from locations in the workspace
-that are remote from the location to which the incoming subgraph is being
-written. Both the removal and the new addition will be dispatched on save.
-
-* ImportUUIDBehavior.IMPORT_UUID_COLLISION_REPLACE_EXISTING: If an incoming
-node has the same identifier as a node already existing in the workspace,
-then the already-existing node is replaced by the incoming node in the same
-position as the existing node. Note that this may result in the incoming
-subgraph being disaggregated and "spread around" to different locations in
-the workspace. In the most extreme case this behavior may result in no node
-at all being added as child of parentAbsPath. This will occur if the
-topmost element of the incoming XML has the same identifier as an existing
-node elsewhere in the workspace. The change will be dispatched on save.
-
-* ImportUUIDBehavior.IMPORT_UUID_COLLISION_THROW: If an incoming node has
-the same identifier as a node already existing in the workspace then an
-ItemExistsException is thrown.
+governs how the identifiers of incoming nodes are handled. 
 
+There are four options: 
 
-Another interesting method is 
+* `ImportUUIDBehavior.IMPORT_UUID_CREATE_NEW`:  
+    Incoming nodes are added in
+    the same way that new node is added with Node.addNode. That is, they are
+    either assigned newly created identifiers upon addition or upon save. In
+    either case, identifier collisions will not occur. 
+
+* `ImportUUIDBehavior.IMPORT_UUID_COLLISION_REMOVE_EXISTING`:  
+    If an incoming
+    node has the same identifier as a node already existing in the workspace
+    then the already existing node (and its subgraph) is removed from wherever
+    it may be in the workspace before the incoming node is added. Note that
+    this can result in nodes "disappearing" from locations in the workspace
+    that are remote from the location to which the incoming subgraph is being
+    written. Both the removal and the new addition will be dispatched on save.
+
+* `ImportUUIDBehavior.IMPORT_UUID_COLLISION_REPLACE_EXISTING`:  
+    If an incoming
+    node has the same identifier as a node already existing in the workspace,
+    then the already-existing node is replaced by the incoming node in the same
+    position as the existing node. Note that this may result in the incoming
+    subgraph being disaggregated and "spread around" to different locations in
+    the workspace. In the most extreme case this behavior may result in no node
+    at all being added as child of parentAbsPath. This will occur if the
+    topmost element of the incoming XML has the same identifier as an existing
+    node elsewhere in the workspace. The change will be dispatched on save.
+
+* `ImportUUIDBehavior.IMPORT_UUID_COLLISION_THROW`:  
+    If an incoming node has
+    the same identifier as a node already existing in the workspace then an
+    ItemExistsException is thrown.
 
 
+Another interesting method is 
+
     void dump(Node node)
 
 
@@ -691,30 +688,24 @@ This can be used as an example of how to
 the repository, and check the properties of each node. 
 
 Notice how we have to pay special attention to the multi-value properties,
-beacuse that impacts the way we use them:
-
+because that impacts the way we use them:
 
     property.getDefinition().isMultiple()
 
 
-if this yelds true, then we are dealing with an array of values:
-
+if this yields true, then we are dealing with an array of values:
 
-    Value[]
- values = property.getValues();
+    Value[] values = property.getValues();
 
 
 or else, we can use the provided api shortcuts, to get the desired value:
 
-
     property.getString()
 
 
 which is equivalent to 
 
-
     property.getValue().getString()
 
 
-A very good entry point for utilities related code examples is [JcrUtils](http://jackrabbit.apache.org/api/2.2/org/apache/jackrabbit/commons/JcrUtils.html)
-.
+A very good entry point for utilities related code examples is [JcrUtils](http://jackrabbit.apache.org/api/2.2/org/apache/jackrabbit/commons/JcrUtils.html).

Modified: jackrabbit/site/trunk/src/site/markdown/jackrabbit-components.md
URL: http://svn.apache.org/viewvc/jackrabbit/site/trunk/src/site/markdown/jackrabbit-components.md?rev=1671145&r1=1671144&r2=1671145&view=diff
==============================================================================
--- jackrabbit/site/trunk/src/site/markdown/jackrabbit-components.md (original)
+++ jackrabbit/site/trunk/src/site/markdown/jackrabbit-components.md Fri Apr  3 20:03:27 2015
@@ -1,34 +1,47 @@
-Title: Jackrabbit Components
+<!--
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+-->
+
+Jackrabbit Components
+=====================
 The Apache Jackrabbit project consists of a number of related components.
+
 The main components are:
 
-* [Jackrabbit API](jackrabbit-api.html)
-* [Jackrabbit JCR Commons](jackrabbit-jcr-commons.html)
-* [Jackrabbit JCR Tests](jackrabbit-jcr-tests.html)
-* [Jackrabbit Core](jackrabbit-core.html)
-* [Jackrabbit Text Extractors](jackrabbit-text-extractors.html)
- (replaced by [Tika|http://lucene.apache.org/tika/]
- in Jackrabbit 2.x)
-* [Jackrabbit JCR-RMI](jackrabbit-jcr-rmi.html)
-* [Jackrabbit WebDAV Library](jackrabbit-webdav-library.html)
-* [Jackrabbit JCR Client](jackrabbit-jcr-client.html)
-* [Jackrabbit JCR to DAV](jackrabbit-jcr-to-dav.html)
-* [Jackrabbit JCR Server](jackrabbit-jcr-server.html)
-* [Jackrabbit JCR Servlet](jackrabbit-jcr-servlet.html)
-* [Jackrabbit Web Application](jackrabbit-web-application.html)
-* [Jackrabbit JCA Resource Adapter](jackrabbit-jca-resource-adapter.html)
-* [Jackrabbit SPI](jackrabbit-spi.html)
-* [Jackrabbit SPI Commons](jackrabbit-spi-commons.html)
-* [Jackrabbit JCR to SPI](jackrabbit-jcr-to-spi.html)
-* [Jackrabbit SPI to JCR](jackrabbit-spi-to-jcr.html)
-* [Jackrabbit SPI to DAV](jackrabbit-spi-to-dav.html)
+* [Jackrabbit API](components/jackrabbit-api.html)
+* [Jackrabbit JCR Commons](components/jackrabbit-jcr-commons.html)
+* [Jackrabbit JCR Tests](components/jackrabbit-jcr-tests.html)
+* [Jackrabbit Core](components/jackrabbit-core.html)
+* [Jackrabbit Text Extractors](components/jackrabbit-text-extractors.html) (replaced by [Tika](http://lucene.apache.org/tika/) in Jackrabbit 2.x)
+* [Jackrabbit JCR-RMI](components/jackrabbit-jcr-rmi.html)
+* [Jackrabbit WebDAV Library](components/jackrabbit-webdav-library.html)
+* [Jackrabbit JCR Client](components/jackrabbit-jcr-client.html)
+* [Jackrabbit JCR to DAV](components/jackrabbit-jcr-to-dav.html)
+* [Jackrabbit JCR Server](components/jackrabbit-jcr-server.html)
+* [Jackrabbit JCR Servlet](components/jackrabbit-jcr-servlet.html)
+* [Jackrabbit Web Application](components/jackrabbit-web-application.html)
+* [Jackrabbit JCA Resource Adapter](components/jackrabbit-jca-resource-adapter.html)
+* [Jackrabbit SPI](components/jackrabbit-spi.html)
+* [Jackrabbit SPI Commons](components/jackrabbit-spi-commons.html)
+* [Jackrabbit JCR to SPI](components/jackrabbit-jcr-to-spi.html)
+* [Jackrabbit SPI to JCR](components/jackrabbit-spi-to-jcr.html)
+* [Jackrabbit SPI to DAV](components/jackrabbit-spi-to-dav.html)
 * [Jackrabbit Standalone Server](standalone-server.html)
-* [Jackrabbit OCM](jackrabbit-ocm.html)
- ([Jackrabbit commons|http://jackrabbit.apache.org/commons/] component
-since Jackrabbit 1.6)
-* [Jackrabbit OCM Node Management](jackrabbit-ocm-node-management.html)
- ([Jackrabbit commons|http://jackrabbit.apache.org/commons/] component
-since Jackrabbit 1.6)
+* [Jackrabbit OCM](components/jackrabbit-ocm.html) ([Jackrabbit commons](http://jackrabbit.apache.org/commons/) component since Jackrabbit 1.6)
+* [Jackrabbit OCM Node Management](components/jackrabbit-ocm-node-management.html) ([Jackrabbit commons](http://jackrabbit.apache.org/commons/) component since Jackrabbit 1.6)
 
 In addition there are a number of contributed components in the *sandbox*
 folder of the Jackrabbit project. These components are not yet considered

Modified: jackrabbit/site/trunk/src/site/markdown/jackrabbit-core-1.4.1.md
URL: http://svn.apache.org/viewvc/jackrabbit/site/trunk/src/site/markdown/jackrabbit-core-1.4.1.md?rev=1671145&r1=1671144&r2=1671145&view=diff
==============================================================================
--- jackrabbit/site/trunk/src/site/markdown/jackrabbit-core-1.4.1.md (original)
+++ jackrabbit/site/trunk/src/site/markdown/jackrabbit-core-1.4.1.md Fri Apr  3 20:03:27 2015
@@ -1,9 +1,27 @@
-Title: jackrabbit-core 1.4.1
+<!--
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+-->
+
+jackrabbit-core 1.4.1
+=====================
 Release Notes -- Apache Jackrabbit Core -- Version 1.4.1
 
-<a name="jackrabbit-core1.4.1-Introduction"></a>
-## Introduction
 
+Introduction
+------------
 This is the 1.4.1 patch release of the jackrabbit-core component of Apache
 Jackrabbit, a fully conforming implementation of the Content Repository for
 Java Technology API (JCR).
@@ -15,15 +33,15 @@ full list of changes in this release.
 See the Apache Jackrabbit website at http://jackrabbit.apache.org/ for more
 information.
 
-<a name="jackrabbit-core1.4.1-ReleaseContents"></a>
-## Release Contents
 
+Release Contents
+----------------
 Unlike previous Jackrabbit releases that contained a full set of
 components, this patch release only contains the jackrabbit-core component.
 The component is distributed both as a source archive and a pre-compiled
 binary.
 
-*Source archive (jackrabbit-core-1.4.1-src.jar)*
+### Source archive (jackrabbit-core-1.4.1-src.jar)
 
 The source archive contains the full source code of this release in a
 "jackrabbit-core-1.4.1" directory. Use the following commands (or the
@@ -36,7 +54,7 @@ Java 1.4 or higher:
     $ mvn install
 
 
-*Pre-compiled binary (jackrabbit-core-1.4.1.jar)*
+### Pre-compiled binary (jackrabbit-core-1.4.1.jar)
 
 Core of the Apache Jackrabbit content repository implementation.
 
@@ -46,128 +64,71 @@ Each release file is accompanied by SHA1
 signature. The public key used for the signatures can be found in the KEYS
 file.
 
-<a name="jackrabbit-core1.4.1-Changesandknownissuesinthisrelease"></a>
-## Changes and known issues in this release
 
+Changes and known issues in this release
+----------------------------------------
 All the changes and known issues in this release are listed below. The
 issue identifier and title is listed for each change and known issue. You
 can look up individual issues for more details in the Jackrabbit issue
 tracker at http://issues.apache.org/jira/browse/JCR
 
-Bug fixes
 
-* \[[JCR-1046](https://issues.apache.org/jira/browse/JCR-1046)
-] Non-versionable children of a versionable node should not be ...
-* \[[JCR-1227](https://issues.apache.org/jira/browse/JCR-1227)
-] Restore of empty multivalue property always changes property ...
-* \[[JCR-1305](https://issues.apache.org/jira/browse/JCR-1305)
-] JNDI data sources with BundleDbPersistenceManager: ...
-* \[[JCR-1318](https://issues.apache.org/jira/browse/JCR-1318)
-] Repository Home locked not released despite ...
-* \[[JCR-1322](https://issues.apache.org/jira/browse/JCR-1322)
-] Cluster information is not persisted to database when ...
-* \[[JCR-1323](https://issues.apache.org/jira/browse/JCR-1323)
-] When using QueryImpl.setLimit() and QueryImpl.setOffset(), ...
-* \[[JCR-1332](https://issues.apache.org/jira/browse/JCR-1332)
-] CLONE -Aggregate include ignored if no primaryType set
-* \[[JCR-1341](https://issues.apache.org/jira/browse/JCR-1341)
-] Cluster Journal directory should be created automatically
-* \[[JCR-1346](https://issues.apache.org/jira/browse/JCR-1346)
-] InternalValue.createCopy for binary properties (jcr:data) ...
-* \[[JCR-1358](https://issues.apache.org/jira/browse/JCR-1358)
-] Cluster revision file not closed on repository shutdown.
-* \[[JCR-1372](https://issues.apache.org/jira/browse/JCR-1372)
-] \[PATCH] Fix possible Null Ptr exception in ConnectionFactory
-* \[[JCR-1374](https://issues.apache.org/jira/browse/JCR-1374)
-] \[PATCH] DbDataStore: Make sure streams are closed
-* \[[JCR-1376](https://issues.apache.org/jira/browse/JCR-1376)
-] SearchIndex parameter cacheSize is ignored
-* \[[JCR-1379](https://issues.apache.org/jira/browse/JCR-1379)
-] AbstractExcerpt uses wrong logger
-* \[[JCR-1380](https://issues.apache.org/jira/browse/JCR-1380)
-] CachingHierarchyManager synchronization problem
-* \[[JCR-1389](https://issues.apache.org/jira/browse/JCR-1389)
-] setProperty("name", new Value\[0], PropertyType.LONG) loses ...
-
-Known issues
-
-* \[[JCR-43](https://issues.apache.org/jira/browse/JCR-43)
-]   Restore on nodes creates same-name-sibling of ...
-* \[[JCR-320](https://issues.apache.org/jira/browse/JCR-320)
-]  BinaryValue equals fails for two objects with ...
-* \[[JCR-392](https://issues.apache.org/jira/browse/JCR-392)
-]  Querying element by number does not work
-* \[[JCR-435](https://issues.apache.org/jira/browse/JCR-435)
-]  Node.update() does not work correct for SNS
-* \[[JCR-449](https://issues.apache.org/jira/browse/JCR-449)
-]  inconsistency in internal version items during commits
-* \[[JCR-517](https://issues.apache.org/jira/browse/JCR-517)
-]  Reserved status of namespace jcr not enforced
-* \[[JCR-522](https://issues.apache.org/jira/browse/JCR-522)
-]  XPath parser too tolerant
-* \[[JCR-537](https://issues.apache.org/jira/browse/JCR-537)
-]  Failure to remove a versionable node
-* \[[JCR-538](https://issues.apache.org/jira/browse/JCR-538)
-]  failing Node.checkin() or Node.checkout() might leave ...
-* \[[JCR-566](https://issues.apache.org/jira/browse/JCR-566)
-]  Versioning bug with restore and transactions
-* \[[JCR-575](https://issues.apache.org/jira/browse/JCR-575)
-]  unicode escapes in files generated by JJTree
-* \[[JCR-591](https://issues.apache.org/jira/browse/JCR-591)
-]  XPath position function does not work
-* \[[JCR-639](https://issues.apache.org/jira/browse/JCR-639)
-]  Allow modification of OPV=IGNORE items even if parent ...
-* \[[JCR-643](https://issues.apache.org/jira/browse/JCR-643)
-]  Own AccessManager + VersionManager : AccessDenied problem
-* \[[JCR-690](https://issues.apache.org/jira/browse/JCR-690)
-]  Nodes' and properties' names with invalid XML ...
-* \[[JCR-709](https://issues.apache.org/jira/browse/JCR-709)
-]  ArrayStoreException is thrown when jcr:deref() is used ...
-* \[[JCR-777](https://issues.apache.org/jira/browse/JCR-777)
-]  Order by clause using child axis does not throw ...
-* \[[JCR-843](https://issues.apache.org/jira/browse/JCR-843)
-]  XPath does not work with sub-axes
-* \[[JCR-908](https://issues.apache.org/jira/browse/JCR-908)
-]  Unable to properly restore a previous version of a node that ...
-* \[[JCR-932](https://issues.apache.org/jira/browse/JCR-932)
-]  Lossy SQL parsing
-* \[[JCR-935](https://issues.apache.org/jira/browse/JCR-935)
-]  ConcurrentModificationException during logout (cont'd)
-* \[[JCR-936](https://issues.apache.org/jira/browse/JCR-936)
-]  Using Oracle bundle PM throws SQL exception (cannot insert NULL)
-* \[[JCR-983](https://issues.apache.org/jira/browse/JCR-983)
-]  fn:upper accepted in too many places
-* \[[JCR-1002](https://issues.apache.org/jira/browse/JCR-1002)
-] QueryManager does not throw exception if property name ...
-* \[[JCR-1075](https://issues.apache.org/jira/browse/JCR-1075)
-] Error with predicate in query with multiple jcr:deref()
-* \[[JCR-1117](https://issues.apache.org/jira/browse/JCR-1117)
-] Bundle cache is not rolled back when the storage of a ...
-* \[[JCR-1135](https://issues.apache.org/jira/browse/JCR-1135)
-] boolean value constraints exposed in custom format
-* \[[JCR-1173](https://issues.apache.org/jira/browse/JCR-1173)
-] Session scoped lock has no effect on other cluster nodes
-* \[[JCR-1187](https://issues.apache.org/jira/browse/JCR-1187)
-] Asking a property twice for it's stream returns the same ...
-* \[[JCR-1211](https://issues.apache.org/jira/browse/JCR-1211)
-] QueryManager does not throw exception if jcr:deref is used in ...
-* \[[JCR-1223](https://issues.apache.org/jira/browse/JCR-1223)
-] Occasional NPE on node checkin
-* \[[JCR-1248](https://issues.apache.org/jira/browse/JCR-1248)
-] ParseException if search string ends with '!'
-* \[[JCR-1275](https://issues.apache.org/jira/browse/JCR-1275)
-] NullPointerException in AbstractVersionManager....
-* \[[JCR-1334](https://issues.apache.org/jira/browse/JCR-1334)
-] Deadlock with XA enabled
-* \[[JCR-1354](https://issues.apache.org/jira/browse/JCR-1354)
-] Repository shutdown reposts ERROR: failed to close connection
-* \[[JCR-1359](https://issues.apache.org/jira/browse/JCR-1359)
-] Adding nodes from concurrently running sessions cause exceptions
-* \[[JCR-1360](https://issues.apache.org/jira/browse/JCR-1360)
-] Parsing built-in CND and XML nodetypes does not result in ...
-* \[[JCR-1362](https://issues.apache.org/jira/browse/JCR-1362)
-] DatabaseJournal improperly finds tables in external schemas ...
-* \[[JCR-1367](https://issues.apache.org/jira/browse/JCR-1367)
-] Exception when closing connection under db2
-* \[[JCR-1387](https://issues.apache.org/jira/browse/JCR-1387)
-] Lock token not removed from session when node is removed
+### Bug fixes
+* \[[JCR-1046](https://issues.apache.org/jira/browse/JCR-1046)] Non-versionable children of a versionable node should not be ...
+* \[[JCR-1227](https://issues.apache.org/jira/browse/JCR-1227)] Restore of empty multivalue property always changes property ...
+* \[[JCR-1305](https://issues.apache.org/jira/browse/JCR-1305)] JNDI data sources with BundleDbPersistenceManager: ...
+* \[[JCR-1318](https://issues.apache.org/jira/browse/JCR-1318)] Repository Home locked not released despite ...
+* \[[JCR-1322](https://issues.apache.org/jira/browse/JCR-1322)] Cluster information is not persisted to database when ...
+* \[[JCR-1323](https://issues.apache.org/jira/browse/JCR-1323)] When using QueryImpl.setLimit() and QueryImpl.setOffset(), ...
+* \[[JCR-1332](https://issues.apache.org/jira/browse/JCR-1332)] CLONE -Aggregate include ignored if no primaryType set
+* \[[JCR-1341](https://issues.apache.org/jira/browse/JCR-1341)] Cluster Journal directory should be created automatically
+* \[[JCR-1346](https://issues.apache.org/jira/browse/JCR-1346)] InternalValue.createCopy for binary properties (jcr:data) ...
+* \[[JCR-1358](https://issues.apache.org/jira/browse/JCR-1358)] Cluster revision file not closed on repository shutdown.
+* \[[JCR-1372](https://issues.apache.org/jira/browse/JCR-1372)] \[PATCH] Fix possible Null Ptr exception in ConnectionFactory
+* \[[JCR-1374](https://issues.apache.org/jira/browse/JCR-1374)] \[PATCH] DbDataStore: Make sure streams are closed
+* \[[JCR-1376](https://issues.apache.org/jira/browse/JCR-1376)] SearchIndex parameter cacheSize is ignored
+* \[[JCR-1379](https://issues.apache.org/jira/browse/JCR-1379)] AbstractExcerpt uses wrong logger
+* \[[JCR-1380](https://issues.apache.org/jira/browse/JCR-1380)] CachingHierarchyManager synchronization problem
+* \[[JCR-1389](https://issues.apache.org/jira/browse/JCR-1389)] setProperty("name", new Value\[0], PropertyType.LONG) loses ...
+
+### Known issues
+* \[[JCR-43](https://issues.apache.org/jira/browse/JCR-43)] Restore on nodes creates same-name-sibling of ...
+* \[[JCR-320](https://issues.apache.org/jira/browse/JCR-320)] BinaryValue equals fails for two objects with ...
+* \[[JCR-392](https://issues.apache.org/jira/browse/JCR-392)] Querying element by number does not work
+* \[[JCR-435](https://issues.apache.org/jira/browse/JCR-435)] Node.update() does not work correct for SNS
+* \[[JCR-449](https://issues.apache.org/jira/browse/JCR-449)] inconsistency in internal version items during commits
+* \[[JCR-517](https://issues.apache.org/jira/browse/JCR-517)] Reserved status of namespace jcr not enforced
+* \[[JCR-522](https://issues.apache.org/jira/browse/JCR-522)] XPath parser too tolerant
+* \[[JCR-537](https://issues.apache.org/jira/browse/JCR-537)] Failure to remove a versionable node
+* \[[JCR-538](https://issues.apache.org/jira/browse/JCR-538)] failing Node.checkin() or Node.checkout() might leave ...
+* \[[JCR-566](https://issues.apache.org/jira/browse/JCR-566)] Versioning bug with restore and transactions
+* \[[JCR-575](https://issues.apache.org/jira/browse/JCR-575)] unicode escapes in files generated by JJTree
+* \[[JCR-591](https://issues.apache.org/jira/browse/JCR-591)] XPath position function does not work
+* \[[JCR-639](https://issues.apache.org/jira/browse/JCR-639)] Allow modification of OPV=IGNORE items even if parent ...
+* \[[JCR-643](https://issues.apache.org/jira/browse/JCR-643)] Own AccessManager + VersionManager : AccessDenied problem
+* \[[JCR-690](https://issues.apache.org/jira/browse/JCR-690)] Nodes' and properties' names with invalid XML ...
+* \[[JCR-709](https://issues.apache.org/jira/browse/JCR-709)] ArrayStoreException is thrown when jcr:deref() is used ...
+* \[[JCR-777](https://issues.apache.org/jira/browse/JCR-777)] Order by clause using child axis does not throw ...
+* \[[JCR-843](https://issues.apache.org/jira/browse/JCR-843)] XPath does not work with sub-axes
+* \[[JCR-908](https://issues.apache.org/jira/browse/JCR-908)] Unable to properly restore a previous version of a node that ...
+* \[[JCR-932](https://issues.apache.org/jira/browse/JCR-932)] Lossy SQL parsing
+* \[[JCR-935](https://issues.apache.org/jira/browse/JCR-935)] ConcurrentModificationException during logout (cont'd)
+* \[[JCR-936](https://issues.apache.org/jira/browse/JCR-936)] Using Oracle bundle PM throws SQL exception (cannot insert NULL)
+* \[[JCR-983](https://issues.apache.org/jira/browse/JCR-983)] fn:upper accepted in too many places
+* \[[JCR-1002](https://issues.apache.org/jira/browse/JCR-1002)] QueryManager does not throw exception if property name ...
+* \[[JCR-1075](https://issues.apache.org/jira/browse/JCR-1075)] Error with predicate in query with multiple jcr:deref()
+* \[[JCR-1117](https://issues.apache.org/jira/browse/JCR-1117)] Bundle cache is not rolled back when the storage of a ...
+* \[[JCR-1135](https://issues.apache.org/jira/browse/JCR-1135)] boolean value constraints exposed in custom format
+* \[[JCR-1173](https://issues.apache.org/jira/browse/JCR-1173)] Session scoped lock has no effect on other cluster nodes
+* \[[JCR-1187](https://issues.apache.org/jira/browse/JCR-1187)] Asking a property twice for it's stream returns the same ...
+* \[[JCR-1211](https://issues.apache.org/jira/browse/JCR-1211)] QueryManager does not throw exception if jcr:deref is used in ...
+* \[[JCR-1223](https://issues.apache.org/jira/browse/JCR-1223)] Occasional NPE on node checkin
+* \[[JCR-1248](https://issues.apache.org/jira/browse/JCR-1248)] ParseException if search string ends with '!'
+* \[[JCR-1275](https://issues.apache.org/jira/browse/JCR-1275)] NullPointerException in AbstractVersionManager....
+* \[[JCR-1334](https://issues.apache.org/jira/browse/JCR-1334)] Deadlock with XA enabled
+* \[[JCR-1354](https://issues.apache.org/jira/browse/JCR-1354)] Repository shutdown reposts ERROR: failed to close connection
+* \[[JCR-1359](https://issues.apache.org/jira/browse/JCR-1359)] Adding nodes from concurrently running sessions cause exceptions
+* \[[JCR-1360](https://issues.apache.org/jira/browse/JCR-1360)] Parsing built-in CND and XML nodetypes does not result in ...
+* \[[JCR-1362](https://issues.apache.org/jira/browse/JCR-1362)] DatabaseJournal improperly finds tables in external schemas ...
+* \[[JCR-1367](https://issues.apache.org/jira/browse/JCR-1367)] Exception when closing connection under db2
+* \[[JCR-1387](https://issues.apache.org/jira/browse/JCR-1387)] Lock token not removed from session when node is removed

Copied: jackrabbit/site/trunk/src/site/markdown/status/jackrabbit-chair-2006-resolution.md (from r1670829, jackrabbit/site/trunk/src/site/markdown/jackrabbit-chair-2006-resolution.md)
URL: http://svn.apache.org/viewvc/jackrabbit/site/trunk/src/site/markdown/status/jackrabbit-chair-2006-resolution.md?p2=jackrabbit/site/trunk/src/site/markdown/status/jackrabbit-chair-2006-resolution.md&p1=jackrabbit/site/trunk/src/site/markdown/jackrabbit-chair-2006-resolution.md&r1=1670829&r2=1671145&rev=1671145&view=diff
==============================================================================
--- jackrabbit/site/trunk/src/site/markdown/jackrabbit-chair-2006-resolution.md (original)
+++ jackrabbit/site/trunk/src/site/markdown/status/jackrabbit-chair-2006-resolution.md Fri Apr  3 20:03:27 2015
@@ -1,6 +1,23 @@
-Title: Jackrabbit Chair 2006 Resolution
-_From the [minutes](http://www.apache.org/foundation/records/minutes/2006/board_minutes_2006_08_16.txt)
- of the Apache board meeting on August 16th, 2006:_
+<!--
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+-->
+
+Jackrabbit Chair 2006 Resolution
+================================
+_From the [minutes](http://www.apache.org/foundation/records/minutes/2006/board_minutes_2006_08_16.txt) of the Apache board meeting on August 16th, 2006:_
 
 
      6. Special Orders