You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by th...@apache.org on 2010/03/28 17:43:20 UTC

svn commit: r928437 [3/3] - in /jackrabbit/sandbox/jackrabbit-j3: ./ src/main/java/org/apache/jackrabbit/j3/ src/main/java/org/apache/jackrabbit/j3/lock/ src/main/java/org/apache/jackrabbit/j3/mc/ src/main/java/org/apache/jackrabbit/j3/mc/jdbc/ src/mai...

Added: jackrabbit/sandbox/jackrabbit-j3/src/site/resources/images/drawing.svg
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-j3/src/site/resources/images/drawing.svg?rev=928437&view=auto
==============================================================================
--- jackrabbit/sandbox/jackrabbit-j3/src/site/resources/images/drawing.svg (added)
+++ jackrabbit/sandbox/jackrabbit-j3/src/site/resources/images/drawing.svg Sun Mar 28 15:43:18 2010
@@ -0,0 +1,572 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="744.09448819"
+   height="1052.3622047"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="drawing.svg"
+   inkscape:export-filename="/Users/tmueller/drawing.png"
+   inkscape:export-xdpi="48.380001"
+   inkscape:export-ydpi="48.380001">
+  <defs
+     id="defs4">
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3831">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop3833" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop3835" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3944">
+      <stop
+         style="stop-color:#dfdfdf;stop-opacity:1;"
+         offset="0"
+         id="stop3946" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="1"
+         id="stop3948" />
+    </linearGradient>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective10" />
+    <inkscape:perspective
+       id="perspective2839"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective2853"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective2888"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective2915"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective2943"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective2975"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3014"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3101"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3128"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3156"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3944"
+       id="linearGradient3950"
+       x1="413.78574"
+       y1="1247.1479"
+       x2="-93.785728"
+       y2="159.50508"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.60164345,0,0,0.73185485,220.3087,21.480661)" />
+    <inkscape:perspective
+       id="perspective3697"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3724"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3751"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3782"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3817"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3831"
+       id="linearGradient3837"
+       x1="32.854668"
+       y1="635.71545"
+       x2="744.08076"
+       y2="635.71545"
+       gradientUnits="userSpaceOnUse" />
+    <filter
+       inkscape:collect="always"
+       id="filter3845">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="12.32886"
+         id="feGaussianBlur3847" />
+    </filter>
+    <inkscape:perspective
+       id="perspective3870"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <filter
+       inkscape:collect="always"
+       id="filter3878"
+       x="-0.04546406"
+       width="1.0909281"
+       y="-0.18568184"
+       height="1.3713637">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="8.8512327"
+         id="feGaussianBlur3880" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter3910">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="3.8240589"
+         id="feGaussianBlur3912" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter3946">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="4.1940534"
+         id="feGaussianBlur3948" />
+    </filter>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.66873709"
+     inkscape:cx="256.23266"
+     inkscape:cy="646.80961"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     inkscape:window-width="1440"
+     inkscape:window-height="852"
+     inkscape:window-x="0"
+     inkscape:window-y="0"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <rect
+       rx="39.400002"
+       y="208.241"
+       x="29.427359"
+       height="729.76379"
+       width="688.05511"
+       id="rect3839"
+       style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;filter:url(#filter3845)" />
+    <rect
+       style="fill:url(#linearGradient3950);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect3170"
+       width="688.05511"
+       height="729.76379"
+       x="23.8822"
+       y="204.08212"
+       rx="39.400002" />
+    <rect
+       rx="23.690449"
+       y="657.06787"
+       x="62.296535"
+       height="257.26605"
+       width="625.69257"
+       id="rect3882"
+       style="fill:#644600;fill-opacity:1;stroke:#000000;stroke-width:1.28393507;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;filter:url(#filter3946)" />
+    <rect
+       rx="23.700001"
+       y="323.8233"
+       x="60.15527"
+       height="251.57126"
+       width="627.96228"
+       id="rect3884"
+       style="fill:#3b0000;fill-opacity:1;stroke:#000000;stroke-width:1.0269829;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;filter:url(#filter3910)" />
+    <rect
+       style="fill:#ffb200;fill-opacity:1;stroke:#000000;stroke-width:1.28393507;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect3757"
+       width="625.69257"
+       height="257.26605"
+       x="58.137669"
+       y="651.52271"
+       rx="23.690449" />
+    <rect
+       rx="23.700001"
+       y="27.575569"
+       x="219.74333"
+       height="114.40515"
+       width="467.24728"
+       id="rect3876"
+       style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;filter:url(#filter3878)" />
+    <rect
+       y="822.29254"
+       x="439.7944"
+       height="70.267014"
+       width="224.79643"
+       id="rect3788"
+       style="fill:#ffff00;fill-opacity:1;stroke:#000000;stroke-width:1.27992463;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       rx="21.82123" />
+    <rect
+       style="fill:#ff0000;fill-opacity:1;stroke:#000000;stroke-width:1.0269829;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect3759"
+       width="627.96228"
+       height="251.57126"
+       x="55.996403"
+       y="318.27814"
+       rx="23.700001" />
+    <rect
+       style="fill:#ffff00;fill-opacity:1;stroke:#000000;stroke-width:1.23394859;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect3674"
+       width="209.09579"
+       height="70.213562"
+       x="222.44023"
+       y="823.32568"
+       rx="23.700001" />
+    <rect
+       style="fill:#0048ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect2859"
+       width="467.24728"
+       height="114.40515"
+       x="215.58446"
+       y="22.030411"
+       rx="23.700001" />
+    <text
+       xml:space="preserve"
+       style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="245.14754"
+       y="90.5858"
+       id="text2861"><tspan
+         sodipodi:role="line"
+         id="tspan2863"
+         x="245.14754"
+         y="90.5858">App</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="62.45303"
+       y="286.31436"
+       id="text2949"><tspan
+         sodipodi:role="line"
+         id="tspan2951"
+         x="62.45303"
+         y="286.31436">Jackrabbit 3</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:32px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+       x="75.719078"
+       y="703.97876"
+       id="text2985"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan2987"
+         x="75.719078"
+         y="703.97876">Micro </tspan><tspan
+         sodipodi:role="line"
+         x="75.719078"
+         y="743.97876"
+         id="tspan3952">Kernel</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:32px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+       x="78.379486"
+       y="366.26154"
+       id="text2989"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan2991"
+         x="78.379486"
+         y="366.26154">Core</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+       x="243.87801"
+       y="705.23621"
+       id="text3020"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3022"
+         x="243.87801"
+         y="705.23621">Storage</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+       x="246.70222"
+       y="179.09171"
+       id="text3024"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3026"
+         x="246.70222"
+         y="179.09171">JCR API</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+       x="243.10457"
+       y="619.8031"
+       id="text3028"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3030"
+         x="243.10457"
+         y="619.8031">Micro Kernel API</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+       x="243.87801"
+       y="750.22107"
+       id="text3032"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3034"
+         x="243.87801"
+         y="750.22107">StorageSession</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+       x="465.52194"
+       y="705.79871"
+       id="text3036"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3038"
+         x="465.52194"
+         y="705.79871">NodeData</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+       x="465.52194"
+       y="465.74747"
+       id="text3040"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3042"
+         x="465.52194"
+         y="465.74747">NodeState</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+       x="465.52194"
+       y="791.00354"
+       id="text3044"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3046"
+         x="465.52194"
+         y="791.00354">Bundle</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+       x="467.68991"
+       y="750.22107"
+       id="text3048"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3050"
+         x="467.68991"
+         y="750.22107">Val</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+       x="243.10457"
+       y="459.54434"
+       id="text3052"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3054"
+         x="243.10457"
+         y="459.54434">NodeImpl</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+       x="243.87801"
+       y="414.09412"
+       id="text3056"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3058"
+         x="243.87801"
+         y="414.09412">SessionImpl</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+       x="243.10457"
+       y="368.64398"
+       id="text3060"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3062"
+         x="243.10457"
+         y="368.64398">RepositoryImpl</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:32px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+       x="80.399834"
+       y="412.27417"
+       id="text3064"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3066"
+         x="80.399834"
+         y="412.27417">j3</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:32px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+       x="78.57618"
+       y="783.81055"
+       id="text3068"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3070"
+         x="78.57618"
+         y="783.81055">j3.mc</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:32px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+       x="245.12196"
+       y="867.26056"
+       id="text3072"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3074"
+         x="245.12196"
+         y="867.26056">j3.mc.jdbc</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:32px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+       x="467.53934"
+       y="867.26056"
+       id="text3076"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3078"
+         x="467.53934"
+         y="867.26056">j3.mc.mem</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+       x="466.52975"
+       y="368.64398"
+       id="text3162"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3164"
+         x="466.52975"
+         y="368.64398">Change</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+       x="466.52975"
+       y="418.74646"
+       id="text3166"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3168"
+         x="466.52975"
+         y="418.74646">Cache</tspan></text>
+  </g>
+</svg>

Added: jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/Profiler.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/Profiler.java?rev=928437&view=auto
==============================================================================
--- jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/Profiler.java (added)
+++ jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/Profiler.java Sun Mar 28 15:43:18 2010
@@ -0,0 +1,237 @@
+/*
+ * 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.
+ */
+package org.apache.jackrabbit.j3;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import org.h2.engine.Constants;
+import org.h2.util.New;
+
+/**
+ * A simple CPU profiling tool similar to java -Xrunhprof.
+ */
+public class Profiler implements Runnable {
+    private static final int MAX_ELEMENTS = 1000;
+
+    public int interval = 50;
+    public int depth = 16;
+
+    private String[] ignoreLines = arraySplit("", ',', true);
+    private String[] ignoreThreads = arraySplit(
+            "java.lang.Thread.dumpThreads," +
+            "java.net.PlainSocketImpl.socketAccept," +
+            "java.net.SocketInputStream.socketRead0," +
+            "java.net.SocketOutputStream.socketWrite0," +
+            "java.lang.UNIXProcess.waitForProcessExit," +
+            "java.lang.Object.wait," +
+            "java.lang.Thread.sleep," +
+            "sun.awt.windows.WToolkit.eventLoop,"
+            , ',', true);
+    private volatile boolean stop;
+    private HashMap<String, Integer> counts = new HashMap<String, Integer>();
+    private int minCount = 1;
+    private int total;
+    private Thread thread;
+    private long time;
+
+    /**
+     * Start collecting profiling data.
+     */
+    public void startCollecting() {
+        thread = new Thread(this);
+        thread.setName("Profiler");
+        thread.setDaemon(true);
+        thread.start();
+    }
+
+    /**
+     * Stop collecting.
+     */
+    public void stopCollecting() {
+        stop = true;
+        if (thread != null) {
+            try {
+                thread.join();
+            } catch (InterruptedException e) {
+                // ignore
+            }
+            thread = null;
+        }
+    }
+
+    public void run() {
+        time = System.currentTimeMillis();
+        while (!stop) {
+            try {
+                tick();
+            } catch (Throwable t) {
+                break;
+            }
+        }
+        time = System.currentTimeMillis() - time;
+    }
+
+    private void tick() {
+        if (interval > 0) {
+            try {
+                Thread.sleep(interval);
+            } catch (Exception e) {
+                // ignore
+            }
+        }
+        Map<Thread, StackTraceElement[]> map = Thread.getAllStackTraces();
+        for (Map.Entry<Thread, StackTraceElement[]> entry : map.entrySet()) {
+            Thread t = entry.getKey();
+            if (t.getState() != Thread.State.RUNNABLE) {
+                continue;
+            }
+            StackTraceElement[] dump = entry.getValue();
+            if (dump.length == 0) {
+                continue;
+            }
+            boolean ignoreThis = false;
+            for (String ig : ignoreThreads) {
+                if (ig.length() > 0 && dump[0].toString().startsWith(ig)) {
+                    ignoreThis = true;
+                    break;
+                }
+            }
+            if (ignoreThis) {
+                continue;
+            }
+            StringBuilder buff = new StringBuilder();
+            // simple recursive calls are ignored
+            String last = null;
+            for (int j = 0, i = 0; i < dump.length && j < depth; i++) {
+                String el = dump[i].toString();
+                ignoreThis = false;
+                for (String ig : ignoreLines) {
+                    if (ig.length() > 0 && el.startsWith(ig)) {
+                        ignoreThis = true;
+                        break;
+                    }
+                }
+                if (!ignoreThis && !el.equals(last)) {
+                    last = el;
+                    buff.append("at ").append(el).append('\n');
+                    j++;
+                }
+            }
+            if (buff.length() > 0) {
+                increment(buff.toString());
+            }
+        }
+    }
+
+    private void increment(String trace) {
+        total++;
+        Integer oldCount = counts.get(trace);
+        if (oldCount == null) {
+            counts.put(trace, 1);
+        } else {
+            counts.put(trace, oldCount + 1);
+        }
+        if (counts.size() > MAX_ELEMENTS) {
+            for (Iterator<Map.Entry<String, Integer>> ei = counts.entrySet().iterator(); ei.hasNext();) {
+                Map.Entry<String, Integer> e = ei.next();
+                if (e.getValue() <= minCount) {
+                    ei.remove();
+                }
+            }
+            if (counts.size() > MAX_ELEMENTS) {
+                minCount++;
+            }
+        }
+    }
+
+    /**
+     * Get the top stack traces.
+     *
+     * @param count the maximum number of stack traces
+     * @return the stack traces.
+     */
+    public String getTop(int count) {
+        StringBuilder buff = new StringBuilder();
+        buff.append("Profiler: top ").append(count).append(" stack trace(s) of ").append(time).
+            append(" ms [build-").append(Constants.BUILD_ID).append("]\n");
+        for (int x = 0, min = 0;;) {
+            int highest = 0;
+            Map.Entry<String, Integer> best = null;
+            for (Map.Entry<String, Integer> el : counts.entrySet()) {
+                if (el.getValue() > highest) {
+                    best = el;
+                    highest = el.getValue();
+                }
+            }
+            if (best == null) {
+                break;
+            }
+            counts.remove(best.getKey());
+            if (++x >= count) {
+                if (best.getValue() < min) {
+                    break;
+                }
+                min = best.getValue();
+            }
+            buff.append(best.getValue()).append('/').append(total).
+                append('\n').append(best.getKey());
+        }
+        buff.append('.');
+        return buff.toString();
+    }
+
+    /**
+     * Split a string into an array of strings using the given separator. A null
+     * string will result in a null array, and an empty string in a zero element
+     * array.
+     *
+     * @param s the string to split
+     * @param separatorChar the separator character
+     * @param trim whether each element should be trimmed
+     * @return the array list
+     */
+    public static String[] arraySplit(String s, char separatorChar, boolean trim) {
+        if (s == null) {
+            return null;
+        }
+        if (s.length() == 0) {
+            return new String[0];
+        }
+        ArrayList<String> list = New.arrayList();
+        StringBuilder buff = new StringBuilder(s.length());
+        for (int i = 0; i < s.length(); i++) {
+            char c = s.charAt(i);
+            if (c == separatorChar) {
+                String e = buff.toString();
+                list.add(trim ? e.trim() : e);
+                buff.setLength(0);
+            } else if (c == '\\' && i < s.length() - 1) {
+                buff.append(s.charAt(++i));
+            } else {
+                buff.append(c);
+            }
+        }
+        String e = buff.toString();
+        list.add(trim ? e.trim() : e);
+        String[] array = new String[list.size()];
+        list.toArray(array);
+        return array;
+    }
+
+}

Modified: jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/TestAll.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/TestAll.java?rev=928437&r1=928436&r2=928437&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/TestAll.java (original)
+++ jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/TestAll.java Sun Mar 28 15:43:18 2010
@@ -19,6 +19,9 @@ package org.apache.jackrabbit.j3;
 import junit.framework.Test;
 import junit.framework.TestSuite;
 
+/**
+ * Runs all tests.
+ */
 public class TestAll {
 
     /**
@@ -32,10 +35,14 @@ public class TestAll {
         TestSuite suite = new TestSuite("org.apache.jackrabbit.j3");
 
         suite.addTestSuite(TestBundle.class);
+        suite.addTestSuite(TestNamespaceRegistry.class);
+        suite.addTestSuite(TestNodeTypeRegistry.class);
 
-        for (int i=0; i<2; i++) {
+        for (int i = 0; i < TestBase.URL.length; i++) {
             suite.addTestSuite(TestConcurrentWrite.class);
+            suite.addTestSuite(TestLock.class);
             suite.addTestSuite(TestSimple.class);
+            suite.addTestSuite(TestObservation.class);
             suite.addTestSuite(TestNextConfiguration.class);
         }
 

Modified: jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/TestBase.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/TestBase.java?rev=928437&r1=928436&r2=928437&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/TestBase.java (original)
+++ jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/TestBase.java Sun Mar 28 15:43:18 2010
@@ -16,6 +16,7 @@
  */
 package org.apache.jackrabbit.j3;
 
+import java.io.File;
 import java.util.HashMap;
 import java.util.Map;
 import javax.jcr.LoginException;
@@ -25,19 +26,26 @@ import javax.jcr.RepositoryFactory;
 import javax.jcr.Session;
 import javax.jcr.SimpleCredentials;
 import junit.framework.TestCase;
+import org.apache.commons.io.FileUtils;
 
+/**
+ * The base class for the tests.
+ */
 public class TestBase extends TestCase {
 
     protected static int configurationId;
 
-    private Repository repository;
-    protected Session session;
-    private static final String[] URL = new String[] {
+    public static final String[] URL = new String[] {
+        "jdbc:h2:target/repos/test",
         "mem:",
-        "jdbc:h2:mem:test"
+        "jdbc:h2:mem:test",
     };
 
+    private Repository repository;
+    protected Session session;
+
     public void setUp() throws Exception {
+        FileUtils.deleteDirectory(new File("target/repos"));
         String factoryClass = "org.apache.jackrabbit.j3.RepositoryFactoryImpl";
         String url = URL[configurationId];
         RepositoryFactory factory = (RepositoryFactory) Class.forName(factoryClass).newInstance();

Modified: jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/TestBundle.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/TestBundle.java?rev=928437&r1=928436&r2=928437&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/TestBundle.java (original)
+++ jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/TestBundle.java Sun Mar 28 15:43:18 2010
@@ -21,8 +21,26 @@ import junit.framework.TestCase;
 import org.apache.jackrabbit.j3.mc.Bundle;
 import org.apache.jackrabbit.j3.mc.Val;
 
+/**
+ * Tests the bundle format.
+ */
 public class TestBundle extends TestCase {
 
+    public void testVal() {
+        Val x = Val.get(Val.get(20));
+        x = x.addOrdered(Val.get(10));
+        x = x.addOrdered(Val.get(30));
+        x = x.addOrdered(Val.get(15));
+        x = x.addOrdered(Val.get(25));
+        assertEquals(Val.get(Val.get(10), Val.get(15), Val.get(20), Val.get(25), Val.get(30)), x);
+        x = x.removeOrdered(Val.get(15));
+        x = x.removeOrdered(Val.get(30));
+        x = x.removeOrdered(Val.get(10));
+        x = x.removeOrdered(Val.get(20));
+        x = x.removeOrdered(Val.get(25));
+        assertEquals(Val.get(), x);
+    }
+
     public void testBundle() {
         Bundle bundle = Bundle.create(512);
         bundle.writeVal(Val.get("Hello")).writeVal(Val.get("World"));
@@ -65,8 +83,11 @@ public class TestBundle extends TestCase
         testLength(Val.get("long string with strange characters äöü \u1234"));
         testLength(Val.get(new byte[1024]));
         testLength(Val.get(new byte[1024 * 1024]));
-        testLength(true, Val.get(new Val[]{Val.get("Hello World 1"), Val.get("Hello World 2"), Val.get("Hello World 3")}));
-        testLength(true, Val.get(new Val[]{Val.get("Hello World 1"), Val.get("Hello World 1"), Val.get("Hello World 1")}));
+        testLength(true, Val.get(Val.get("Hello World 1"), Val.get("Hello World 2"), Val.get("Hello World 3")));
+        testLength(true, Val.get(Val.get("Hello World 1"), Val.get("Hello World 1"), Val.get("Hello World 1")));
+        testLength(Val.get());
+        testLength(Val.get(Val.get(1), Val.get(2), Val.get(3)));
+        testLength(Val.get(Val.get(1), Val.get(2), Val.get(3), Val.get(4)));
     }
 
     static void testLength(Val v) {

Modified: jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/TestConcurrentWrite.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/TestConcurrentWrite.java?rev=928437&r1=928436&r2=928437&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/TestConcurrentWrite.java (original)
+++ jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/TestConcurrentWrite.java Sun Mar 28 15:43:18 2010
@@ -25,6 +25,9 @@ import javax.jcr.Node;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 
+/**
+ * Tests concurrently writing to the same node.
+ */
 public class TestConcurrentWrite extends TestBase {
 
    private String parentUUID;
@@ -51,10 +54,8 @@ public class TestConcurrentWrite extends
        session.logout();
    }
 
-
-
    public void testConcurrency() throws Exception {
-       int threadCount = 20;
+       int threadCount = 5;
        final List<Exception> exceptions = new ArrayList<Exception>();
        final CountDownLatch latch = new CountDownLatch(threadCount);
        for (int i = 0; i < threadCount; i++) {

Added: jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/TestLock.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/TestLock.java?rev=928437&view=auto
==============================================================================
--- jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/TestLock.java (added)
+++ jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/TestLock.java Sun Mar 28 15:43:18 2010
@@ -0,0 +1,45 @@
+/*
+ * 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.
+ */
+package org.apache.jackrabbit.j3;
+
+import javax.jcr.Node;
+import javax.jcr.Session;
+import javax.jcr.lock.LockException;
+import javax.jcr.lock.LockManager;
+
+/**
+ * Tests JCR locking.
+ */
+public class TestLock extends TestBase {
+
+    public void test() throws Exception {
+        Node n = session.getRootNode().addNode("testLock");
+        n.addMixin("mix:lockable");
+        session.save();
+        LockManager lockManager = session.getWorkspace().getLockManager();
+        lockManager.lock("/testLock", false, false, 0, "test");
+        Session session2 = openSession();
+        Node n2 = session2.getNode("/testLock");
+        try {
+            n2.addNode("test");
+            fail();
+        } catch (LockException e) {
+            // expected
+        }
+        session2.logout();
+    }
+}

Added: jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/TestNamespaceRegistry.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/TestNamespaceRegistry.java?rev=928437&view=auto
==============================================================================
--- jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/TestNamespaceRegistry.java (added)
+++ jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/TestNamespaceRegistry.java Sun Mar 28 15:43:18 2010
@@ -0,0 +1,36 @@
+/*
+ * 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.
+ */
+package org.apache.jackrabbit.j3;
+
+import javax.jcr.NamespaceRegistry;
+import javax.jcr.RepositoryException;
+
+/**
+ * Tests the namespace registry.
+ */
+public class TestNamespaceRegistry extends TestBase {
+
+    public void test() throws RepositoryException {
+        NamespaceRegistry registry = session.getWorkspace().getNamespaceRegistry();
+        assertEquals("", registry.getPrefix(""));
+        assertEquals(NamespaceRegistry.NAMESPACE_NT, registry.getURI("nt"));
+        assertEquals(NamespaceRegistry.PREFIX_MIX, registry.getPrefix(NamespaceRegistry.NAMESPACE_MIX));
+        registry.registerNamespace("test", "TEST");
+        assertEquals("TEST", registry.getURI("test"));
+    }
+
+}

Modified: jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/TestNextConfiguration.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/TestNextConfiguration.java?rev=928437&r1=928436&r2=928437&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/TestNextConfiguration.java (original)
+++ jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/TestNextConfiguration.java Sun Mar 28 15:43:18 2010
@@ -1,5 +1,24 @@
+/*
+ * 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.
+ */
 package org.apache.jackrabbit.j3;
 
+/**
+ * A test that switches to the next test configuration.
+ */
 public class TestNextConfiguration extends TestBase {
 
     public void testChange() {

Added: jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/TestNodeTypeRegistry.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/TestNodeTypeRegistry.java?rev=928437&view=auto
==============================================================================
--- jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/TestNodeTypeRegistry.java (added)
+++ jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/TestNodeTypeRegistry.java Sun Mar 28 15:43:18 2010
@@ -0,0 +1,36 @@
+/*
+ * 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.
+ */
+package org.apache.jackrabbit.j3;
+
+import javax.jcr.Node;
+import javax.jcr.RepositoryException;
+import javax.jcr.nodetype.NodeType;
+
+/**
+ * Tests the node type registry.
+ */
+public class TestNodeTypeRegistry extends TestBase {
+
+    public void test() throws RepositoryException {
+        Node n = session.getRootNode().addNode("testNodeType");
+        NodeType nt = n.getPrimaryNodeType();
+        assertEquals("nt:unstructured", nt.getName());
+//        NodeTypeManager ntm = session.getWorkspace().getNodeTypeManager();
+//        NodeTypeIterator it = ntm.getAllNodeTypes();
+//        while (it.hasNext()) {
+//            nt = it.nextNodeType();
+//            System.out.println(nt.getName());
+//        }
+    }
+}

Added: jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/TestObservation.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/TestObservation.java?rev=928437&view=auto
==============================================================================
--- jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/TestObservation.java (added)
+++ jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/TestObservation.java Sun Mar 28 15:43:18 2010
@@ -0,0 +1,72 @@
+/*
+ * 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.
+ */
+package org.apache.jackrabbit.j3;
+
+import java.util.ArrayList;
+import javax.jcr.Node;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+import javax.jcr.observation.Event;
+import javax.jcr.observation.EventIterator;
+import javax.jcr.observation.EventListener;
+
+/**
+ * Tests observation.
+ */
+public class TestObservation extends TestBase {
+
+    private ArrayList<String> eventList = new ArrayList<String>();
+
+    public void test() throws Exception {
+        session.getRootNode().addNode("t");
+        session.save();
+        session.getWorkspace().getObservationManager().addEventListener(new TestEventListener(),
+                Event.NODE_ADDED | Event.NODE_REMOVED |
+                Event.PROPERTY_ADDED | Event.PROPERTY_CHANGED |
+                Event.PROPERTY_REMOVED, "/", true, null, null, false);
+
+        Session session2 = openSession();
+        Node n2 = session2.getNode("/t");
+        session2.getWorkspace().getObservationManager().setUserData("x");
+        n2.addNode("test");
+        session2.save();
+        session2.logout();
+
+        assertEquals(2, eventList.size());
+        assertEquals("[/t/test/jcr:primaryType:4:x, /t/test:1:x]", eventList.toString());
+    }
+
+    /**
+     * An event listener.
+     */
+    class TestEventListener implements EventListener {
+
+        public void onEvent(EventIterator events) {
+            while (events.hasNext()) {
+                Event event = events.nextEvent();
+                String s;
+                try {
+                    s = event.getPath() + ":" + event.getType() + ":" + event.getUserData();
+                } catch (RepositoryException e) {
+                    s = e.toString();
+                }
+                eventList.add(s);
+            }
+        }
+
+    }
+}

Modified: jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/TestSimple.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/TestSimple.java?rev=928437&r1=928436&r2=928437&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/TestSimple.java (original)
+++ jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/TestSimple.java Sun Mar 28 15:43:18 2010
@@ -20,8 +20,13 @@ import javax.jcr.Node;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 
+/**
+ * A simple test case.
+ */
 public class TestSimple extends TestBase {
 
+    long start;
+
     public void test() throws Exception {
 
         Session session = openSession();
@@ -55,30 +60,66 @@ public class TestSimple extends TestBase
 
     private void createReadNodes() throws RepositoryException {
         Node root = session.getRootNode();
-        int max = 10, saveEvery = 1000, count = 0;
-        for(int i=0; i<max; i++) {
-            Node ni = root.addNode("test" + i);
-            for(int j=0; j<max; j++) {
-                Node nj = ni.addNode("test" + j);
-                for(int k=0; k<max; k++) {
-                    Node x = nj.addNode("test" + k);
-                    x.setProperty("value", i + "_" + j + "_" + k);
-                    if (count++ % saveEvery == 0) {
-                        session.save();
-                    }
-                }
-            }
+        // 488280 nodes:
+        // int size = 5, recurse = 7;
+        int size = 3, recurse = 4;
+        String url = session.getRepository().getDescriptor("url");
+        if (url == null) {
+            // jackrabbit core
+        } else if (url.startsWith("mem:")) {
+            // 111110 nodes:
+            // size = 10;
+            // recurse = 4;
+        } else if (url.indexOf(":mem:") > 0) {
+            size = 5;
+            recurse = 4;
+        }
+        int expectedNodes = (int) Math.pow(size, recurse + 2) / (size - 1) - 1;
+        Profiler prof = null;
+        if (expectedNodes > 100000) {
+            prof = new Profiler();
+            prof.startCollecting();
+            System.out.println("count: " + expectedNodes);
         }
+        start = System.currentTimeMillis();
+        int nodeCount = createNodes(root, size, recurse, 0, 10000);
+        assertEquals(expectedNodes, nodeCount);
         session.save();
-        for(int i=0; i<max; i++) {
-            for(int j=0; j<max; j++) {
-                for(int k=0; k<max; k++) {
-                    String s = "/test" + i + "/test" + j + "/test" + k;
-                    Node x = session.getNode(s);
-                    String v = x.getProperty("value").getString();
-                    assertEquals(i + "_" + j + "_" + k, v);
-                }
+        start = System.currentTimeMillis();
+        readNodes(root, size, recurse, 0, 10000);
+        if (prof != null) {
+            System.out.println(prof.getTop(3));
+        }
+    }
+
+    private int createNodes(Node root, int size, int recurse, int x, int saveEvery) throws RepositoryException {
+        for (int i = 0; i < size; i++) {
+            Node n = root.addNode("test" + i);
+            x++;
+            if (x % saveEvery == 0) {
+                n.getSession().save();
+                long time = System.currentTimeMillis() - start;
+                System.out.println("saved: " + x + " " + (int)(x * 1000. / time) + " nodes/s");
+            }
+            if (recurse > 0) {
+                x = createNodes(n, size, recurse - 1, x, saveEvery);
+            }
+        }
+        return x;
+    }
+
+    private int readNodes(Node root, int size, int recurse, int x, int showEvery) throws RepositoryException {
+        for (int i = 0; i < size; i++) {
+            Node n = root.getNode("test" + i);
+            x++;
+            if (x % showEvery == 0) {
+                long time = System.currentTimeMillis() - start;
+                System.out.println("read: " + x + " " + (int)(x * 1000. / time) + " nodes/s");
+            }
+            if (recurse > 0) {
+                x = readNodes(n, size, recurse - 1, x, showEvery);
             }
         }
+        return x;
     }
 }