我们前面讲了几个数据源,今天我们来讲一下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服务器,预览模板就可以成功访问到模板了!

报表引擎API开发入门— EJB程序数据源的更多相关文章

  1. 报表引擎API开发入门—简单程序数据集

    小编最近接的项目是有关报表开发的,很想把这部分知识分享出来.希望大家能够支持我!不多说,马上进入我们今天的话题. API基本知识 小编最近项目所做的是关于一个报表软件—FineReport报表开发的一 ...

  2. 报表引擎API开发入门—带参程序数据集

    我们今天又来讲讲报表开发的事,上周开的这个系列入门文章也三四天了,浏览量不佳小编甚是悲伤啊,希望大家多多支持我! 一.问题描述 在实际应用中,可能需要根据表名动态地改变数据源,比如在程序数据集中,通过 ...

  3. 利用WordPress REST API 开发微信小程序从入门到放弃

    自从我发布并开源WordPress版微信小程序以来,很多WordPress网站的站长问有关程序开发的问题,其实在文章:<用微信小程序连接WordPress网站>讲述过一些基本的要点,不过仍 ...

  4. 水果项目第3集-asp.net web api开发入门

    app后台开发,可以用asp.net webservice技术. 也有一种重量级一点的叫WCF,也可以用来做app后台开发. 现在可以用asp.net web api来开发app后台. Asp.net ...

  5. asp.net开源流程引擎API开发调用接口大全-工作流引擎设计

    关键词: 工作流引擎 BPM系统 接口调用 工作流快速开发平台  工作流流设计  业务流程管理   asp.net 开源工作流 一.程序调用开发接口二.   接口说明 所谓的驰骋工作流引擎的接口,在B ...

  6. Java连接程序数据源

    在实际应用中,可能需要根据表名动态地改变数据源,比如在程序数据集中,通过传进的表名参数,到数据库取出对应的表作为数据源.例如,FineReport是通过AbstractTableData抽象类来读取数 ...

  7. WordPress 网站开发“微信小程序“实战(三)

    本文是"WordPress 开发微信小程序"系列的第三篇,本文记录的是开发"DeveWork+"小程序1.2 版本的过程.建议先看完第一篇.第二篇再来阅读本文. ...

  8. 你也可以玩转Skype -- 基于Skype API开发外壳程序入门

    原文:你也可以玩转Skype -- 基于Skype API开发外壳程序入门 Skype是目前这个星球上最厉害的IM+VOIP软件,Skype现在已经改变了全球2.8亿人的生活方式.你,值得拥有! :) ...

  9. 微信小程序入门与实战 常用组件API开发技巧项目实战*全

    第1章 什么是微信小程序? 第2章 小程序环境搭建与开发工具介绍 第3章 从一个简单的“欢迎“页面开始小程序之旅 第4章 第二个页面:新闻阅读列表 第5章 小程序的模板化与模块化 第6章 构建新闻详情 ...

随机推荐

  1. canvas粒子效果-snow

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  2. js改变css样式的三种方法

    共用代码: <div id="div">this is a div</div> var div=document.getElementById('div') ...

  3. jQuery 制作逼真的日历翻转效果的倒计时

    在开发中,一些功能需要用到倒计时,例如最常见的活动开始.结束的倒计时.使用最流行的 JavaScript 库来制作这个效果很简单.下面就是一个 jQuery 制作的逼真的日历翻转效果的倒计时功能. 在 ...

  4. Plyr – 简单,灵活的 HTML5 媒体播放器

    Plyr 是一个简单的 HTML5 媒体播放器,包含自定义的控制选项和 WebVTT 字幕.它是只支持现代浏览器,轻量,方便和可定制的媒体播放器.还有的标题和屏幕阅读器的全面支持. 在线演示      ...

  5. XSS攻击的解决方法

    在我上一篇<前端安全之XSS攻击>文中,并没有把XSS攻击的解决办法说完整,而XSS的攻击又那么五花八门,有没有一招“独孤九剑”能够抗衡,毕竟那么多情况场景,开发人员无法一一照顾过来,而今 ...

  6. C# PPT 查找替换

    public void ReplaceAll(string OldText,string NewText)        {            int num = PageNum();       ...

  7. Snort - manual 笔记(五)

    1.9 Miscellaneous 1.9.1 Running Snort as a Daemon 如果你想让Snort作为守护程序运行,你可以在最后加上 -D 选项.清注意如果你想通过发送一个 SI ...

  8. Shiro简介

    1.简介 Apache Shiro是一个功能强大且易于使用的Java安全框架,进行身份验证,授权,加密和会话管理,可用于保护任何应用程序 - 从命令行应用程序,移动应用程序到大型的Web应用和企业应用 ...

  9. android加固系列—6.仿爱加密等第三方加固平台之动态加载dex防止apk被反编译

    [版权所有,转载请注明出处.出处:http://www.cnblogs.com/joey-hua/p/5402599.html ] 此方案的目的是隐藏源码防止直接性的反编译查看源码,原理是加密编译好的 ...

  10. 深入浅出-iOS程序性能优化 (转载)

    iOS应用是非常注重用户体验的,不光是要求界面设计合理美观,也要求各种UI的反应灵敏,我相信大家对那种一拖就卡卡卡的 TableView 应用没什么好印象. iOS应用是非常注重用户体验的,不光是要求 ...