报表引擎API开发入门— EJB程序数据源
我们前面讲了几个数据源,今天我们来讲一下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程序数据源的更多相关文章
- 报表引擎API开发入门—简单程序数据集
小编最近接的项目是有关报表开发的,很想把这部分知识分享出来.希望大家能够支持我!不多说,马上进入我们今天的话题. API基本知识 小编最近项目所做的是关于一个报表软件—FineReport报表开发的一 ...
- 报表引擎API开发入门—带参程序数据集
我们今天又来讲讲报表开发的事,上周开的这个系列入门文章也三四天了,浏览量不佳小编甚是悲伤啊,希望大家多多支持我! 一.问题描述 在实际应用中,可能需要根据表名动态地改变数据源,比如在程序数据集中,通过 ...
- 利用WordPress REST API 开发微信小程序从入门到放弃
自从我发布并开源WordPress版微信小程序以来,很多WordPress网站的站长问有关程序开发的问题,其实在文章:<用微信小程序连接WordPress网站>讲述过一些基本的要点,不过仍 ...
- 水果项目第3集-asp.net web api开发入门
app后台开发,可以用asp.net webservice技术. 也有一种重量级一点的叫WCF,也可以用来做app后台开发. 现在可以用asp.net web api来开发app后台. Asp.net ...
- asp.net开源流程引擎API开发调用接口大全-工作流引擎设计
关键词: 工作流引擎 BPM系统 接口调用 工作流快速开发平台 工作流流设计 业务流程管理 asp.net 开源工作流 一.程序调用开发接口二. 接口说明 所谓的驰骋工作流引擎的接口,在B ...
- Java连接程序数据源
在实际应用中,可能需要根据表名动态地改变数据源,比如在程序数据集中,通过传进的表名参数,到数据库取出对应的表作为数据源.例如,FineReport是通过AbstractTableData抽象类来读取数 ...
- WordPress 网站开发“微信小程序“实战(三)
本文是"WordPress 开发微信小程序"系列的第三篇,本文记录的是开发"DeveWork+"小程序1.2 版本的过程.建议先看完第一篇.第二篇再来阅读本文. ...
- 你也可以玩转Skype -- 基于Skype API开发外壳程序入门
原文:你也可以玩转Skype -- 基于Skype API开发外壳程序入门 Skype是目前这个星球上最厉害的IM+VOIP软件,Skype现在已经改变了全球2.8亿人的生活方式.你,值得拥有! :) ...
- 微信小程序入门与实战 常用组件API开发技巧项目实战*全
第1章 什么是微信小程序? 第2章 小程序环境搭建与开发工具介绍 第3章 从一个简单的“欢迎“页面开始小程序之旅 第4章 第二个页面:新闻阅读列表 第5章 小程序的模板化与模块化 第6章 构建新闻详情 ...
随机推荐
- 【转载】GUID vs INT Debate
I recently read a blog post on what was better using GUIDs or Integer values. This is been an age lo ...
- Test your application
Creating automatic test suites for your application is a good way to make it robust. It allows you t ...
- SQL SERVER常用定义查询
https://msdn.microsoft.com/en-us/library/ms175081.aspx
- Xamarin安装和跳坑指南
安装Checklist 注意:本文只描述安装过程,由于组件的版本更新很快,为保证文章时效性,不提供下载链接,也尽可能不指明具体版本. 安装Visual Studio 2015进行默认安装,除非已经FQ ...
- 15个最佳的代码评审(Code Review)工具
代码评审可以被看作是计算机源代码的测试,它的目的是查找和修复引入到开发阶段的应用程序的错误,提高软件的整体素质和开发者的技能.代码审查程序以各种形式,如结对编程,代码抽查等.在这个列表中,我们编制了1 ...
- 编码之JSP乱码涉及问题
各种编码一栏表 A. JSP/Servlet都有的编码设置 1. request.setCharacterEncoding("UTF-8") 2. response.setChar ...
- SharePoint 2013 同步FBA认证用户
SharePoint 开启了基于FBA的身份认证,经常会遇到用户组用户的问题,当我加入一个AD账号,无法同时加入Form认证的用户,这时,只能手动添加,比较麻烦:所以,写了一个服务,用来每天晚上同步一 ...
- android加固系列—6.仿爱加密等第三方加固平台之动态加载dex防止apk被反编译
[版权所有,转载请注明出处.出处:http://www.cnblogs.com/joey-hua/p/5402599.html ] 此方案的目的是隐藏源码防止直接性的反编译查看源码,原理是加密编译好的 ...
- System.Web.HttpException: 无法序列化会话状态。在“StateServer”或“SQLServer”模式下,ASP.NET 将序列化会话状态对象,因此不允许使用无法序列化的对象或 MarshalByRef 对象。如果自定义会话状态存储在“Custom”模式下执行了类似的序列化,则适用同样的限制。 ---> System.Runtime.Serialization.Seria
序列化问题:查询度娘各种答案不一 多为修改web.config找到SessionState节,将Mode 设置为 InProc ,还有舍弃Session用cookie存储,多经试验觉得还是写一个 ...
- Android 内容提供者的实现
接着上文<Android 内容提供者简介>进一步实现内容提供者. 每个Content Provider类都使用URI(Universal Resource Identifier,通用资源标 ...