[ 
https://issues.apache.org/jira/browse/JCR-2751?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13493332#comment-13493332
 ] 

Dmitry Makivsky commented on JCR-2751:
--------------------------------------

Hello Srinivas,

It seems that my comment is no more actual for you, but in any case it can be 
useful for some one other.

I have run into the same issue during data migration from a local Derby-based 
Jackrabbit repository to a remote Oracle-based one, and I was lucky to find a 
workaround.

I noticed that the repository copier tool works well, when I:
- copy data from a local Derby-based repository to a local Derby-based 
repository;
- copy data from a remote Oracle-based repository to a local Derby-based 
repository;
but when I try to copy data from a local Derby-based repository to a remote 
Oracle-based repository, I get an empty repository.
Also I noticed that tables in my oracle database are filled with data, during 
data migration.
Bug that you reported, gave me an idea that the problem is somewhere in 
configuration between Jackrabbit and a remote database.


I tried to debug code of RepositoryCopier and what I found:
1. If you follow by the documentation during the data migration, you should 
prepare a home folder and file "repository.xml" for a new repository. 
Jackrabbit installation tool will use this configuration file (repository.xml) 
to deploy the new repository. So the section of the default workspace 
configuration from file repository.xml will be copied to a configuration file 
of each workspace (by default there are two workspaces with names: default, 
security). As a result your workspaces will have absolutely equal configuration 
and all PersisnteceManagers of the all workspaces will be pointed to the same 
table in the database.
It is the first minor issue.

2. Each workspace of Jackrabbit has the root node with nodeId 
"cafebabe-cafe-babe-cafe-babecafebabe". It is okay, if you are using local 
Derby-based repository, because each workspace has own database, but in case of 
remote database solution potentially you can run into issue with names 
conflict. However, it still be okay in case of remote database. I don't know 
why, maybe, all is okay, because data-safe methods are used (see more detailed 
explanation below).
This is the second minor issue.

3. When the migration tool copies data from a source repository to a target 
one, it executes deep copying of nodes with rewriting of data, if conflicts of 
node IDs occur. Actually if the target repository already exists, the data will 
not be removed, but nodes with the same IDs will be rewritten with data from 
the source repository, including collections of child nodes IDs. And, as I saw 
from the sourcecode, seems that method of setting of collection of child nodes 
IDs is called by migration tool only. Maybe, because method for set of 
collection of child nodes IDs never is never called from other Jacrabbit code 
(methods "add" and "remove" are used instead) Oracle-based repository works 
fine.
This is the third minor issue.

What we will get, if we mix these three insignificant issues:
1) the installation tool deploys a repository and creates equal configuration 
for workspaces: default and security
2) RepositoryCopier creates root node and copies the tree of nodes from 
workspace "default" of the source repository.
3) RepositoryCopier copies the tree of nodes from workspace "security" and 
rewrites root node, including rewriting of collection of child nodes IDs, 
because root node is stored at the same table and has the same nodeID.

Actually, seems that behavior of Jackrabbit in each of situation, described 
above, is correct and fair, but we have a problem, when they all mix together.

The workaround is quite simple:
1) copy the configuration structure of your repository. (repository.xml, 
workspaces with their configuration files, but without data)
2) reconfigure repository.xml to point to a database
3) reconfigure file workspace.xml of each workspace separately.
4) check that parameter schemaObjectPrefix is unique for each 
PersistenceManager (versioning configuration file repository.xml, configuration 
of each workspace file workspace.xml inside the home folder of each workspace 
in folder "workspaces").

P.S. Sorry for bad English.
                
