第十六章 BIRT疑难杂惑清理

标签: 十六 birt | 发表时间:2013-01-21 07:20 | 作者:birtbird
出处:http://blog.csdn.net

第十四十五章还在书写中,先就目前BIRT比较集中的一些疑难杂惑进行解决。

问题一:把runtime包中自带的birt.war发布到Tomcat6上,运行后,首页面可以显示,但当点击"

View Example "时,加载报表就报错.错误内容如下:


或者在运行过程中出现:Caused by: java.lang.OutOfMemoryError: PermGen space

问题原因:java.lang.OutOfMemoryError: PermGen space PermGen space的全称是Permanent Generation space,是指内存的永久保存区域, 这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGen space中, 它和存放类实例(Instance)的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对 PermGen space进行清理,所以如果你的应用中有很多CLASS的话,就很可能出现PermGen space错误, 这种错误常见在web服务器对JSP进行pre compile的时候。如果你的WEB APP下都用了大量的第三方jar, 其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了。

解决方法: 手动设置MaxPermSize大小修改TOMCAT_HOME/bin/catalina.sh 在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行: JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128m 或者set JAVA_OPTS=-Xms512m -Xmx1024m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=256m

最佳实践:尽量用公用库,用户库只保留必须的极简化包。


问题二:集群环境访问报表出现birt the viewing session is not avaliable or has expired

问题描述:

http://11.23.26.3:8084/biReport/frameset?__report=VIP_kefu.rptdesign&__masterpage=true&__format=html&__parameterpage=true&__toolbar=true&__showtitle=false

我采用上面的url,在一个项目中访问另一个项目birtReport中的birt报表,发生错误:

birt the viewing session is not avaliable or has expired

问题原因:session 失效

BIRT源码中session来自如下这段代码:

public static final String GENERAL_ERROR_NO_VIEWING_SESSION = "birt.viewer.error.noviewingsession";

birt.viewer.error.noviewingsession=The viewing session is not available or has expired.

ViewingSessionUtil.getSession( request );

如果在WEB-INF\viewer.properties 进行了如下的设置

# [VIEWING SESSION CONFIGURATION]
# The BIRT viewing session is a sub-session of the HTTP session.
# An HTTP session can have multiple BIRT viewing sessions.
# Each time a new viewer is opened, a new viewing session is created. 
# The following parameters are used to configure the viewing session
# management.
# If the matching HTTP session expires, all the viewing sessions
# attached to it will expire as well.

# Timeout value in seconds after which a viewing session will expire.
# The value 0 means that a session will never expire, and the cached files
# will never be cleant unless the belonging HTTP session expires.
viewer.session.timeout=1800
# [VIEWING SESSION CONFIGURATION]
# The BIRT viewing session is a sub-session of the HTTP session.
# An HTTP session can have multiple BIRT viewing sessions.
# Each time a new viewer is opened, a new viewing session is created. 
# The following parameters are used to configure the viewing session
# management.
# If the matching HTTP session expires, all the viewing sessions
# attached to it will expire as well.
# Timeout value in seconds after which a viewing session will expire.
# The value 0 means that a session will never expire, and the cached files
# will never be cleant unless the belonging HTTP session expires.
viewer.session.timeout=1800
# Timeout value in seconds after which a viewing session will expire.
# The value 0 means that a session will never expire, and the cached files
# will never be cleant unless the belonging HTTP session expires.
viewer.session.timeout=1800

在tomcat或者weblogic中也设置了session timeout时间,依然不能解决这个问题,

那么需要设置你的IE,用cookie来保持session

方法如下:

IE - Intetnet 选项 - 隐私 - 设置:这里有个拉动条,可以设置IE的cookie。将它调到“低”或者“最低”,可以达到解决问题的目的。

但客户通常是懒惰的,这个时候还有一种方案,用hostname代替前面的IP来访问报表
http://bi2.query.com:8084/biReport/frameset?__report=VIP_kefu.rptdesign&__masterpage=true&__format=html&__parameterpage=true&__toolbar=true&__showtitle=false


问题三:javascript出现失效,自定义的javascript无法访问

解决方案:设置默认的render格式为html,注意在designer中的javascript路径和tomcat的javascript路径是不同的,尽量配置使用相对路径

 问题四:怎么自定义打印

问题描述:想不使用birtviewer提供的打印工具栏,自己在页面上或者定义一个工具栏,那么可以参考birtviewer提供的jsp页面自己写一份,也可以利用动态文本在html代码中书写如下内容的鼠标触发事件:

<script>
self.moveTo(622,722);
self.resizeTo(1,1);
document.execCommand('print','true','true');
window.opener="anyone";
window.close();
</script>
window.open(path + '/output?__report=/report/oms/report.rptdesign&orderId=' + orderId);

问题五:导出Excel出现空行

这是java类库在导出microsoft excel时出现的错误,根源不在BIRT,而在microsoft office的闭源,导致java excel类库不完善。

