hengheng123456789

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            297 Posts :: 68 Stories :: 144 Comments :: 0 Trackbacks
          JPivot - 是一個自定義的JSP的標簽庫,可以用來在JSP頁面中嵌入OLAP表格和圖表。用戶可以執行典型的OLAP導航,如下鉆,切片和切塊。它使用Mondrian 作為其OLAP服務器。

          JPivot MVC結構

          Web應用的架構來講,JPivot完全遵循MVC結構,甚至十分苛刻。為了減少對特定第三方框架的以來,JPivot自己實現了MVC框架,但它可以與其它MVC框架共同使用。

          1.JPivot模型Model:

          JPivotModel部分處理Olap的模型定義,查詢及結果集;JPivot自己定義了一個Olap模型,然后分別提供了MondrianXML/AJPivot model實現,這兩個實現又通過AdapterMondrian系統及xml/a系統交互。

          2.JPivot視圖View:

          JPivotView部分比較豐富,包括JPivot taglibwfc taglib定義及相關的UI Component助手類。用戶可以在自己的JSP中使用tag構建新的視圖。與其它Web框架不同的是JPivot在該層次提供了大量的Web組件,類似于JSF那樣。

          3.JPivot控制器Controller:

          JPivot的控制器部分非常有特色。在JPivot中,使用單件模式(Singleton)在每個用戶的HttpSession中維護唯一一個WcfController對象,然后以此對象為根,使用Composition模式,將所有的控件請求處理的RequestFilter組織成樹形結構。

          PATH o:connecttype="rect" gradientshapeok="t" o:extrusionok="f" />SHAPE id=_x0000_i1025 style="WIDTH: 336.75pt; HEIGHT: 187.5pt; mso-position-horizontal-relative: text; mso-position-vertical-relative: text" type="#_x0000_t75" o:allowoverlap="f" />/SHAPE />

          JPivot中,所有的UI控件操作都使用DispatcherSupport來維護處理該控件中UI交互的一個或多個Handler(比如表示表格中擴展鉆取的“+”圖標的DrillExpandUI類中的dispatcher屬性與ExpandHandler內部類),而每個UI控件的dispatcher又在其父控件的dispatcher中注冊。JPivot根據客戶端操作所請求的URL在以WfcController為根的RequestFileter樹中查找對應的處理器

          JPivot設計模式

          在JPivot中使用了大量的設計模式(Design Patterns),本文對這些設計模式實例進行簡單的介紹。個人認為通過分析這些實際的系統來學習設計模式所得到的體會還是比較深刻的。

          一、Decorator裝飾模式

          1. OlapModel類與OlapModelDecorator類構成Decorator模式,JPivot基于OlapModelDecoratorOlapModel提供了兩種裝飾器:

          §??OlapModelProxy對在HttpSession中唯一添加OlapModel提供了支持,并限制了其它對象對OlapModel的初始化與重置操作;增加了OlapModel在改變時通知注冊的Listener所發生的改變這一職責。

          §??CachingOlapModelOlapModel提供了在一定的周期內(Model沒有發生改變時)緩存Result結果集的職責。

          2.? PartBuilder類與PartBuilderDecorator類構成Decorator模式,具體的裝飾器比較多,但裝飾器都是針對特定的Part來裝飾的。通過繼承這些裝飾器,可以為構建Table的各個部分(行、列、單元格、切片)的xml進行。JPivot結合Apache PATH o:connecttype="rect" gradientshapeok="t" o:extrusionok="f" />SHAPE id=_x0000_s1026 style="MARGIN-TOP: 0px; Z-INDEX: 1; LEFT: 0px; MARGIN-LEFT: 0px; WIDTH: 346.5pt; POSITION: absolute; HEIGHT: 254.6pt; TEXT-ALIGN: left; mso-position-horizontal-relative: text; mso-position-vertical-relative: text" type="#_x0000_t75" />/WRAPBLOCK />
          Digester,使我們可以不用修改任何現有代碼,僅需實現這些裝飾器及對應TableExtension,并在config.xml中注冊就可以對所生成的Olap Pivot TableUI表現上進行擴充,并且可以增加或修改對相應的交互操作進行處理的Handler

          ?

          3. JPivot使用wfc.tree包對成員及層次的樹形展示進行支持。JPivot定義了一些裝飾來增加樹形控件模型的職責。其中:

          • GroupingTreeModelDecorator裝飾增加的職責是在子成員數目比較大的時候,可以分組顯示子成員以提高效率。
          • OptimizingTreeModelDecorator裝飾增加的職責是可以根據過濾器(NodeFilter)動態的隱藏掉不滿足過濾條件的分支及節點。
          • SimpleOptimizingTreeModelDecorator裝飾增加的職責是當樹只有一個頂級根節點的時候,不顯示該根節點,而是直接顯示第二層的子節點,這樣用戶就不用每次都要做無謂的展開操作。
          • CachingTreeModelDecorator裝飾增加的職責是當用戶在樹形中執行展開等瀏覽操作時,保存用戶每次操作請求的數據,形成TreeModel節點的緩存,以提高以后再次操作的相應效率。

           ??

          二、Observer觀察者模式

          ??? 在JPivot中,大量使用Observer模式解除視圖與模型之間的耦合,處理兩者之間的依賴關系及內容與表示同步。

          ??? Model類及其子類(JPivot自定義Olap 模型的Mondrian實現、xml/a實現)ModelChangeListener及其子類(表格、鉆取/旋轉/排序排名等、圖形、成員樹等展示控件)構成Observer模式(嚴格的說應該是Listener模式),作用是在模型發生改變時,同步更新所有的UI控件展示。


          posted on 2006-12-03 17:22 哼哼 閱讀(3287) 評論(0)  編輯  收藏 所屬分類: BI
          主站蜘蛛池模板: 灌云县| 纳雍县| 新干县| 廉江市| 灵璧县| 繁峙县| 宁南县| 新巴尔虎左旗| 九江县| 台前县| 浪卡子县| 鄂伦春自治旗| 遂川县| 明溪县| 抚顺市| 南城县| 太湖县| 河曲县| 通州区| 房山区| 资阳市| 日照市| 长海县| 和顺县| 望城县| 朝阳市| 民勤县| 大竹县| 花莲县| 资中县| 萝北县| 盐边县| 清苑县| 三明市| 惠来县| 梓潼县| 留坝县| 江孜县| 元氏县| 霍州市| 曲沃县|