最近要做一个图形编辑器,弄了N久也没弄出来,后来看到可以根据birt的报表设计器改,改动是巨大的,其实说是改,还不如说拿它当例子,好熟悉一下gef,感觉收获很大,结合八进制的blog,看起来就不那么费劲了,但是在建立脚本数据库的时候总出现问题,改来改去,改来改去,搜索无数次咋就不好使呢,又debug了3天,终于发现了,事实上是好使的,因为自己构建出来的报表设计器比发布出来的插件对一页,也就是正常的报表设计器是包含5个页的多页编辑器,而我自己构建出来的是6个!预览按正常套路是第五个页(Preview),而我每次都点第六个页(New Preview Prototype),所以总抛异常(由ClassNotFoundException引起的),偶尔发现了这个问题,也就发现用preview好使,所以就继续debug,发现原来是类加载器在搞鬼,两个地方调用的代码是一样的,不过因为用了不同的类加载器实例(类型也不同,Preview用的是org.eclipse.birt.report.viewer.utilities.ReloadableClassLoader,New Preview Prototype用的是org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader),因为如果报表设计器里需要用脚本数据库的话,需要把引用的类(这里是编译后的.class文件)放到org.eclipse.virt.report.viewer插件的/birt/WEB-INF/classes/目录下,记住别忘了,把对应的包也加上,比如类的全名是a.b.c,那么c.class应该放到/birt/WEB-INF/classes/a/b/下。这样就不会出错了!因为通过ReloadableClassLoader类加载器可以加载这个目录下的类文件。
现在回到我的问题上,由于对类加载器知道的非常少,就不多说了,给和我遇到同样问题的人提供一个解决方案,如果想让New Preview Prototype好用,需要把脚本数据库中的类文件(.class文件)再复制一份到org.eclipse.birt.report.designer.ui.preview.static_html插件里,(本来以为这里会有可见性的问题,原来以为需要改MANIFEST.MF的Export-Package,刚才测试了一下没影响,看来Export-Package可见性是真对别的插件的,而不是针对osgi平台的,哈哈,正是这么回事!笨了!),还有一处改动就是在org.eclipse.birt.report.designer.ui.preview.static_html插件的org.eclipse.birt.report.designer.ui.viewer.StaticHTMLViewer类的内部类HyperlinkEngineConfig的构造函数最后加上如下三行代码:
ClassLoader appClassLoader = StaticHTMLViewer.class.getClassLoader( );
getAppContext( ).put(
EngineConstants.APPCONTEXT_CLASSLOADER_KEY, appClassLoader );
这里的appClassLoader也是org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader的对象,但这个对象是加载这个插件的类加载器,所以加载脚本数据库的类也就没问题了,因为脚本数据库的类也被放到了这个这个插件里(刚才那部)
我上面所说的插件在我这里其实就是工程,因为我是自己build的。
语文学的不好,不知道会不会对大家有帮助!这段时间我会把我遇到的别的问题和大家一起分享的,因为很多问题都是看别人的文章解决的:)
因为birt在解析js脚本的时候用到了rhino,一个在js里可以调用java类的框架,这里有动态生成.class的java文件,也值得看一看,虽然没看懂,呵呵,看懂了也会和大家一起交流,好的东西就要大家一起分享嘛!这是我写的第一个博客,希望大家对付看,也希望提出批评等宝贵意见,互相学习互相进步!
分享到:
相关推荐
birt 3.7 源代码,取自dev.eclipse.org 下的source BIRT_3_7_0_Release_201106091010目录下的分支内容。
birt_api.CHM
birt_a_field_guide_to_reporting_2nd_edition.6789311422
学习百灵报表的童鞋们推荐必看,使用pojo作为数据源
birt_api.rar birt帮助文档
Birt是Eclipse的项目,用来开发报表。BirtViewer是Birt查看报表的Web程序。这个资源是BirtViewer的源代码,供学习使用。
开源报表系统,需要两个分卷birt-2_2_2.part1与birt-2_2_2.part2
BIRT 实现event hander 接口,使用java代码重写open,fetch,close代码实现data set。
BIRT_报表-整个报表的安装使用及精讲
BIRT(Business Intelligence and Reporting Tools), 是为 Web 应用程序开发的基于 Eclipse 的开源报表系统,特别之处在于它...BIRT 有两个主要组件:基于 Eclipse 的报表设计器,以及部署到应用服务器上的运行时组件。
Birt基础(report报表简单设计)
里面包含了birt所有的api是项目开发所不可或缺的工具
资源分类:Python库 所属语言:Python 资源全名:birt_gd-0.1.35-py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
资源分类:Python库 所属语言:Python 资源全名:birt_gd-0.1.17-py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
最近项目上做报表要用到BIRT,搞了一些资料大家共享
birt_web解压密码。希望对你有帮助
开源报表系统,需要两个分卷birt-2_2_2.part1与birt-2_2_2.part2
eclipse birt 开源的报表工具,这是用birt 的些经验之谈,希望能帮助一些初学者