Java軟件報表軟件技術博客

          java報表軟件技術匯總 java報表軟件制作 報表軟件新聞
          posts - 355, comments - 100, trackbacks - 0, articles - 3
             :: 首頁 :: 新隨筆 ::  :: 聚合  :: 管理

          我們前面講了幾個數據源,今天我們來講一下EJB數據源,這篇講完我們數據源這部分就講完了。數據連接不需要直接訪問數據庫,而是使用EJB做為數據源。FR通過定義程序數據集使用EJB的相關類獲取到EJB數據源,然后轉為我們里面的二維表作為報表數據源使用,進行展示。例如如下獲取到ejb數據所做的模板。

          一、 實現原理

          FineReport報表的數據來源可以是任何類型的數據,因為FineReport是通過AbstractTableData抽象類來讀取數據源的,因此用戶只要實現了AbstractTableData抽象類,也就可以用自定義類型的程序數據集,FineReport報表引擎就能夠讀取定義的數據源作為報表數據源使用。AbstractTableData抽象類主要有5個方法,具體使用可參考報表引擎API開發入門—簡單程序數據集。EJB程序數據源準備數據使用方法init(),獲取到ejb的javaBean,從而保存數據到ArrayList中。

          二、 實現步驟

          2.1 定義程序數據源
          定義DataModelDemo這個類代碼如下:

          package com.fr.data;
          import javax.naming.*;
          import javax.ejb.*;
          import java.rmi.*;
          import java.util.*;
          import com.fr.data.AbstractTableData;
          import examples.ejb.ejb20.basic.beanManaged.*;
          public class DataModelDemo extends AbstractTableData {
              
          private String[] columnNames;
              
          private ArrayList valueList = null;
              
          public DataModelDemo() {
                  String[] columnNames 
          = { "Name""Score" };
                  
          this.columnNames = columnNames;
              }
              
          // 實現其他四個方法
              public int getColumnCount() {
                  
          return columnNames.length;
              }
              
          public String getColumnName(int columnIndex) {
                  
          return columnNames[columnIndex];
              }
              
          public int getRowCount() {
                  init();
                  
          return valueList.size();
              }
              
          public Object getValueAt(int rowIndex, int columnIndex) {
                  init();
                  
          return ((Object[]) valueList.get(rowIndex))[columnIndex];
              }
              
          // 準備數據
              public void init() {
                  
          // 確保只被執行一次
                  if (valueList != null) {
                      
          return;
                  }
                  
          // 保存得到的結果集
                  valueList = new ArrayList();
                  Context ctx 
          = null;
                  Account ac 
          = null;
                  AccountHome home 
          = null;
                  
          try {
                      
          // Contact the AccountBean container (the "AccountHome") through
                      
          // JNDI.
                      ctx = new InitialContext();
                      home 
          = (AccountHome) ctx
                              .lookup(
          "java:/comp/env/BeanManagedAccountEJB");
                      
          double balanceGreaterThan = 100;
                      Collection col 
          = home.findBigAccounts(balanceGreaterThan);
                      
          if (col != null) {
                          
          // 用對象保存數據
                          Object[] objArray = null;
                          Iterator iter 
          = col.iterator();
                          
          while (iter.hasNext()) {
                              Account bigAccount 
          = (Account) iter.next();
                              objArray 
          = new Object[2];
                              objArray[
          0= bigAccount.getPrimaryKey();
                              objArray[
          1= new Double(bigAccount.balance());
                              
          // 在valueList中加入這一行數據
                              valueList.add(objArray);
                          }
                      }
                  } 
          catch (Exception ex) {
                      ex.printStackTrace();
                  }
              }
          }

          注:使用之前需要先導入ejb的jar包
          2.2 編譯程序數據源
          將編譯后的DataModelDemo.class放到項目的WEB-INF下面的classes目錄下,因為DataModelDemo.java屬于包com.fr.data,所以DataModelDemo.class需要放到classes\com\fr\data目錄下。
          2.3 配置程序數據源
          新建報表,在報表數據集中新建程序數據源,選擇我們定義好的程序數據集,如下圖,名字可以自定義,如Pro。

          2.4 使用程序數據源
          配置好程序數據源后便可以使用定義的Pro程序數據集了,與其他類型的數據集使用方法是相同的,可以通過拖拽方法實現單元格數據列綁定。如下圖

          保存模板到ejb項目環境下,啟動Examples Server服務器,預覽模板就可以成功訪問到模板了!




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


          網站導航:
           
          主站蜘蛛池模板: 三江| 探索| 巴楚县| 玉屏| 繁峙县| 南陵县| 海林市| 汽车| 广元市| 洛川县| 德江县| 鹿泉市| 正蓝旗| 安仁县| 宜城市| 图片| 繁昌县| 东阿县| 岳阳县| 菏泽市| 都昌县| 清水河县| 永修县| 临漳县| 手游| 改则县| 南召县| 建瓯市| 东港市| 邢台市| 丽江市| 四子王旗| 奉贤区| 贺州市| 长汀县| 北流市| 临西县| 富阳市| 南昌市| 山东省| 兴业县|