解决方案,先用html格式的render打印;在制作报表的时候,分组信息尽量不要单独成一行,表头表尾,单元格头尾尽量去掉。

后面还会继续就BIRT问题提供解决方案。


作者:birtbird 发表于2013-1-21 15:20:57 原文链接
阅读:10 评论:0 查看评论

相关 [十六 birt] 推荐:

第十六章 BIRT疑难杂惑清理

- - CSDN博客推荐文章
第十四十五章还在书写中,先就目前BIRT比较集中的一些疑难杂惑进行解决. 问题一:把runtime包中自带的birt.war发布到Tomcat6上,运行后,首页面可以显示,但当点击". View Example "时,加载报表就报错.错误内容如下:. 或者在运行过程中出现:Caused by: java.lang.OutOfMemoryError: PermGen space.

birt动态SQL

- - ITeye博客
birt动态SQL实现有三种方式:拼接SQL、绑定变量和让应用程序拼接,birt得到返回结果集方式. 在数据集中写SQL,如下:. 选中数据集,点script方式,在beforeOpen事件中写如下SQL:. 然后就可以了,当然,也可以不写第一步,直接所有的SQL都在beforeOpen中拼接. 但是,拼接SQL方式不仅复杂容易错,还会导致SQL注入风险.

birt在页面展现

- - 行业应用 - ITeye博客
    <input type="button" value="保存成word" onclick="javaScript:expDoc();"/>  .     <input type="button" value="保存成Excel" onclick="javaScript:expExcel();"/>  .

BIRT表格隔行添加颜色

- - Web前端 - ITeye博客
选择table中的details,进入script页面, onprepare事件中声明   count = 0(注意不能有var);. 2.oncreate时间中写:. 在table中添加一个header行,插入text,选择HTML,在编辑界面中写:. 已有 0 人发表留言,猛击->> 这里<<-参与讨论.

解决birt分组后,excel类型文件会多一行空白行的问题

- - 开源软件 - ITeye博客
    通过birt下载含有分组的报表后,会发现,在分组字段的后面会多出一行空白行,看上去很丑,在查阅很多资料后,才有现在的解决方法.     那就是把分组的那一行去掉,将分组的字段融合进详情那一行. 通过脚本判断,当前这一行的分组的数据是否等于上一行的数据. 比如我这有一张报表,按照订单号分组显示.

十六部老电影,十六句画外音(下)

- JR - 有意思吧
也许,对于一部经典电影,千言万语也无法去言说. 既是如此,那就权且将浓缩的这句话当作是电影的画外之音吧. (题外话:在发高仓健那文时发现此文的“下”还悬着,遂翻了翻上篇,是6.26发的,至今已过四十多天,如是,这些老电影就这样又老了四十多天,但经典依旧,而这些话也就更显的有感触. 这次附上每部电影的海报,只是大小不一,辛苦小编了.

第七百四十六篇•驴友

- 潜纹 - 马未都的BLOG
    “驴友”一词是个发明,表明户外旅行者自嘲的良好心态. 现在日子过好了,翻山越岭自讨些苦吃,一来锻炼身体,二来磨练意志,再加强些团结合......>>点击查看新浪博客原文.

二十六个英文字母的起源

- zhang - 看中国
如同汉字起源于象形,英语字母表中的每个字母一开始都是描摹某种动物或物体形状的图画,而这些图画最后演变为符号. 但这些符号和原先被描摹之实物的形状几无相似之处. 谁也不能肯定这些象形字母原先究竟代表什么. 我们的解释只能是学者们基于史料作出的有根据的猜测. 一般认为希腊字母乃西方所有字母,包括拉丁字母的始祖.

廉价伏特加的十六种特殊用法

- Aaron Xu - 果壳网 guokr.com - 果壳网
作者:scoochmaroo. 与通常的认识不同,廉价伏特加不仅对贪杯之人和大学新生有用. 除了单纯的饮用之外,它还有许多合理的用途:清洗,烘干,除臭,或者添加一些特殊风味之后再喝. 同那些价格更贵的产品相比,廉价伏特加在这些用途上更为合适. 当然,一柜子的麦克美伏特加比玻璃清洁剂要难以启齿得多,但是省下的花费会让你眉开眼笑,并且这些钱可以花在别的东西上.

幸福家庭的二十六个关键词

- sincerebaby - 5time经典语录网
  美国作家马克·吐温说过:如果可以从80岁开始往下活到18岁,人生肯定会幸福得多. 但这显然不可能,在积极心理学家眼里,我们能做的就是从现在开始,与家人一起快乐活到80岁. 下面的“家庭幸福A—Z原则”不妨学上几招,兴许对你有所启发. “好话”人人都爱听,最好的话当然要留给家人. 家人做顿可口的饭菜、买件漂亮的衣服……都值得夸赞.