eXo JCR release notes
eXo JCR release notes
JCR v.1.9.2 release notes
- Restore workspace initializer binary values decoding (BUGFUX).
- Restore workspace initializer memory consumption improved.
JCR v.1.9.1 release notes
JCR 1.9.1 changes added to 1.9 features- WebDAV EJB connector for ejb 2.1.
- WebDAV EJB connector for ejb 3.0.
JCR v.1.9 Release notes
New features and improvements
JCR version 1.9 includes a lot of new features and improvements such as:- Lucene 2.2 based Search engine with advanced indexing configuration, synonym and highlights support, improved fuzzy search (http://lucene.apache.org/java/docs/queryparsersyntax.html), pluggable spell checker mechanism (http://wiki.apache.org/jakarta-lucene/SpellChecker),
- Query result now supports two-way NodeIterator. More details about Indexer and Serach configuration described here: Searching Repository Content, Search Configuration
- Advanced replication service with new synchronization subsystem which allows implementing scalable cluster
- JCR Resource service providing flexible way for node representation as well as using jcr:// URL scheme
- Support for REST services on Groovy script.
- Indexer has new mechanism for I/O errors catching and index storage restoring after system failures.
- XML Import/Export improvements including dedicated logic for mix:versionable nodes and collisions logic refactoring.
- Used new security layer (eXo Core 2.1). New LoginModules implementations including J2EE servers (Tomcat, JBoss, JOnAS).
- JCR comes with new cache implementation, the cache has lightweight removal logic, supports blocked and unblocked read modes.
- Samples now use JCR Sessions provider mechanism
- Audit management supports versionable nodes records, new audit storage improved.
- JCR Sessions provider mechanism is refactored
Changes
Improvement JCR-235 JCR query code reorganization according to the Lucene 2.0 indexer Improvement JCR-339 Improve import of mix:versionable nodes. Task JCR-359 Add new parameter in DisplayJCRContentServlet to show that which repository is is chosen when use this servlet Improvement JCR-373 Ancestor to save after replacing existing node on import Task JCR-379 Test the replication service with persistent mode Task JCR-382 Replace Credentials with identity in SessionImpl Task JCR-383 Remove deprecated code which is not used Improvement JCR-385 Check IMPORT_UUID_COLLISION_REMOVE_EXISTING and IMPORT_UUID_COLLISION_REPLACE_EXISTING usecases during the import of xml document Improvement JCR-386 Check correct calculating of same name siblings during operation workspace.copy(), workspace.clone(), node.update() Improvement JCR-391 Anonymous logic Sub-task JCR-392 JCR-235 Describe SearchManager component life cycle Sub-task JCR-402 JCR-235 Improve documentation Task JCR-409 Workspace cache optimization Improvement JCR-412 Make post-persistent operations within a storage transaction Task JCR-416 Workspace importer independent on session Improvement JCR-417 Workspace restore from initial data snapshot Improvement JCR-418 JCR exporter independent on session New Feature JCR-419 Auditable and versionable node support Improvement JCR-422 Demo web applications redesign Task JCR-423 Audit introduction and documentation Improvement JCR-424 Checking size of AccessControlList Improvement JCR-425 Mechanism for accessing JCR resources by URL, for example jcr://root:exo@repository/collaboration#/root/test Sub-task JCR-426 JCR-412 Indexer on-error log and restore New Feature JCR-429 Search keyword suggestion with new Lucence New Feature JCR-430 (WS-36) Loader for groovy scripts for REST Task JCR-431 Configuration fields binding Peter Nedonosko Task JCR-432 Do we need in MultiIndex.checkFlush() read QueryHandlerEntry configuration each check Improvement JCR-438 JCR configuration timing formats Improvement JCR-439 Cluster synchronization Task JCR-440 Cluster setup and maintenance tests and guide Task JCR-441 NodeIndexer should not read non indexable values Improvement JCR-442 Create TwoWayScoreNodeIterator Improvement JCR-444 Remove traces in AddAuditableAction Task JCR-445 QueryHandlerEntry configuration parameters XML names Task JCR-446 ConfigurationPersister parameters XML names Task JCR-447 RepositoryConfiguration XML namesBug fixes
Bug JCR-352 Problem with davfs2 Bug JCR-355 database error with Workspace.clone() Bug JCR-380 error when importing portlets or starting the ecm Bug JCR-399 Changed property was not reflected in search index, so content of this property can't be finded Bug JCR-403 Access manager vulnerability Bug JCR-406 TCK query tests fails if QueryManager was called before in other JVM (by starting Exo tests) Bug JCR-413 ConstraintViolationException after use AddAuditableAction Bug JCR-414 AccessDeniedException on AuditAction Bug JCR-434 ConstraintViolationException: Can not define node-type for node :CategoryData Bug JCR-435 SystemSearchManager indexer locked on stop Bug JCR-437 Remove version history after removing non versioned parent node of versioned node. Bug JCR-443 ConcurrentModificationException on LockManagerImpl.removeExpiredJCR Samples
- Start Up (Tomcat)
$CATALINA_HOME\\\bin\\\eXo.bat run
$CATALINA_HOME/bin/eXo.sh run
UniqCIFS - CIFS server (beta3). Open beta3 available CIFS service for browse the JCR repository as UNC path resource (see details in CIFS nodes below).
EAR bundled samples
eXo JCR was tested under JBoss-4.2.2.GA and JOnAS-4.8.5 application servers Before use of eXo EAR you need to configure eXo JRC modifying exo-configuration.xml file, first of all you should configure ListenerService component which is configured for JBossAuthenticationListener by default (just replace it with JonasAuthenticationListener). Then put the configuration file to the root directory of an application server (same files as exo-configuration.xml can be found in any war file located in the EAR, e.g. fckeditor.war path /WEB-INF/classes/conf).JBoss-4.2.2.GA
- Configuration
- Copy
into <%jboss_home%/server/default/deploy> - Put exo-configuration.xml to the root <%jboss_home%/exo-configuration.xml
- Configure JAAS by inserting XML fragment shown below into <%jboss_home%/server/default/conf/login-config.xml>
<application-policy name="exo-domain"> <authentication> <login-module code="org.exoplatform.services.security.j2ee.JbossLoginModule" flag="required"></login-module> </authentication> </application-policy>
bin/run.bat
bin/run.sh
JOnAS-4.8.5
- Configuration
- Copy
into <%jonas_home%/apps/autoload> - Configure JAAS inserting XML fragment below into <%jonas_home%/conf/jaas.config>
tomcat {
// Use the eXo Platform JAAS login module
org.exoplatform.services.security.j2ee.JonasLoginModule required;
};
exo-domain {
// Use the eXo Platform JAAS login module
// The same as shown above, just another name
org.exoplatform.services.security.j2ee.JonasLoginModule required;
};- Edit <%jonas_home%/conf/context.xml>, enable crossContext
<Context crossContext="true">- Edit <%jonas_home%/conf/server.xml>, configure engine
<Engine name="jonas" defaultHost="localhost"> ..... <Realm className="org.objectweb.jonas.security.realm.web.catalina55.JAAS" userClassNames="org.exoplatform.services.security.jaas.UserPrincipal" roleClassNames="org.exoplatform.services.security.jaas.RolePrincipal" debug="99"/>
<Context className="org.objectweb.jonas.web.catalina55.JOnASStandardContext" path="/jonasAdmin"> <Realm className="org.objectweb.jonas.security.realm.web.catalina55.JACC" resourceName="memrlm_1"/> </Context>
bin/nt/jonas.bat start
bin/unix/jonas start
Migration from a previous releases (pre 1.7)
The Migration is possible via export/import to/from XML files.
For exporting some node (tree) to the XML file (system view) apply following to your eXo JCR 1.5.x repository (where destPath - it is a path to the creating file)File destFile = new File(destPath); session.exportSystemView(source.getPath(), new FileOutputStream(destFile), false, false); //Do not forget close stream outStream.close();
File srcFile = new File(pathToFile); //import data session.importXML (target.getPath(), new FileInputStream(destFile), ImportUUIDBehavior.IMPORT_UUID_COLLISION_THROW); // save in to persistent storage session.save();
Manual database migration
As a custom solution it's possible to update database manually with SQL-script. In JCR post-1.8 version auto-update option is disabled by default (update-storage='false' in workspace configuration). Storage changes which should be updated to 1.8 it's a relations between database and external values storage(s). 'id' attribute in value-storage configuration was added. This attribute used instead absolute file path in values storage. The 'id' is stores in database table JCR_VALUES (JCR_MVALUES, JCR_SVALUES) column STORAGE_DESC. Before 1.7 it contains absolute path of value storage file. From 1.7 this field contains storage id. So, for manual update you have to update your JCR_VALUES table column STORAGE_DESC with valid storage id, i.e. with value described in configuration. For example the workspace configuration has value-storage with id 'Storage #1'.<value-storage id="Storage #1" class="org.exoplatform.services.jcr.impl.storage.value.fs.TreeFileValueStorage"> <properties> <property name="path" value="/path/to/values/storage/workspace_name"/> </properties> .................
UPDATE jcr_svalue SET storage_desc='Storage #1' WHERE storage_desc LIKE '/path/to/values/storage/workspace_name/\%'
UPDATE jcr_mvalue SET storage_desc='Storage #1' WHERE storage_desc LIKE '/path/to/values/storage/workspace_name/\%'
UPDATE jcr_scontainer SET version='1.7'
UPDATE jcr_mcontainer SET version='1.7'