报表引擎API开发入门— EJB程序数据源

我们前面讲了几个数据源,今天我们来讲一下EJB数据源,这篇讲完我们数据源这部分就讲完了。数据连接不需要直接访问数据库,而是使用EJB做为数据源。FR通过定义程序数据集使用EJB的相关类获取到EJB数据源,然后转为我们里面的二维表作为报表数据源使用,进行展示。例如如下获取到ejb数据所做的模板。
报表引擎API开发入门— EJB程序数据源_第1张图片

一、 实现原理

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。
报表引擎API开发入门— EJB程序数据源_第2张图片
2.4 使用程序数据源
配置好程序数据源后便可以使用定义的Pro程序数据集了,与其他类型的数据集使用方法是相同的,可以通过拖拽方法实现单元格数据列绑定。如下图
报表引擎API开发入门— EJB程序数据源_第3张图片
保存模板到ejb项目环境下,启动Examples Server服务器,预览模板就可以成功访问到模板了!



欲了解更多中式java报表软件?请点击

你可能感兴趣的:(报表引擎API开发入门— EJB程序数据源)