Jetspeed2的PSML(Page Structure Markup Language)支持XML和数据库存储两种模式,系统缺省采用XML方式,但当系统中PSML数量太大是,采用XML的模式显然有点不合适,这个时候可以采用数据库模式。

需要做的工作有:
1、修改Spring Bean的配置
- 打开文件jetspeed\WEB-INF\assembly\page-manager.xml
- 将bean-id为org.apache.jetspeed.page.PageManager的bean配置删除
- 将一下代码添加进去
<!-- Page Manager -->
<bean id="org.apache.jetspeed.page.PageManagerImpl"
name="pageManagerImpl"
init-method="init"
class="org.apache.jetspeed.page.impl.DatabasePageManager">
<!-- OJB configuration file resource path -->
<constructor-arg index="0"><value>JETSPEED-INF/ojb/page-manager-repository.xml</value></constructor-arg>
<!-- folder/page/link cache size, default=128, min=128 -->
<constructor-arg index="1"><value>128</value></constructor-arg>
<!-- folder/page/link cache expires seconds, default=150, infinite=0, min=30 -->
<constructor-arg index="2"><value>30</value></constructor-arg>
<!-- permissions security enabled flag, default=false -->
<constructor-arg index="3"><value>false</value></constructor-arg>
<!-- constraints security enabled flag, default=true -->
<constructor-arg index="4"><value>true</value></constructor-arg>
</bean>
<!-- Transaction Proxying -->
<bean id="org.apache.jetspeed.page.PageManager" name="pageManager" parent="baseTransactionProxy">
<property name="proxyInterfaces">
<value>org.apache.jetspeed.page.PageManager</value>
</property>
<property name="target">
<ref bean="pageManagerImpl" />
</property>
</bean>
2、启动Server,系统原有目录jetspeed\WEB-INF\pages下的PSML不再生效,hahaha...
当你输入http://127.0.0.1:8080/jetspeed 的时候,页面给你的提示却是“ROOT Folder No Found”,是不是哪里没有配置好?不是的,配置是正确的,系统运行也是正常的,原因是你没有把系统初始的PSML导入到你的数据库中,你可以打开数据库,表page是空的,没有任何数据,当然给你错误了,那怎么办呢,怎么接着往下看:
3、讲系统初始PSML导入到数据库
jetspeed提供PSML的XML与数据库互转的工具,我这里指讲解从XML到数据库的过程:
- jetspeed提供了一个类org.apache.jetspeed.page.PageImporter,并提供了main方法,你只要运行它既可,运行前,现把一下这些文件放到你的classpath下

- 修改配置文件import-page-manager.xml,将PsmlDocumentHandler、LinkDocumentHandler、FolderMetaDataDocumentHandler、PageSecurityDocumentHandler、FolderHandler这些Bean的构造参数中“pages路径”指向你真实的路径下
- 修改配置文件repository-datasource-spring.xml,配置你的数据源
- 运行PageImporter,会提示已经导入的Folder以及Page等信息
4、启动Server,访问http://127.0.0.1:8080/jetspeed,你可以看到与XML同样的效果。
附录
与数据库存储PSML相关的表
- folder 文件夹,对应于pages下面的各个文件夹
- folder_constraint 文件夹权限,对应于folder.metadata的security-constraints owner
- folder_constraint_ref 文件夹访问权限,对应于folder.metadata的security-constraints security-constraints-ref
- folder_metadata 文件夹的元数据,常用于文件夹名称的国际化
- folder_menu 文件夹的菜单,对应于folder.metadata的menu
- folder_menu_metadata 菜单的元数据,常用于菜单名称的国际化
- page页 面表,即PSML
- fragment 页面的Portlet-entity表
- link 链接表