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 荣浩原创,转载请注明出处:)
  • 相关阅读:
    python并发编程之gevent协程(四)
    python并发编程之asyncio协程(三)
    python并发编程之multiprocessing进程(二)
    python并发编程之threading线程(一)
    python设计模式之内置装饰器使用(四)
    python设计模式之装饰器详解(三)
    python设计模式之迭代器与生成器详解(五)
    EF code First数据迁移学习笔记
    15.02.13-代码小技巧
    Route学习笔记之Area的Route注册
  • 原文地址:https://www.cnblogs.com/SingleCat/p/1299715.html
Copyright © 2011-2022 走看看