> jackrabbit-standalone-server migration option does not work
> -----------------------------------------------------------
>
>                 Key: JCR-2751
>                 URL: https://issues.apache.org/jira/browse/JCR-2751
>             Project: Jackrabbit Content Repository
>          Issue Type: Bug
>          Components: jackrabbit-standalone
>    Affects Versions: 2.1.1
>         Environment: Windows running cygwin
>            Reporter: Srinivas Vishnubhotla
>
> I have an original flatfile based repository in a directory called "repo_ff" 
> and its repository.xml definitions are in PropertiesRepoFF.xml. I want to 
> migrate this repository (repo_ff) to another derby DB based repository called 
> "repo". The repository.xml definitions for the new (DerbyDB) based repository 
> are stored in PropertiesRepo.xml.
> When I run the command for migration:
> $ java -jar ./jackrabbit-standalone-2.1.1.jar --backup --repo repo_ff --conf 
> PropertiesRepoFF.xml --backup-repo repo --backup-conf PropertiesRepo.xml
> Welcome to Apache Jackrabbit!
> -------------------------------
> Using repository directory repo_ff
> Writing log messages to repo_ff\log
> Creating a repository copy in repo
> The repository has been successfully copied.
> As can be seen, it says repository has been successfully copied, but when I 
> connect to the new derbyDB based repository (repo), there is nothing in 
> there. (No nodes ... nothing, not even the /default root node).
> =====================================================================
> Contents of PropertiesRepo.xml:
> ==========================
> <?xml version="1.0"?>
>       <!--
>               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.
>       -->
> <!DOCTYPE Repository PUBLIC "-//The Apache Software Foundation//DTD 
> Jackrabbit 1.5//EN"
>                             
> "http://jackrabbit.apache.org/dtd/repository-1.5.dtd";>
>       <!--
>               Example Repository Configuration File Used by -
>               org.apache.jackrabbit.core.config.RepositoryConfigTest.java -
>       -->
> <Repository>
>       <!--
>               virtual file system where the repository stores global state 
> (e.g.
>               registered namespaces, custom node types, etc.)
>       -->
>       <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
>               <param name="path" value="${rep.home}/repository" />
>       </FileSystem>
>       <!--
>         security configuration
>     -->
>       <Security appName="Jackrabbit">
>               <!--
>                       security manager: class: FQN of class implementing the
>                       JackrabbitSecurityManager interface
>               -->
>               <SecurityManager
>                       
> class="org.apache.jackrabbit.core.security.simple.SimpleSecurityManager"
>                       workspaceName="security">
>               </SecurityManager>
>               <!--
>                       access manager: class: FQN of class implementing the 
> AccessManager
>                       interface
>               -->
>               <AccessManager
>                       
> class="org.apache.jackrabbit.core.security.simple.SimpleAccessManager">
>                       <!-- <param name="config" 
> value="${rep.home}/access.xml"/> -->
>               </AccessManager>
>               <LoginModule
>                       
> class="org.apache.jackrabbit.core.security.simple.SimpleLoginModule">
>                       <!--
>                               anonymous user name ('anonymous' is the default 
> value)
>                       -->
>                       <param name="anonymousId" value="anonymous" />
>                       <!--
>                               administrator user id (default value if param 
> is missing is 'admin')
>                       -->
>                       <param name="adminId" value="admin" />
>               </LoginModule>
>       </Security>
>       <!--
>               location of workspaces root directory and name of default 
> workspace
>       -->
>       <Workspaces rootPath="${rep.home}/workspaces"
>               defaultWorkspace="default" />
>       <!--
>               workspace configuration template: used to create the initial 
> workspace
>               if there's no workspace yet
>       -->
>       <Workspace name="${wsp.name}">
>               <!--
>                       virtual file system of the workspace: class: FQN of 
> class
>                       implementing the FileSystem interface
>               -->
>               <FileSystem 
> class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
>                       <param name="path" value="${wsp.home}" />
>               </FileSystem>
>               <!--
>                       persistence manager of the workspace: class: FQN of 
> class
>                       implementing the PersistenceManager interface
>               -->
>               <!-- PersistenceManager
>                       
> class="org.apache.jackrabbit.core.persistence.bundle.BundleFsPersistenceManager"
>  / -->
>                       
>                       <PersistenceManager
>                       
> class="org.apache.jackrabbit.core.persistence.bundle.DerbyPersistenceManager">
>                     <param name="url" 
> value="jdbc:derby:${rep.home}/repository/db;create=true" />
>                 </PersistenceManager>
>               
>               <!--
>                       Search index and the file system it uses. class: FQN of 
> class
>                       implementing the QueryHandler interface
>               -->
>               <SearchIndex 
> class="org.apache.jackrabbit.core.query.lucene.SearchIndex">
>                       <param name="path" value="${wsp.home}/index" />
>                       <param name="textFilterClasses"
>                               
> value="org.apache.jackrabbit.extractor.PlainTextExtractor,org.apache.jackrabbit.extractor.HTMLTextExtractor,org.apache.jackrabbit.extractor.XMLTextExtractor"
>  />
>                       <param name="extractorPoolSize" value="2" />
>                       <param name="supportHighlighting" value="true" />
>               </SearchIndex>
>       </Workspace>
>       <!--
>         Configures the versioning
>     -->
>       <Versioning rootPath="${rep.home}/version">
>               <!--
>                       Configures the filesystem to use for versioning for the 
> respective
>                       persistence manager
>               -->
>               <FileSystem 
> class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
>                       <param name="path" value="${rep.home}/version" />
>               </FileSystem>
>               <!--
>                       Configures the persistence manager to be used for 
> persisting version
>                       state. Please note that the current versioning 
> implementation is
>                       based on a 'normal' persistence manager, but this could 
> change in
>                       future implementations.
>               -->
>               <PersistenceManager
>                       
> class="org.apache.jackrabbit.core.persistence.bundle.DerbyPersistenceManager">
>                       <param name="url" 
> value="jdbc:derby:${rep.home}/version/db;create=true" />
>                       <param name="schemaObjectPrefix" value="version_" />
>               </PersistenceManager>
>       </Versioning>
>       <!--
>               Search index for content that is shared repository wide 
> (/jcr:system
>               tree, contains mainly versions)
>       -->
>       <SearchIndex 
> class="org.apache.jackrabbit.core.query.lucene.SearchIndex">
>               <param name="path" value="${rep.home}/repository/index" />
>               <param name="textFilterClasses"
>                       
> value="org.apache.jackrabbit.extractor.PlainTextExtractor,org.apache.jackrabbit.extractor.HTMLTextExtractor,org.apache.jackrabbit.extractor.XMLTextExtractor"
>  />
>               <param name="extractorPoolSize" value="2" />
>               <param name="supportHighlighting" value="true" />
>       </SearchIndex>
> </Repository>
> Contents of PropertiesRepoFF.xml:
> ===========================
> <?xml version="1.0"?>
>       <!--
>               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.
>       -->
> <!DOCTYPE Repository PUBLIC "-//The Apache Software Foundation//DTD 
> Jackrabbit 1.5//EN"
>                             
> "http://jackrabbit.apache.org/dtd/repository-1.5.dtd";>
>       <!--
>               Example Repository Configuration File Used by -
>               org.apache.jackrabbit.core.config.RepositoryConfigTest.java -
>       -->
> <Repository>
>       <!--
>               virtual file system where the repository stores global state 
> (e.g.
>               registered namespaces, custom node types, etc.)
>       -->
>       <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
>               <param name="path" value="${rep.home}/repository" />
>       </FileSystem>
>       <!--
>         security configuration
>     -->
>       <Security appName="Jackrabbit">
>               <!--
>                       security manager: class: FQN of class implementing the
>                       JackrabbitSecurityManager interface
>               -->
>               <SecurityManager
>                       
> class="org.apache.jackrabbit.core.security.simple.SimpleSecurityManager"
>                       workspaceName="security">
>               </SecurityManager>
>               <!--
>                       access manager: class: FQN of class implementing the 
> AccessManager
>                       interface
>               -->
>               <AccessManager
>                       
> class="org.apache.jackrabbit.core.security.simple.SimpleAccessManager">
>                       <!-- <param name="config" 
> value="${rep.home}/access.xml"/> -->
>               </AccessManager>
>               <LoginModule
>                       
> class="org.apache.jackrabbit.core.security.simple.SimpleLoginModule">
>                       <!--
>                               anonymous user name ('anonymous' is the default 
> value)
>                       -->
>                       <param name="anonymousId" value="anonymous" />
>                       <!--
>                               administrator user id (default value if param 
> is missing is 'admin')
>                       -->
>                       <param name="adminId" value="admin" />
>               </LoginModule>
>       </Security>
>       <!--
>               location of workspaces root directory and name of default 
> workspace
>       -->
>       <Workspaces rootPath="${rep.home}/workspaces"
>               defaultWorkspace="default" />
>       <!--
>               workspace configuration template: used to create the initial 
> workspace
>               if there's no workspace yet
>       -->
>       <Workspace name="${wsp.name}">
>               <!--
>                       virtual file system of the workspace: class: FQN of 
> class
>                       implementing the FileSystem interface
>               -->
>               <FileSystem 
> class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
>                       <param name="path" value="${wsp.home}" />
>               </FileSystem>
>               <!--
>                       persistence manager of the workspace: class: FQN of 
> class
>                       implementing the PersistenceManager interface
>               -->
>               <PersistenceManager
>                       
> class="org.apache.jackrabbit.core.persistence.bundle.BundleFsPersistenceManager"
>  />
>                       
>                       <!-- PersistenceManager
>                       
> class="org.apache.jackrabbit.core.persistence.bundle.DerbyPersistenceManager">
>                     <param name="url" 
> value="jdbc:derby:${rep.home}/repository/db;create=true" />
>                     <param name="user" value="user"/>
>                                       <param name="password" 
> value="toCharArray"/>
>                 </PersistenceManager -->
>               
>               <!--
>                       Search index and the file system it uses. class: FQN of 
> class
>                       implementing the QueryHandler interface
>               -->
>               <SearchIndex 
> class="org.apache.jackrabbit.core.query.lucene.SearchIndex">
>                       <param name="path" value="${wsp.home}/index" />
>                       <param name="textFilterClasses"
>                               
> value="org.apache.jackrabbit.extractor.PlainTextExtractor,org.apache.jackrabbit.extractor.HTMLTextExtractor,org.apache.jackrabbit.extractor.XMLTextExtractor"
>  />
>                       <param name="extractorPoolSize" value="2" />
>                       <param name="supportHighlighting" value="true" />
>               </SearchIndex>
>       </Workspace>
>       <!--
>         Configures the versioning
>     -->
>       <Versioning rootPath="${rep.home}/version">
>               <!--
>                       Configures the filesystem to use for versioning for the 
> respective
>                       persistence manager
>               -->
>               <FileSystem 
> class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
>                       <param name="path" value="${rep.home}/version" />
>               </FileSystem>
>               <!--
>                       Configures the persistence manager to be used for 
> persisting version
>                       state. Please note that the current versioning 
> implementation is
>                       based on a 'normal' persistence manager, but this could 
> change in
>                       future implementations.
>               -->
>               <PersistenceManager
>                       
> class="org.apache.jackrabbit.core.persistence.bundle.DerbyPersistenceManager">
>                       <param name="url" 
> value="jdbc:derby:${rep.home}/version/db;create=true" />
>                       <param name="schemaObjectPrefix" value="version_" />
>               </PersistenceManager>
>       </Versioning>
>       <!--
>               Search index for content that is shared repository wide 
> (/jcr:system
>               tree, contains mainly versions)
>       -->
>       <SearchIndex 
> class="org.apache.jackrabbit.core.query.lucene.SearchIndex">
>               <param name="path" value="${rep.home}/repository/index" />
>               <param name="textFilterClasses"
>                       
> value="org.apache.jackrabbit.extractor.PlainTextExtractor,org.apache.jackrabbit.extractor.HTMLTextExtractor,org.apache.jackrabbit.extractor.XMLTextExtractor"
>  />
>               <param name="extractorPoolSize" value="2" />
>               <param name="supportHighlighting" value="true" />
>       </SearchIndex>
> </Repository>

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to