Magnolia Cms Oracle 持久性

Posted

技术标签:

【中文标题】Magnolia Cms Oracle 持久性【英文标题】:Magnolia Cms Oracle Persistence 【发布时间】:2018-08-23 08:47:50 【问题描述】:

我安装了 magnolia cms 5.7 版并希望对 oracle 数据库进行持久化。在启动 magnolia 实例之前,我更新了相关配置文件并包含了 oracle db 驱动程序。当使用“mgnl start”命令启动实例时,会在数据库中创建表。

但是当我在 cms 中创建新内容(例如用户、联系人)时,数据不会存储到数据库中,而是通过 derby.jar 继续存在。

任何帮助将不胜感激。

提前致谢

您将在下面找到同样在 magnolia.properties 文件中设置的 oracle xml 包

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Repository PUBLIC "-//The Apache Software Foundation//DTD Jackrabbit 2.0//EN" "http://jackrabbit.apache.org/dtd/repository-2.0.dtd">
<Repository>
  <DataSources>
    <DataSource name="magnolia">
      <param name="driver" value="oracle.jdbc.OracleDriver" />
      <param name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:xe" /><!-- jdbc:oracle:thin:@localhost:1521:xe -->
      <param name="user" value="magnolia" />
      <param name="password" value="magnolia" />
      <param name="databaseType" value="oracle"/>
      <param name="validationQuery" value="select 1 from dual"/>
    </DataSource>
  </DataSources>
  <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
     <param name="path" value="$rep.home/repository" />
  </FileSystem>
  <Security appName="magnolia">
    <SecurityManager class="org.apache.jackrabbit.core.DefaultSecurityManager"/>
    <AccessManager class="org.apache.jackrabbit.core.security.DefaultAccessManager">
    </AccessManager>
    <!-- login module defined here is used by the repo to authenticate every request. not by the webapp to authenticate user against the webapp context (this one has to be passed before thing here gets invoked -->
    <LoginModule class="info.magnolia.jaas.sp.jcr.JackrabbitAuthenticationModule">
    </LoginModule>
  </Security>
  <DataStore class="org.apache.jackrabbit.core.data.FileDataStore">
    <param name="path" value="$rep.home/repository/datastore"/>
    <param name="minRecordLength" value="32000"/>
  </DataStore>
  <Workspaces rootPath="$rep.home/workspaces" defaultWorkspace="default" />
  <Workspace name="default">
    <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
      <param name="path" value="$wsp.home/default" />
    </FileSystem>
    <PersistenceManager class="org.apache.jackrabbit.core.persistence.pool.OraclePersistenceManager">
      <param name="driver" value="oracle.jdbc.OracleDriver"/>
      <param name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:xe"/>
      <param name="schema" value="oracle" /> 
      <param name="databaseType" value="oracle" />
      <param name="user" value="magnolia"/>
      <param name="password" value="magnolia"/>
      <param name="schemaObjectPrefix" value="$wsp.name_"/><!-- read notes below to set this value properly -->
      <param name="externalBLOBs" value="false"/>
    </PersistenceManager>
    <SearchIndex class="info.magnolia.jackrabbit.lucene.SearchIndex">
      <param name="path" value="$wsp.home/index" />
      <!-- SearchIndex will get the indexing configuration from the classpath, if not found in the workspace home -->
      <param name="indexingConfiguration" value="/info/magnolia/jackrabbit/indexing_configuration_$wsp.name.xml"/>
      <param name="useCompoundFile" value="true" />
      <param name="minMergeDocs" value="100" />
      <param name="volatileIdleTime" value="3" />
      <param name="maxMergeDocs" value="100000" />
      <param name="mergeFactor" value="10" />
      <param name="maxFieldLength" value="10000" />
      <param name="bufferSize" value="10" />
      <param name="cacheSize" value="1000" />
      <param name="forceConsistencyCheck" value="false" />
      <param name="autoRepair" value="true" />
      <param name="queryClass" value="org.apache.jackrabbit.core.query.QueryImpl" />
      <param name="respectDocumentOrder" value="true" />
      <param name="resultFetchSize" value="100" />
      <param name="extractorPoolSize" value="3" />
      <param name="extractorTimeout" value="100" />
      <param name="extractorBackLogSize" value="100" />
      <!-- needed to highlight the searched term -->
      <param name="supportHighlighting" value="true"/>
      <!-- custom provider for getting an html excerpt in a query result with rep:excerpt() -->
      <param name="excerptProviderClass" value="info.magnolia.jackrabbit.lucene.SearchHTMLExcerpt"/>
    </SearchIndex>
    <WorkspaceSecurity>
      <AccessControlProvider class="info.magnolia.cms.core.MagnoliaAccessProvider" />
    </WorkspaceSecurity>
  </Workspace>
  <Versioning rootPath="$rep.home/version">
    <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
      <param name="path" value="$rep.home/workspaces/version" />
    </FileSystem>
    <PersistenceManager class="org.apache.jackrabbit.core.persistence.pool.OraclePersistenceManager">
      <param name="driver" value="oracle.jdbc.OracleDriver"/>
      <param name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:xe"/>
      <param name="schema" value="oracle" /> 
      <param name="databaseType" value="oracle" />
      <param name="user" value="magnolia"/>
      <param name="password" value="magnolia"/>
      <param name="schemaObjectPrefix" value="version_"/><!-- read notes below to set this value properly -->
      <param name="externalBLOBs" value="false"/>
    </PersistenceManager>
  </Versioning>
</Repository>

【问题讨论】:

同样的事情,发生在我的 oracle 和 mysql 上。你知道为什么它只创建表不存储数据吗? 嗨@Patriot 是的,我已经想通了,请检查第一个答案的 cmets 在 Ducaz035 帮助后我也有一个链接 【参考方案1】:

jackrabbit 配置一定有问题。我假设您已经更改了 magnolia.properties 文件以使用 jackrabbit-bundle-oracle-search.xml。如果不是这种情况,请更改那个。要记住的另一件事是检查 DataStore 的阈值(通常,如果二进制文件高于某个阈值,则将它们存储在其他地方)也许您就是这种情况。但是,如果两者都不是,最好将您遇到问题的配置复制到这里。

希望对你有帮助,

干杯,

【讨论】:

感谢 Ducaz035 的回答。是的,我更改了进入数据存储的文件大小阈值,但没有任何内容。我在上面的问题中包含了 xml 文件,以便您查看。也许这应该在一个新的实例上完成?再次感谢 能否将 LocalFileSystem 更改为 OracleFileSystem 并将 FileDataStore 更改为 DbDataStore? 显然还有两个不同版本的 OraclePersistenceManager。如果您使用 10 之前的版本,我们应该使用 Oracle9PersistenceManager 嘿,在你的提示之后,我检查了与 OracleFileSystem 和 FileDataStore 相关的包,并且似乎在某些表中有一些持久性:) 其他一些没有,但我现在必须检查 cms。非常感谢 Ducaz035 如果有人感兴趣,这里是链接jackrabbit.apache.org/api/2.12/index.html?org/apache/jackrabbit/…

以上是关于Magnolia Cms Oracle 持久性的主要内容,如果未能解决你的问题,请参考以下文章

Magnolia CMS : 介绍 Magnolia 教程不适用于 Magnolia CE 和 EE

将 Magnolia CMS 加密密码迁移到 Joomla CMS?

Magnolia CMS - 集成第三方系统

VirtualUriMapping 不起作用 - Magnolia CMS

Magnolia CMS - 用于创建模板的模块创建技术

自定义操作实施 Magnolia CMS