2016-09-14 31 views
5

Hiện đang trong giai đoạn đầu đánh giá bằng cách sử dụng Apache Jackrabbit với Oracle DB của chúng tôi. Khi thử nghiệm thiết lập ban đầu của cấu hình repository.xml, nhận được lỗi này:Vi phạm ràng buộc duy nhất trên gói nút gốc, Apache Jackrabbit với Oracle

15:18:32.281 [main] ERROR o.a.j.c.p.p.BundleDbPersistenceManager - FATAL error while writing the bundle: deadbeef-cafe-babe-cafe-babecafebabe 
java.sql.SQLException: ORA-00001: unique constraint (REPO_BUNDLE_IDX) violated 

    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:113) ~[ojdbc14-10.2.0.4.jar:Oracle JDBC Driver version - "10.2.0.5.0"] 
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331) ~[ojdbc14-10.2.0.4.jar:Oracle JDBC Driver version - "10.2.0.5.0"] 
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288) ~[ojdbc14-10.2.0.4.jar:Oracle JDBC Driver version - "10.2.0.5.0"] 
    at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:754) ~[ojdbc14-10.2.0.4.jar:Oracle JDBC Driver version - "10.2.0.5.0"] 
    at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:219) ~[ojdbc14-10.2.0.4.jar:Oracle JDBC Driver version - "10.2.0.5.0"] 
    at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:972) ~[ojdbc14-10.2.0.4.jar:Oracle JDBC Driver version - "10.2.0.5.0"] 
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1192) ~[ojdbc14-10.2.0.4.jar:Oracle JDBC Driver version - "10.2.0.5.0"] 
    at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3415) ~[ojdbc14-10.2.0.4.jar:Oracle JDBC Driver version - "10.2.0.5.0"] 
    at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:3521) ~[ojdbc14-10.2.0.4.jar:Oracle JDBC Driver version - "10.2.0.5.0"] 
    at org.apache.commons.dbcp.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:172) ~[commons-dbcp-1.3.jar:1.3] 
    at org.apache.commons.dbcp.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:172) ~[commons-dbcp-1.3.jar:1.3] 
    at org.apache.commons.dbcp.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:172) ~[commons-dbcp-1.3.jar:1.3] 
    at org.apache.jackrabbit.core.util.db.ConnectionHelper.execute(ConnectionHelper.java:515) ~[jackrabbit-data-2.12.4.jar:2.12.4] 
    at org.apache.jackrabbit.core.util.db.ConnectionHelper.reallyUpdate(ConnectionHelper.java:344) ~[jackrabbit-data-2.12.4.jar:2.12.4] 
    at org.apache.jackrabbit.core.util.db.ConnectionHelper$2.call(ConnectionHelper.java:331) ~[jackrabbit-data-2.12.4.jar:2.12.4] 
    at org.apache.jackrabbit.core.util.db.ConnectionHelper$2.call(ConnectionHelper.java:327) ~[jackrabbit-data-2.12.4.jar:2.12.4] 
    at org.apache.jackrabbit.core.util.db.ConnectionHelper$RetryManager.doTry(ConnectionHelper.java:536) ~[jackrabbit-data-2.12.4.jar:2.12.4] 
    at org.apache.jackrabbit.core.util.db.ConnectionHelper.update(ConnectionHelper.java:327) ~[jackrabbit-data-2.12.4.jar:2.12.4] 
    at org.apache.jackrabbit.core.persistence.pool.BundleDbPersistenceManager.storeBundle(BundleDbPersistenceManager.java:950) [jackrabbit-core-2.12.4.jar:2.12.4] 
    at org.apache.jackrabbit.core.persistence.bundle.AbstractBundlePersistenceManager.putBundle(AbstractBundlePersistenceManager.java:800) [jackrabbit-core-2.12.4.jar:2.12.4] 
    at org.apache.jackrabbit.core.persistence.bundle.AbstractBundlePersistenceManager.storeInternal(AbstractBundlePersistenceManager.java:715) [jackrabbit-core-2.12.4.jar:2.12.4] 
    at org.apache.jackrabbit.core.persistence.bundle.AbstractBundlePersistenceManager.store(AbstractBundlePersistenceManager.java:593) [jackrabbit-core-2.12.4.jar:2.12.4] 
    at org.apache.jackrabbit.core.persistence.pool.BundleDbPersistenceManager.store(BundleDbPersistenceManager.java:482) [jackrabbit-core-2.12.4.jar:2.12.4] 
    at org.apache.jackrabbit.core.state.SharedItemStateManager.createRootNodeState(SharedItemStateManager.java:1725) [jackrabbit-core-2.12.4.jar:2.12.4] 
    at org.apache.jackrabbit.core.state.SharedItemStateManager.<init>(SharedItemStateManager.java:217) [jackrabbit-core-2.12.4.jar:2.12.4] 
    at org.apache.jackrabbit.core.RepositoryImpl.createItemStateManager(RepositoryImpl.java:1396) [jackrabbit-core-2.12.4.jar:2.12.4] 
    at org.apache.jackrabbit.core.RepositoryImpl$WorkspaceInfo.doInitialize(RepositoryImpl.java:2062) [jackrabbit-core-2.12.4.jar:2.12.4] 
    at org.apache.jackrabbit.core.RepositoryImpl$WorkspaceInfo.initialize(RepositoryImpl.java:2035) [jackrabbit-core-2.12.4.jar:2.12.4] 
    at org.apache.jackrabbit.core.RepositoryImpl.initStartupWorkspaces(RepositoryImpl.java:543) [jackrabbit-core-2.12.4.jar:2.12.4] 
    at org.apache.jackrabbit.core.RepositoryImpl.<init>(RepositoryImpl.java:326) [jackrabbit-core-2.12.4.jar:2.12.4] 
    at org.apache.jackrabbit.core.RepositoryImpl.create(RepositoryImpl.java:615) [jackrabbit-core-2.12.4.jar:2.12.4] 
    at org.apache.jackrabbit.core.TransientRepository$3.getRepository(TransientRepository.java:250) [jackrabbit-core-2.12.4.jar:2.12.4] 
    at org.apache.jackrabbit.core.TransientRepository.startRepository(TransientRepository.java:280) [jackrabbit-core-2.12.4.jar:2.12.4] 
    at org.apache.jackrabbit.core.TransientRepository.login(TransientRepository.java:376) [jackrabbit-core-2.12.4.jar:2.12.4] 

