zoukankan      html  css  js  c++  java
  • 什么是JAVA内容仓库(Java Content Repository)(2)

    内容仓库模型
    JSR-170 是这样定义内容仓库的,内容仓库由一组 workspace(工作空间)组成,这些workspace通常应该包含相似的内容。一个内容仓库有一个到多个 workspace。每个workspace都是一个树状结构,都有一个唯一的树根节点(root node)。树上的item(元素)或者是个node(节点)或者是个property(属性)。每个node都可以有零个到多个子节点和零个到多个子属性。只有根节点没有父节点,其余所有的节点都有一个父节点。property 也必须有一个父节点,但它没有子节点或是子属性,property 是叶子元素。property是真正存储数据的元素。

    下图描述了一个blog应用程序的内容仓库模型。每个root node(根节点)的子节点都代表了一个blog实体。与这个blog实体有关的数据都存储在 bolgEntry 节点的属性里,其中一个 blogAttachment property 存储了一个二进制图片文件。
    repositorymodel3.gif
    根据内容仓库实现的功能,JSR-170定义了三种级别:
    Level 1:定义了一个只读的内容仓库。功能包括读取内容,将内容导出为XML和查找内容。
    Level 2:定义了可写的内容仓库。Level 2是Level 1的扩展,新增的功能包括往内容仓库里写入内容,和从XML导入数据到仓库。
    Advanced options:定义实现五种附加功能,版本控制、JTA、SQL查询、清晰的内容锁定和监视。

    什么是Apache JackRabbit?
    Apache JackRabbit是一个开放源码的JSR-170 实现,实现了Level 2,但它还有许多扩展的功能。详细可以去它的官方网站。

    下面我们决定用Apache JackRabbit来作为我们示例程序的内容仓库。

    如何配置Apache JackRabbit
    JackRabbit需要两个参数来配置一个内容仓库实例。
    1.内容仓库主目录:这个文件目录下通常包含了所有的内容,搜索索引,内部配置文件和其他持久化信息。它的结构看起来会像下面这个样子:
       c:/temp
            
    |

            
    |--Blogging
                    
    |

                    
    |-repository
                    
    |       |

                    
    |       |-index
                    
    |       |-
    meta
                    
    |       |-
    namespaces
                    
    |       |-
    nodetypes             
                    
    |

                    
    |-version
                    
    |

                    
    |-workspace
                            
    |

                            
    |--default

      在上面的情况下,内容仓库主目录是c:/temp/Blogging.
    2.内容仓库配置文件:一个典型的配置文件如下:
    <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>: 该元素配置了内容仓库的全局数据存储位置,这些全局数据包括已注册的命名空间,定制的节点类型等等。        JackRabbit 提供了几种选择,一种是像上面例子里配置的存储在本地文件里,LocalFileSystem. 如果你想把它们存储在数据库里,你可以使用 DbFileSystem.
      b,<Security>:内容仓库的安全配置,它有两个子元素:<AccessManager>和<LoginModule>。<AccessManager>配置的类用来判断用户有没有权限来对特定数据执行特定的操作。
      c,<Workspaces>:这个元素的配置对所有的workspace都通用。它的rootPath 属性是所有workspace文件夹的根目录,在我们的例子里它是c:/temp/Blogging/Workspace;defaultWorkspace 属性则包含了workspace的默认名。
      d,<Workspace>:这个元素是所有workspace的默认配置模板。去每个workspace文件夹下你都会发现一个workspace.xml文件,这个文件和这个元素的配置一模一样。三个子元素:<FileSystem>,和这个workspace相关数据的存储位置;<PersistenceManager> ,这个workspace内容节点存储策略;<SearchIndex>,可选,全文检索。
      e,<Versioning>:配置一个版本相关的对象。其实JackRabbit也是把它作为节点来处理的。

    这两个参数可以通过两种方式设置,一种是在仓库实例创建时直接传到Jackrabbit里去,一种是间接的通过设置JNDI object factory。
    你可以设置org.apache.jackrabbit.repository.home 这个系统属性的值来指定你的内容仓库主目录;也可以设置
    org.apache.jackrabbit.repository.conf 这个系统属性的值来指定你的内容仓库配置文件repository.xml。如果你不设定这两个
    参数,Jackrabbit会把当前目录作为内容仓库主目录,同时,它有一个默认的内容仓库配置文件。

    http://www.blogjava.net/ronghao 荣浩原创,转载请注明出处:)
  • 相关阅读:
    78. Subsets
    93. Restore IP Addresses
    71. Simplify Path
    82. Remove Duplicates from Sorted List II
    95. Unique Binary Search Trees II
    96. Unique Binary Search Trees
    312. Burst Balloons
    程序员社交平台
    APP Store开发指南
    iOS框架搭建(MVC,自定义TabBar)--微博搭建为例
  • 原文地址:https://www.cnblogs.com/SingleCat/p/1299715.html
Copyright © 2011-2022 走看看