Release Notes -- Apache Jackrabbit Oak -- Version 0.7 Introduction ------------ Jackrabbit Oak is an effort to implement a scalable and performant hierarchical content repository for use as the foundation of modern world-class web sites and other demanding content applications. The Oak effort is a part of the Apache Jackrabbit project. Apache Jackrabbit is a project of the Apache Software Foundation. Jackrabbit Oak 0.7 is to be considered alpha-level software. Use at your own risk with no stability or compatibility guarantees. Changes in Oak 0.7 ------------------ New features [OAK-18] Define Oak API [OAK-28] Query implementation [OAK-34] Define query API [OAK-35] Implement query builder [OAK-36] Implement a query parser interface (to make parsing extensible) [OAK-88] Auto-refresh mode [OAK-154] Full text search index [OAK-640] Add WorkspaceInitializer [OAK-673] Unified hook processing [OAK-697] Security: support for PBKDF2 password hashing Improvements [OAK-13] Cleanup org.apache.jackrabbit.mk [OAK-22] Respect remapped namespaces on Session level [OAK-37] Use nullability annotation to enforce/document API contract [OAK-77] Consolidate Utilities [OAK-108] Shortcut path conversions [OAK-137] Query: content index [OAK-152] More efficient CoreValues [OAK-160] Make oak interfaces permission aware [OAK-170] Child node state builder [OAK-175] MemoryNodeStateBuilder inefficient for large child node lists [OAK-205] Redefined Tree#getChild(String name) to #getTree(String ... [OAK-231] Support for large child node lists [OAK-247] SessionImpl should not inherit from AbstractSession [OAK-271] make identifiers for non-referenceable nodes more stable [OAK-323] Column names aren't reported properly for "select * from ... [OAK-336] Document query language extensions (SQL2 "measure", "explain") [OAK-359] QueryEngine joins lack nodeType information [OAK-370] Creating Root is too expensive [OAK-399] RootImpl(NodeStore store) does not use configured index providers [OAK-401] QueryIndex cost output [OAK-412] Review effective node type calculations [OAK-417] Refactor/reimplement TreeImpl.getStatus and TreeImpl.... [OAK-443] UserInitializer causes repository traversal [OAK-463] RootImpl.rebase() causes all transient changes to be kept in ... [OAK-470] Documentation for the PropertyIndex [OAK-476] QueryEngine ignores unknown node types [OAK-480] Authorizable Query [OAK-523] AuthorizableImpl: add equals/hashCode implementation [OAK-526] Implement AC-Postprocessing in PermissionHook [OAK-536] Implement rebase for branches in Microkernel [OAK-568] Duplicated code in TreeLocation implementations [OAK-569] NamedTemplate: Null-test for @Nonnull parameter [OAK-581] IndexDefinition for Access Control Content [OAK-582] Throw IllegalArgumentException on invalid paths instead of a ... [OAK-584] Clean up XXXNew classes [OAK-588] Run oak-jcr tests on mongomk [OAK-589] Make default workspace name configurable [OAK-591] Improve KernelNodeStore cache efficiency [OAK-594] Upgrade to Lucene 4.1 and Tika 1.3 [OAK-595] Naming consistency in QueryEngine#getRootTree [OAK-600] Query log tweaks [OAK-603] Use Microkernel.rebase in oak-core instead of reimplementing it [OAK-605] NullLocation.getParent() should return to parent instead of ... [OAK-609] Rename 'root' methods in NodeStore and NodeStoreBranch [OAK-610] Misleading exception message in MultiPropertyState [OAK-616] Remove KernelRootBuilder and KernelNodeBuilder and replace ... [OAK-617] Generalise Tree.Status.REMOVED to DISCONNECTED [OAK-620] Add CommitHook processing to MemoryNodeStoreBranch [OAK-624] Run Oak-Jcr tests using the SegmentMK [OAK-625] Ability to pass workspace name to a CommitHook [OAK-626] Allow for setting orderable child nodes on the parent tree [OAK-627] Move CommitHook(s) from KernelNodeStore to RootImpl [OAK-629] SegmentMK: Reverse writing of segments [OAK-635] SegmentMK NPE in SegmentNodeState#getChildNode [OAK-637] Optimize SelectorImpl.evaluateTypeMatch() [OAK-638] Avoid branch/merge for small commits [OAK-639] Optimize isNodeType checks [OAK-646] Commit Oak Solr modules to Oak trunk [OAK-647] Customize Maven Bundle Plugin config for Oak and disable ... [OAK-648] Remove circular dependency in AbstractNodeState [OAK-649] Reset modCount in RootImpl.refresh() [OAK-651] Make it easier to instantiate Solr IndexHook and QueryEngine ... [OAK-654] MapBranch size preconditions can fail [OAK-655] Make Solr commit policy configurable [OAK-661] Thin fallback for shared node sets [OAK-664] Track Tree instance across moves [OAK-670] Log error when ChangeProcessor fails with exception [OAK-671] Optimise TreeImpl.getBaseState() [OAK-676] Unify and upgrade SLF4j and Logback versions [OAK-682] Run Oak-Jcr tests using the new MongoMK prototype [OAK-684] Make it possible to store Solr config inside Oak idx definition [OAK-690] Enforce and clarify Root contract wrt. invalid Tree instances [OAK-694] Upgrade Oak Lucene to 4.2 [OAK-696] Support usage of JAAS based authentication with Repository in OSGi [OAK-698] Optimize handling of empty node states [OAK-699] Provide the oak-solr-core module with a basic Solr server [OAK-701] Optimize Session.getNamespacePrefixes() [OAK-705] Redefine PermissionProvider#canRead [OAK-706] Make workspace name available with the permission provider [OAK-707] Review interaction between AccessControlManager and ... [OAK-715] Don't share name space map between SessionImpl and LocalNameMapper [OAK-718] Copy default bundled configuration for default server if none ... [OAK-720] Extend OakNodeStateConfiguration to use not fixed NodeStates [OAK-723] ItemImpl - The type parameter T is hiding the type T [OAK-725] Fix sql2 test errors [OAK-726] Implement KernelNodeState.hasChildNode() [OAK-727] Use snapshot of namespaces in SessionImpl [OAK-729] Replace Tree.Status.DISCONNECTED with Tree.isConnected() [OAK-732] Change TreeLocation.getChild() to only accept direct child ... [OAK-733] Refactor AuthorizableImpl to retrieve underlying tree only ... [OAK-735] Move DefaultOakSolrProvider and OakSolrNodeStateConfiguration ... [OAK-737] Remove default security provider in Oak.java [OAK-743] Increase default RootImpl.PURGE_LIMIT [OAK-746] Builder for the MongoMK [OAK-747] Prevent WorkspaceInitializer(s) to index content [OAK-751] IndexHookManager should implement EditorProvider instead of ... [OAK-756] Allow reindexing to use Editors [OAK-757] Merge DefaultTypeEditor into the TypeEditor [OAK-758] Implement AC-editing by principal (Jackrabbit API) [OAK-768] Enhance Root API in order to provide information about the ... [OAK-769] Add utility method to JsopDiff for debugging node states [OAK-777] Get jcr:primaryType value as Type.NAME [OAK-779] Add rep:Authorizable to declaringNodeTypeNames of ... [OAK-785] PermissionValidator: add compatibility flag to ignore USER_MGT ... [OAK-787] Accessibility of NodeTypes, Namespaces and Privileges [OAK-789] Support relative path in Property2Index [OAK-797] Move permission store initialization to a WorkspaceInitializer [OAK-799] Fail-fast for content diffs [OAK-807] Keep original xpath query as a comment appended to the ... Bug fixes [OAK-157] Incorrect rebase/edit/merge logic [OAK-178] Query: index definition documentation and tooling [OAK-189] Swallowed exceptions [OAK-201] NamespaceRegistry is very slow [OAK-251] CommitEditor is global to ContentRepository instance [OAK-343] Session.getNodeByUUID requires save call [OAK-380] Define conversion of property values [OAK-396] Limit property index to nodes of given type [OAK-410] RepositoryInitializer runs before the CommitHooks are in place [OAK-420] Query: Lucene index problem with isdescendantnode [OAK-442] Concurrently adding nodes fails with CommitFailedException [OAK-464] RootImpl.rebase() doesn't handle move operations correctly [OAK-505] NodeImpl#canAddMixin uses hardcoded list of supported mixin types [OAK-509] Item names starting with '{X}' cause RepositoryException [OAK-548] Moving larger trees cause OutOfMemoryError [OAK-559] Outer join can produce wrong result [OAK-566] MongoMK throws exception when adding nodes concurrently [OAK-592] MicroKernelIT conflictingMove and confilictingAddDelete tests ... [OAK-596] Microkernel.diff returns empty diff when there are differences [OAK-598] TreeLocation#NULL allows to reveal the existence of items that ... [OAK-599] PropertyDelegate uses TreeImpl.PropertyLocation [OAK-606] Node becomes invalid after Session#move() [OAK-607] Old path after moving a new node [OAK-611] GetJournalCommand does not take path into account [OAK-612] Calling addNode on a node that has orderable child nodes ... [OAK-613] NPE in Property2IndexDiff#getIndexes(String) when processing ... [OAK-614] AssertionError in MemoryNodeBuilder [OAK-618] ChangeProcessor must ignore hidden properties [OAK-621] Moving or deleting tree instances with status NEW doesn't ... [OAK-623] Adding an inherited mixin should not trigger a change on the node [OAK-642] NPE trying to add a node to an nt:folder node [OAK-643] Very high memory usage with 6000 child nodes [OAK-644] Revisit PrivilegeDefinitionStore's use of null as a child ... [OAK-665] Excessive MK.nodeExists() calls with many child nodes [OAK-666] Property2Index: node type is used when indexing, but ignored ... [OAK-667] Node.orderBefore() doesn't check whether the node type supports ... [OAK-669] Exception while creating a new node using the HTTP API [OAK-677] Property events on root node fail with NPE [OAK-678] Access to disconnected MemoryNodeBuilder should throw ... [OAK-681] ReadOnlyVersionManager.getVersionHistory throws NPE if the ... [OAK-686] Save on node moved in other session throws wrong exception [OAK-687] SessionDelegate.perform() must serialize calls to refresh() [OAK-689] RepositoryException while creating a new node using the HTTP API [OAK-691] Error while moving a node if the destination is not connected [OAK-695] TypeEditor must not check hidden nodes [OAK-703] Drop SessionImport#checkPermission [OAK-712] jcr:primaryType created as String property [OAK-714] Potential unsynchronised concurrent access to name space map ... [OAK-716] NPE when starting Oak repository in Sling. [OAK-717] oak-sling bundle imports org.apache.jackrabbit.test but no ... [OAK-719] NodeTypeImpl.canRemoveItem() may return incorrect value [OAK-721] NamePathMapperImpl: weird error message "index > 1" [OAK-722] Type conversion broken [OAK-728] NodeImpl.getSharedSet() returns inner class instead of ... [OAK-738] Assertion error when adding node with expanded name [OAK-740] Malformed solr delete query [OAK-744] Invalid base node states in TreeImpl after commit/refresh/rebase [OAK-748] ContentMirrorStoreStrategy #insert fails to enforce uniqueness ... [OAK-749] Date PropertyState may cause ClassCastException [OAK-761] Property2IndexProvider not annotated as OSGi component [OAK-765] AbstractNodeState#getChildNode returns null despite @Nonnull ... [OAK-766] TreeImpl#*Location: unable retrieve child location if access ... [OAK-778] Recursive wrapping of ModifiedNodeState [OAK-780] Revision.fromString() only parses two counter digits [OAK-782] MemoryNodeBuilder.setNode() loses property values [OAK-794] CompiledPermissionImpl#getReadStatus wrong ordering [OAK-800] EffectiveType#getTypeNames may throw NPE In addition to the above-mentioned changes, this release contains all the changes included up to the Apache Jackrabbit Oak 0.6 release. For more detailed information about all the changes in this and other Oak releases, please see the Oak issue tracker at https://issues.apache.org/jira/browse/OAK Release Contents ---------------- This release consists of a single source archive packaged as a zip file. The archive can be unpacked with the jar tool from your JDK installation. See the README.md file for instructions on how to build this release. The source archive is accompanied by SHA1 and MD5 checksums and a PGP signature that you can use to verify the authenticity of your download. The public key used for the PGP signature can be found at https://svn.apache.org/repos/asf/jackrabbit/dist/KEYS. About Apache Jackrabbit Oak --------------------------- Oak is an effort implement a scalable and performant hierarchical content repository for use as the foundation of modern world-class web sites and other demanding content applications. The Oak effort is a part of the Apache Jackrabbit project. Apache Jackrabbit is a project of the Apache Software Foundation. For more information, visit http://jackrabbit.apache.org/oak About The Apache Software Foundation ------------------------------------ Established in 1999, The Apache Software Foundation provides organizational, legal, and financial support for more than 100 freely-available, collaboratively-developed Open Source projects. The pragmatic Apache License enables individual and commercial users to easily deploy Apache software; the Foundation's intellectual property framework limits the legal exposure of its 2,500+ contributors. For more information, visit http://www.apache.org/