无法在 Oracle 中为 jackrabbit 创建 JOURNAL_VERSIONS table。 {tablespace} 变量未解析

Unable to create JOURNAL_VERSIONS table for jackrabbit in Oracle. {tablespace} variable is not resolved

我一直在尝试使用 Oracle 配置 Jackrabbit。对集群中的版本 table 执行模式检查时出现异常。

在初始化集群配置时,它会调用 DataBaseJournal class 中的 init() 方法。在那里它调用 checkLocalRevisionSchema();该方法依次调用 CheckSchemaOperation.run() 来检查 LOCAL_REVISIONS table 是否存在,如果不存在则创建它。第一次它没有 table 所以它尝试创建 table 与:

create table ${schemaObjectPrefix}JOURNAL (
  REVISION_ID number(20,0) NOT NULL,
  JOURNAL_ID varchar(255),
  PRODUCER_ID varchar(255),
  REVISION_DATA blob
)
${tablespace} 

在执行查询之前,变量 ${schemOBjectPrefix} 被替换为 PBVP_Journal${tablespace} 没有被替换。我不确定我做错了什么。

我的文件系统和持久性管理器配置如下:

<Versioning rootPath="${rep.home}/version">
<FileSystem class="org.apache.jackrabbit.core.fs.db.OracleFileSystem">
 <param name="driver" value="javax.naming.InitialContext"/>
 <param name="url" value="java:/jcr/repositoryDB"/>
 <param name="schemaObjectPrefix" value="PBVP_version_"/>
 <param name="schema" value="oracle"/>
</FileSystem>
<PersistenceManager  class="org.apache.jackrabbit.core.persistence.pool.OraclePersistenceManager">
<param name="driver" value="javax.naming.InitialContext"/>
<param name="url"  value="java:/jcr/repositoryDB"/>
<param name="databaseType" value="oracle"/>
<param name="schemaObjectPrefix" value="PBVP_version_"/>
<param name="bundleCacheSize" value="32"/>
<param name="tableSpace" value="default"/>
</PersistenceManager>
</Versioning>

我的集群配置看起来像

 <Cluster id="node1" syncDelay="2000">
                          <Journal   class="org.apache.jackrabbit.core.journal.OracleDatabaseJournal">
 <param name="revision"  value="${rep.home}/revision.log"/>
 <param name="driver" value="javax.naming.InitialContext"/>
  <param name="url" value="java:/jcr/repositoryDB"/>
   <param name="schemaObjectPrefix" value="PBVP_journal_"/>
  <param name="databaseType" value="oracle"/>
  <param name="schemaCheckEnabled" value="false"/>
    <param name="tablespace" value="default"/>
                          </Journal>
           </Cluster>

终于知道是怎么回事了on.The Jackrabbit 配置加载机制有两条路

  1. 当第一次部署 jackrabbit 时,它通过 class OracleDatabaseJournal 执行 table 创建语句,它知道 ${tablespace} 所以它解决了它。
  2. 当它第二次部署并且第一次部署失败时,它通过 DatabaseJournal class 执行,它是 OracleDatabaseJournal 的基础 class 它不知道 ${tablespace} 所以它没有解决它。

当我调试时,我遵循的是第二条路线,所以我专注于为什么它不尝试解析 sql 语句中的 ${tablespace}。如果第一次部署成功,它不应该走第二条路线。在我们的例子中,第一次部署失败是因为 table 名称的长度。如果我们更改 table 名称的长度,它会正常部署,因此它永远不会出现第二种情况