Posts Tagged ‘URL’

润乾报表集群缓存同步功能介绍

07.26.2010 by zangmingkun - 0 Comment - 0
Posted in web报表

目前服务器的集群,大多是使用session同步的方法解决的问题,即让集群中一台电脑的session在集群服务器发生相互之间跳转的时候,把session也同时复制到相应的电脑上。例如:在集群服务器中,第一次访问A机器,第二次跳转到B机器继续访问,服务器会自动把A机器产生的session的内容复制到B机器上,使得访问正常进行,从而实现服务器之间负载更加均衡。

但是润乾报表的缓存机制有所不同,润乾的缓存是基于硬盘的,会把缓存文件保存到电脑的硬盘上。但是这样在集群服务器上就造成了如下问题:当客户端第一次访问A机器时产生的报表保存在A机器的缓存目录下,第二次访问跳转到B机器时,B机器无法从A机器的本地硬盘上取得缓存的报表。为了解决这个问题,润乾采取了集群缓存同步的功能。

首先介绍一下集群缓存同步功能的概念。集群缓存同步是指:客户端在多次访问集群服务器的不同主机时,服务器之间可以进行报表缓存的同步,使得客户端能够返回正确的结果而不需要重新计算。

然后用户需要知道,润乾报表缓存相关的配置方法要在 reportconfig.xml 中设置, reportconfig.xml 的路径为:润乾web应用根目录下的WEB-INF/reportConfig.xml ,其中所有缓存相关的可配置属性如下:

<config>
<!– 配置缓存机器和缓存端口号–>
<name>clusterMember</name>
<value>A,192.168.0.59,8087;B,192.168.0.48,8087;</value>
</config>
<config>
<!– 配置是否共享缓存目录–>
<name>isCachedFileShared</name>
<value>yes</value>
</config>
<config>
<!– 配置缓存共享目录–>
<name>cachedReportDir</name>
<value>\\192.168.0.59\cached</value>
</config>
<config>
<!– 配置缓存id的前缀,注意集群时不同机器用不同的前缀–>
<name>cachedIdPrefix</name>
<value>A</value>
</config>

 

在上面的可配置属性中,其中 clusterMember 属性指定了系统缓存前缀,所有集群的服务器结点,每个服务器结点与缓存服务器间的通讯接口。它的格式是:缓存前缀,对应电脑的IP地址,访问电脑的端口号;…”,集群中有多少台电脑要用到集群缓存同步机制,那么就要在这里按照上面的格式,把这些电脑一一配置好。

第二个重要属性是 isCachedFileShared ,它的取值范围是 yes 或者 no ,它的作用是是否共享本地硬盘上的缓存目录和文件。设置为 yes 的时候缓存目录和文件被共享,可以在集群服务器中访问到电脑硬盘上的缓存,如果设置为 no ,那么缓存不能被共享,也就不能被集群中的其他电脑得到。必须注意的是,如果它的值为 yes ,那么必须设置 cachedReportDir 属性的值, cachedReportDir 的作用是 配置缓存共享目录,润乾报表的缓存将被保存到这个目录下,所以 cachedReportDir 的值需

为一个可读写的访问路径。

根据上面 reportconfig.xml 的例子和属性说明配置好这个配置文件后,集群缓存同步的配置就基本完成了,这个就可以在集群服务器中相互跳转的时候取到润乾报表的缓存文件了,也就成功解决了以前采用 session 复制的方法不能取到本地硬盘上缓存的问题。

动态修改报表背景图的绝对路径

10.06.2009 by fengzhou - 0 Comment - 0
Posted in java报表相关

在制作报表中,背景图的用途很广泛,可以用于套打时的底图描绘,也可以用于背景水印等等。润乾报表提供了两种方式为报表设置背景图,包括自定义类方式和URL方式。当用户在报表中使用的背景图是自己写的一个Java类画的图时,可使用自定义类方式;当用户在报表中使用的背景图是一个图片文件时,可使用URL方式。其中URL方式中的URL可以是绝对路径名,也可以是相对路径名。当URL是绝对路径名时,润乾报表还提供了使用api代码动态修改报表背景图的绝对路径的方法,下面将通过一个小例子简单介绍一下该方法。

首先,创建一个内建数据集,建立一个员工基本信息表,设置背景图片属性,如下

设置背景图_.png

报表设计效果如下

runqian.PNG

报表发布后的效果如下

runqian_1.png

然后,写一个java类Application,在该类中使用如下方法实现动态修改绝对路径,代码如下

public static void run() throws Exception {

String reportFile = “D:\\test\\test.raq”; // 报表文件
String lisenseFile = “E://110//workspace//helloworld//WebRoot//WEB-INF//classes//Server2009-07-31V4.0Windows.lic”;//授权文件

// 第一步,读取报表模板并设置授权文件
ReportDefine rd = (ReportDefine) ReportUtils.read( reportFile );
ExtCellSet.setLicenseFileName(lisenseFile);

// 第二步,修改背景图
BackGraphConfig bgc=rd.getBackGraphConfig();
String picUrl1=bgc.getURLOrClassName();
Byte type=bgc.getType();
System.out.println(”====背景图的当前路径为:”+picUrl1);
if(type==0) //报表背景图的配置类型分为url路径和自定义类,当返回值为0时表示配置类型为url路径
{
String picUrl2=”D:\\test\\1.JPG”;
bgc.setURLOrClassName(picUrl2);
rd.setBackGraphConfig(bgc);
}
String picUrl3=bgc.getURLOrClassName();
System.out.println(”背景图修改后路径为:”+picUrl3);
ReportUtils.write(reportFile, rd);//报表回存
Context context = new Context();
Engine enging = new Engine(rd, context);
IReport iReport = enging.calc();

// 第三步,通过JFrame 查看报表效果
CSReport csReport = new CSReport(iReport);
JFrame jf = new JFrame(”润乾报表”);
try {
jf.getContentPane().add(csReport.getDisplayPane());
} catch (Throwable e) {
e.printStackTrace();
}
jf.setSize(600, 400);
jf.setLocation(200, 100);

}

在Application类中写个主函数调用一下该方法,如下

public static void main(String[] args){
try {
Application.run();
} catch (Exception e) {
e.printStackTrace();
}
}

运行程序后就可以看到动态修改报表背景图的绝对路径后的效果。

查看发布后的报表,效果如下

2runqian_2.png

这样就实现了动态修改报表背景图的绝对路径,从而动态修改了报表的背景图片。