liferay的文档库的portlet用起来很方便,但是发现,当你把这个tomcat重新部署,或者把这个tomcat移植到其他机器上的时候,文档库里面以前上传上来的文档,虽然信息还在,但是无法下载了。
原因是,liferay文档库,默认的配置是把文档的数据存储到了你tomcat所在服务器的${user.home}/liferay下面的jackrabbit文件夹里面了,所以在重新部署tomcat 或者将tomcat移植到其他服务器上的时候,不能下载了。
解决办法:
1。在portal.properties里面将resource.repositories.root=${user.home}/liferay的${user.home}修改成你的tomcat路径下。不要将这些信息存储到你的用户文件夹下。
2。将文档的存储方式改变成以数据的形式存储到数据库中,我觉得这个方法更好一些。这个到${user.home}/liferay/jackrabbit下,修改repository.xml。
修改后的文件如下:
<?xml version="1.0"?>
<Repository>
<!--<FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
<param name="path" value="${rep.home}/repository" />
</FileSystem>-->
<!--
Database File System (Cluster Configuration)
This is sample configuration for mysql persistence that can be used for
clustering Jackrabbit. For other databases, change the connection,
credentials, and schema settings.
-->
<FileSystem class="org.apache.jackrabbit.core.fs.db.DbFileSystem">
<param name="driver" value="com.mysql.jdbc.Driver"/>
<param name="url" value="jdbc:mysql://localhost/jcr" />
<param name="user" value="root" />
<param name="password" value="admin" />
<param name="schema" value="mysql"/>
<param name="schemaObjectPrefix" value="J_R_FS_"/>
</FileSystem>
<Security appName="Jackrabbit">
<AccessManager class="org.apache.jackrabbit.core.security.SimpleAccessManager" />
<LoginModule class="org.apache.jackrabbit.core.security.SimpleLoginModule">
<param name="anonymousId" value="anonymous" />
</LoginModule>
</Security>
<Workspaces rootPath="${rep.home}/workspaces" defaultWorkspace="liferay" />
<Workspace name="${wsp.name}">
<!-- <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
<param name="path" value="${wsp.home}" />
</FileSystem>
<PersistenceManager class="org.apache.jackrabbit.core.state.xml.XMLPersistenceManager" />
-->
<!--
Database File System and Persistence (Cluster Configuration)
This is sample configuration for mysql persistence that can be used for
clustering Jackrabbit. For other databases, change the connection,
credentials, and schema settings.
-->
<PersistenceManager class="org.apache.jackrabbit.core.state.db.SimpleDbPersistenceManager">
<param name="driver" value="com.mysql.jdbc.Driver" />
<param name="url" value="jdbc:mysql://localhost/jcr" />
<param name="user" value="root" />
<param name="password" value="admin" />
<param name="schema" value="mysql" />
<param name="schemaObjectPrefix" value="J_PM_${wsp.name}_" />
<param name="externalBLOBs" value="false" />
</PersistenceManager>
<FileSystem class="org.apache.jackrabbit.core.fs.db.DbFileSystem">
<param name="driver" value="com.mysql.jdbc.Driver"/>
<param name="url" value="jdbc:mysql://localhost/jcr" />
<param name="user" value="root" />
<param name="password" value="admin" />
<param name="schema" value="mysql"/>
<param name="schemaObjectPrefix" value="J_FS_${wsp.name}_"/>
</FileSystem>
</Workspace>
<Versioning rootPath="${rep.home}/version">
<!-- <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
<param name="path" value="${rep.home}/version" />
</FileSystem>
<PersistenceManager class="org.apache.jackrabbit.core.state.xml.XMLPersistenceManager" />
-->
<!--
Database File System and Persistence (Cluster Configuration)
This is sample configuration for mysql persistence that can be used for
clustering Jackrabbit. For other databases, change the connection,
credentials, and schema settings.
-->
<FileSystem class="org.apache.jackrabbit.core.fs.db.DbFileSystem">
<param name="driver" value="com.mysql.jdbc.Driver"/>
<param name="url" value="jdbc:mysql://localhost/jcr" />
<param name="user" value="root" />
<param name="password" value="admin" />
<param name="schema" value="mysql"/>
<param name="schemaObjectPrefix" value="J_V_FS_"/>
</FileSystem>
<PersistenceManager class="org.apache.jackrabbit.core.state.db.SimpleDbPersistenceManager">
<param name="driver" value="com.mysql.jdbc.Driver" />
<param name="url" value="jdbc:mysql://localhost/jcr" />
<param name="user" value="root" />
<param name="password" value="admin" />
<param name="schema" value="mysql" />
<param name="schemaObjectPrefix" value="J_V_PM_" />
<param name="externalBLOBs" value="false" />
</PersistenceManager>
</Versioning>
<!--
Cluster Configuration
This is sample configuration for mysql persistence that can be used for
clustering Jackrabbit. For other databases, change the connection,
credentials, and schema settings.
-->
<!--<Cluster id="node_1" syncDelay="5">
<Journal class="org.apache.jackrabbit.core.journal.DatabaseJournal">
<param name="revision" value="${rep.home}/revision"/>
<param name="driver" value="com.mysql.jdbc.Driver"/>
<param name="url" value="jdbc:mysql://localhost/jcr"/>
<param name="user" value=""/>
<param name="password" value=""/>
<param name="schema" value="mysql"/>
<param name="schemaObjectPrefix" value="J_C_"/>
</Journal>
</Cluster>-->
</Repository>
注意:连接数据库时候的用户名和密码填写正确,还有数据库名,如果不想和tomcat用同一个数据库,那么就再另外建立一个jcr的数据库即可,里面的表会自动生成。
这样,不管tomcat怎么重新部署和移植,文档的数据是存储到数据库里面了,只要数据库文件还在,什么时候都能下载。
参考文档:http://wiki.liferay.com/index.php/Jackrabbit
补充:
刚才一个网友告诉我可以在部署出来之前修改portal源码的相关配置,这样第一次部署tomcat生成的repository.xml就是存储到数据库的配置了。修改的源码是portal-impl.jar/com/liferay/portal/jcr/jackrabbit/dependencies/repository.xml 这个就是部署repository.xml之前的原文件。