學(xué)習(xí)筆記

          Simple is beautiful.

          導(dǎo)航

          <2007年3月>
          25262728123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          統(tǒng)計

          公告

          ...

          常用鏈接

          留言簿(1)

          隨筆分類(2)

          隨筆檔案(56)

          Weblog

          搜索

          最新評論

          評論排行榜

          什么是JAVA內(nèi)容倉庫(Java Content Repository)(2)


          內(nèi)容倉庫模型

          JSR-170 是這樣定義內(nèi)容倉庫的,內(nèi)容倉庫由一組 workspace(工作空間)組成,這些workspace通常應(yīng)該包含相似的內(nèi)容。一個內(nèi)容倉庫有一個到多個 workspace。每個workspace都是一個樹狀結(jié)構(gòu),都有一個唯一的樹根節(jié)點(root node)。樹上的item(元素)或者是個node(節(jié)點)或者是個property(屬性)。每個node都可以有零個到多個子節(jié)點和零個到多個子屬性。只有根節(jié)點沒有父節(jié)點,其余所有的節(jié)點都有一個父節(jié)點。property 也必須有一個父節(jié)點,但它沒有子節(jié)點或是子屬性,property 是葉子元素。property是真正存儲數(shù)據(jù)的元素。

          下圖描述了一個blog應(yīng)用程序的內(nèi)容倉庫模型。每個root node(根節(jié)點)的子節(jié)點都代表了一個blog實體。與這個blog實體有關(guān)的數(shù)據(jù)都存儲在 bolgEntry 節(jié)點的屬性里,其中一個 blogAttachment property 存儲了一個二進(jìn)制圖片文件。
          repositorymodel3.gif
          根據(jù)內(nèi)容倉庫實現(xiàn)的功能,JSR-170定義了三種級別:
          Level 1:定義了一個只讀的內(nèi)容倉庫。功能包括讀取內(nèi)容,將內(nèi)容導(dǎo)出為XML和查找內(nèi)容。
          Level 2:定義了可寫的內(nèi)容倉庫。Level 2是Level 1的擴(kuò)展,新增的功能包括往內(nèi)容倉庫里寫入內(nèi)容,和從XML導(dǎo)入數(shù)據(jù)到倉庫。
          Advanced options:定義實現(xiàn)五種附加功能,版本控制、JTA、SQL查詢、清晰的內(nèi)容鎖定和監(jiān)視。

          什么是Apache JackRabbit?
          Apache JackRabbit是一個開放源碼的JSR-170 實現(xiàn),實現(xiàn)了Level 2,但它還有許多擴(kuò)展的功能。詳細(xì)可以去它的官方網(wǎng)站。

          下面我們決定用Apache JackRabbit來作為我們示例程序的內(nèi)容倉庫。

          如何配置Apache JackRabbit
          JackRabbit需要兩個參數(shù)來配置一個內(nèi)容倉庫實例。
          1.內(nèi)容倉庫主目錄:這個文件目錄下通常包含了所有的內(nèi)容,搜索索引,內(nèi)部配置文件和其他持久化信息。它的結(jié)構(gòu)看起來會像下面這個樣子:
          ???c:/temp
          ????????
          |
          ????????
          |--Blogging
          ????????????????
          |
          ????????????????
          |-repository
          ????????????????
          |???????|
          ????????????????
          |???????|-index
          ????????????????
          |???????|-meta
          ????????????????
          |???????|-namespaces
          ????????????????
          |???????|-nodetypes?????????????
          ????????????????
          |
          ????????????????
          |-version
          ????????????????
          |
          ????????????????
          |-workspace
          ????????????????????????
          |
          ????????????????????????
          |--default

          ? 在上面的情況下,內(nèi)容倉庫主目錄是c:/temp/Blogging.
          2.內(nèi)容倉庫配置文件:一個典型的配置文件如下:
          <Repository>
          ?
          <FileSystem?class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
          ??
          <param?name="path"?value="${rep.home}/repository"/>
          ?
          </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="default"/>
          ?
          <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.db.DerbyPersistenceManager">
          ???
          <param?name="url"?value="jdbc:derby:${wsp.home}/db;create=true"/>
          ???
          <param?name="schemaObjectPrefix"?value="${wsp.name}_"/>
          ??
          </PersistenceManager>
          ??
          <SearchIndex?class="org.apache.jackrabbit.core.query.lucene.SearchIndex">
          ???
          <param?name="path"?value="${wsp.home}/index"/>
          ??
          </SearchIndex>
          ?
          </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.db.DerbyPersistenceManager">
          ???
          <param?name="url"?value="jdbc:derby:${rep.home}/version/db;create=true"/>
          ???
          <param?name="schemaObjectPrefix"?value="version_"/>
          ??
          </PersistenceManager>
          ??
          </Versioning>
          ??
          <SearchIndex?class="org.apache.jackrabbit.core.query.lucene.SearchIndex">
          ???
          <param?name="path"?value="${rep.home}/repository/index"/>
          ??
          </SearchIndex>
          </Repository>

          ?
          ? 在這個配置文件里,<Repository>元素是根元素,它包含了下面這些元素:
          ? a,<FileSystem>: 該元素配置了內(nèi)容倉庫的全局?jǐn)?shù)據(jù)存儲位置,這些全局?jǐn)?shù)據(jù)包括已注冊的命名空間,定制的節(jié)點類型等等。??? ??? JackRabbit 提供了幾種選擇,一種是像上面例子里配置的存儲在本地文件里,LocalFileSystem. 如果你想把它們存儲在數(shù)據(jù)庫里,你可以使用 DbFileSystem.
          ? b,<Security>:內(nèi)容倉庫的安全配置,它有兩個子元素:<AccessManager>和<LoginModule>。<AccessManager>配置的類用來判斷用戶有沒有權(quán)限來對特定數(shù)據(jù)執(zhí)行特定的操作。
          ? c,<Workspaces>:這個元素的配置對所有的workspace都通用。它的rootPath 屬性是所有workspace文件夾的根目錄,在我們的例子里它是c:/temp/Blogging/Workspace;defaultWorkspace 屬性則包含了workspace的默認(rèn)名。
          ? d,<Workspace>:這個元素是所有workspace的默認(rèn)配置模板。去每個workspace文件夾下你都會發(fā)現(xiàn)一個workspace.xml文件,這個文件和這個元素的配置一模一樣。三個子元素:<FileSystem>,和這個workspace相關(guān)數(shù)據(jù)的存儲位置;<PersistenceManager> ,這個workspace內(nèi)容節(jié)點存儲策略;<SearchIndex>,可選,全文檢索。
          ? e,<Versioning>:配置一個版本相關(guān)的對象。其實JackRabbit也是把它作為節(jié)點來處理的。

          這兩個參數(shù)可以通過兩種方式設(shè)置,一種是在倉庫實例創(chuàng)建時直接傳到Jackrabbit里去,一種是間接的通過設(shè)置JNDI object factory。
          你可以設(shè)置org.apache.jackrabbit.repository.home 這個系統(tǒng)屬性的值來指定你的內(nèi)容倉庫主目錄;也可以設(shè)置
          org.apache.jackrabbit.repository.conf 這個系統(tǒng)屬性的值來指定你的內(nèi)容倉庫配置文件repository.xml。如果你不設(shè)定這兩個
          參數(shù),Jackrabbit會把當(dāng)前目錄作為內(nèi)容倉庫主目錄,同時,它有一個默認(rèn)的內(nèi)容倉庫配置文件。

          posted on 2007-03-19 01:01 Ecko 閱讀(302) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 孟州市| 日照市| 宜城市| 阿勒泰市| 阜南县| 阳朔县| 绵竹市| 宾阳县| 民权县| 北票市| 西盟| 凤山县| 灵宝市| 肃南| 贺州市| 林西县| 成都市| 土默特左旗| 化德县| 广元市| 鄂尔多斯市| 乳源| 洞头县| 扶绥县| 怀来县| 永和县| 罗源县| 成武县| 都安| 综艺| 原平市| 长海县| 通榆县| 大同县| 赤峰市| 墨玉县| 秦安县| 潜江市| 玉环县| 塔城市| 屯昌县|