无法在 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 配置加载机制有两条路
- 当第一次部署 jackrabbit 时,它通过 class OracleDatabaseJournal 执行 table 创建语句,它知道 ${tablespace} 所以它解决了它。
- 当它第二次部署并且第一次部署失败时,它通过 DatabaseJournal class 执行,它是 OracleDatabaseJournal 的基础 class 它不知道 ${tablespace} 所以它没有解决它。
当我调试时,我遵循的是第二条路线,所以我专注于为什么它不尝试解析 sql 语句中的 ${tablespace}。如果第一次部署成功,它不应该走第二条路线。在我们的例子中,第一次部署失败是因为 table 名称的长度。如果我们更改 table 名称的长度,它会正常部署,因此它永远不会出现第二种情况
我一直在尝试使用 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 配置加载机制有两条路
- 当第一次部署 jackrabbit 时,它通过 class OracleDatabaseJournal 执行 table 创建语句,它知道 ${tablespace} 所以它解决了它。
- 当它第二次部署并且第一次部署失败时,它通过 DatabaseJournal class 执行,它是 OracleDatabaseJournal 的基础 class 它不知道 ${tablespace} 所以它没有解决它。
当我调试时,我遵循的是第二条路线,所以我专注于为什么它不尝试解析 sql 语句中的 ${tablespace}。如果第一次部署成功,它不应该走第二条路线。在我们的例子中,第一次部署失败是因为 table 名称的长度。如果我们更改 table 名称的长度,它会正常部署,因此它永远不会出现第二种情况