Debugging, tôi có thể thấy rằng nó ban đầu sẽ kiểm tra nếu bó này - System Root Node - tồn tại, và nó thấy nó đã có trong cơ sở dữ liệu, nhưng sau đó khi cố gắng để chèn các Root Node, mà không phải là trong DB, nó sau đó cố gắng để chèn các System Root Node một lần nữa là tốt, đó là nơi nó chạm vi phạm ràng buộc.

Đây là mã tôi đang sử dụng để tạo ra các ví dụ Repository:

Map<String, String> props = new HashMap<>(); 

props.put(RepositoryFactoryImpl.REPOSITORY_HOME, "jackrabbit"); 
props.put(RepositoryFactoryImpl.REPOSITORY_CONF, "classpath:jackrabbit/repository.xml"); 

Repository repository = JcrUtils.getRepository(props); 

repository.login(new SimpleCredentials("admin", "admin".toCharArray())); 

Và repository.xml tôi:

<FileSystem class="org.apache.jackrabbit.core.fs.db.OracleFileSystem"> 
    <param name="url" value="jdbc:oracle:thin:@mydb:1521:XE"/> 
    <param name="user" value="myuser"/> 
    <param name="password" value="mypassword"/> 
    <param name="schemaObjectPrefix" value="REPO_"/> 
    <param name="schemaCheckEnabled" value="false"/> 
</FileSystem> 

<DataStore class="org.apache.jackrabbit.core.data.db.DbDataStore"> 
    <param name="url" value="jdbc:oracle:thin:@mydb:1521:XE"/> 
    <param name="user" value="myuser"/> 
    <param name="password" value="mypassword"/> 
    <param name="databaseType" value="oracle"/> 
    <param name="driver" value="oracle.jdbc.driver.OracleDriver"/> 
    <param name="schemaObjectPrefix" value="REPO_"/> 
    <param name="schemaCheckEnabled" value="false"/> 
</DataStore> 

<Security appName="Jackrabbit"> 
    <SecurityManager class="org.apache.jackrabbit.core.security.simple.SimpleSecurityManager" 
        workspaceName="security"/> 
    <AccessManager class="org.apache.jackrabbit.core.security.simple.SimpleAccessManager"/> 
    <LoginModule class="org.apache.jackrabbit.core.security.simple.SimpleLoginModule"/> 
</Security> 

