Jetspeed2的PSML(Page Structure Markup Language)支持XML和數(shù)據(jù)庫存儲兩種模式,系統(tǒng)缺省采用XML方式,但當(dāng)系統(tǒng)中PSML數(shù)量太大是,采用XML的模式顯然有點(diǎn)不合適,這個時候可以采用數(shù)據(jù)庫模式。

需要做的工作有:
1、修改Spring Bean的配置
- 打開文件jetspeed\WEB-INF\assembly\page-manager.xml
- 將bean-id為org.apache.jetspeed.page.PageManager的bean配置刪除
- 將一下代碼添加進(jìn)去
<!-- 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,系統(tǒng)原有目錄jetspeed\WEB-INF\pages下的PSML不再生效,hahaha...
當(dāng)你輸入http://127.0.0.1:8080/jetspeed 的時候,頁面給你的提示卻是“ROOT Folder No Found”,是不是哪里沒有配置好?不是的,配置是正確的,系統(tǒng)運(yùn)行也是正常的,原因是你沒有把系統(tǒng)初始的PSML導(dǎo)入到你的數(shù)據(jù)庫中,你可以打開數(shù)據(jù)庫,表page是空的,沒有任何數(shù)據(jù),當(dāng)然給你錯誤了,那怎么辦呢,怎么接著往下看:
3、講系統(tǒng)初始PSML導(dǎo)入到數(shù)據(jù)庫
jetspeed提供PSML的XML與數(shù)據(jù)庫互轉(zhuǎn)的工具,我這里指講解從XML到數(shù)據(jù)庫的過程:
- jetspeed提供了一個類org.apache.jetspeed.page.PageImporter,并提供了main方法,你只要運(yùn)行它既可,運(yùn)行前,現(xiàn)把一下這些文件放到你的classpath下

- 修改配置文件import-page-manager.xml,將PsmlDocumentHandler、LinkDocumentHandler、FolderMetaDataDocumentHandler、PageSecurityDocumentHandler、FolderHandler這些Bean的構(gòu)造參數(shù)中“pages路徑”指向你真實(shí)的路徑下
- 修改配置文件repository-datasource-spring.xml,配置你的數(shù)據(jù)源
- 運(yùn)行PageImporter,會提示已經(jīng)導(dǎo)入的Folder以及Page等信息
4、啟動Server,訪問http://127.0.0.1:8080/jetspeed,你可以看到與XML同樣的效果。
附錄
與數(shù)據(jù)庫存儲PSML相關(guān)的表
- folder 文件夾,對應(yīng)于pages下面的各個文件夾
- folder_constraint 文件夾權(quán)限,對應(yīng)于folder.metadata的security-constraints owner
- folder_constraint_ref 文件夾訪問權(quán)限,對應(yīng)于folder.metadata的security-constraints security-constraints-ref
- folder_metadata 文件夾的元數(shù)據(jù),常用于文件夾名稱的國際化
- folder_menu 文件夾的菜單,對應(yīng)于folder.metadata的menu
- folder_menu_metadata 菜單的元數(shù)據(jù),常用于菜單名稱的國際化
- page頁 面表,即PSML
- fragment 頁面的Portlet-entity表
- link 鏈接表