<Workspaces rootPath="${rep.home}/workspaces" defaultWorkspace="ContentRepo"/> 
<Workspace name="ContentRepo"> 
    <FileSystem class="org.apache.jackrabbit.core.fs.db.OracleFileSystem"> 
     <param name="url" value="jdbc:oracle:thin:@mydb:1521:XE"/> 
     <param name="user" value="myuser"/> 
     <param name="password" value="mypassword"/> 
     <param name="schemaObjectPrefix" value="REPO_"/> 
     <param name="schemaCheckEnabled" value="false"/> 
    </FileSystem> 

    <PersistenceManager class="org.apache.jackrabbit.core.persistence.bundle.OraclePersistenceManager"> 
     <param name="url" value="jdbc:oracle:thin:@mydb:1521:XE"/> 
     <param name="user" value="myuser"/> 
     <param name="password" value="mypassword"/> 
     <param name="schemaObjectPrefix" value="REPO_"/> 
     <param name="schemaCheckEnabled" value="false"/> 
    </PersistenceManager> 

    <SearchIndex class="org.apache.jackrabbit.core.query.lucene.SearchIndex"> 
     <param name="path" value="${rep.home}/index"/> 
     <param name="textFilterClasses" value="org.apache.jackrabbit.extractor.PlainTextExtractor,org.apache.jackrabbit.extractor.MsWordTextExtractor,org.apache.jackrabbit.extractor.MsExcelTextExtractor,org.apache.jackrabbit.extractor.MsPowerPointTextExtractor,org.apache.jackrabbit.extractor.PdfTextExtractor,org.apache.jackrabbit.extractor.OpenOfficeTextExtractor,org.apache.jackrabbit.extractor.RTFTextExtractor,org.apache.jackrabbit.extractor.HTMLTextExtractor,org.apache.jackrabbit.extractor.XMLTextExtractor"/> 
     <param name="extractorPoolSize" value="2"/> 
     <param name="supportHighlighting" value="true"/> 
    </SearchIndex> 
</Workspace> 

<Versioning rootPath="${rep.home}/version"> 
    <FileSystem class="org.apache.jackrabbit.core.fs.db.OracleFileSystem"> 
     <param name="url" value="jdbc:oracle:thin:@mydb:1521:XE"/> 
     <param name="user" value="myuser"/> 
     <param name="password" value="mypassword"/> 
     <param name="schemaObjectPrefix" value="REPO_"/> 
     <param name="schemaCheckEnabled" value="false"/> 
    </FileSystem> 

    <PersistenceManager class="org.apache.jackrabbit.core.persistence.pool.OraclePersistenceManager"> 
     <param name="url" value="jdbc:oracle:thin:@mydb:1521:XE"/> 
     <param name="user" value="myuser"/> 
     <param name="password" value="mypassword"/> 
     <param name="schemaObjectPrefix" value="REPO_"/> 
     <param name="schemaCheckEnabled" value="false"/> 
    </PersistenceManager> 
</Versioning> 

<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.PdfTextExtractor,org.apache.jackrabbit.extractor.OpenOfficeTextExtractor,org.apache.jackrabbit.extractor.RTFTextExtractor,org.apache.jackrabbit.extractor.HTMLTextExtractor,org.apache.jackrabbit.extractor.XMLTextExtractor"/> 
    <param name="extractorPoolSize" value="2"/> 
    <param name="supportHighlighting" value="true"/> 
</SearchIndex> 

<Cluster> 
    <Journal class="org.apache.jackrabbit.core.journal.OracleDatabaseJournal"> 
     <param name="url" value="jdbc:oracle:thin:@mydb:1521:XE"/> 
     <param name="user" value="myuser"/> 
     <param name="password" value="mypassword"/> 
     <param name="schemaObjectPrefix" value="REPO_"/> 
     <param name="schemaCheckEnabled" value="false"/> 
    </Journal> 
</Cluster> 

phiên bản: Oracle 11.2.0 Java 8 Apache Jackrabbit 2.12.4

Bất kỳ giúp đỡ được đánh giá cao.

Trả lời

2

Tìm thấy một công việc xung quanh, nhưng tôi chắc chắn rằng vẫn còn một cái gì đó sai với cấu hình của tôi chứ không phải là một lỗi trong hỗ trợ Jackrabbit Oracle.

Dù sao, thời hạn là những gì họ đang có, tôi đã có thể để có được tất cả mọi thứ làm việc bằng cách ghi đè OraclePersistenceManager.storeBundle:

public class MyPersistenceManager extends OraclePersistenceManager { 

    protected synchronized void storeBundle(NodePropBundle bundle) throws ItemStateException { 
     if (exists(bundle.getId())) { 
      bundle.markOld(); 
     } 
     super.storeBundle(bundle); 
    } 

} 

Hy vọng rằng điều này không chỉ che giấu một vấn đề mà nuôi lên xuống đường. Nếu có, tôi sẽ cập nhật.

Các vấn đề liên quan