首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

小弟我的处女作:关于BIRT_2_3_0_RC1源代码构建后的一个有关问题

2012-10-31 
我的处女作:关于BIRT_2_3_0_RC1源代码构建后的一个问题最近要做一个图形编辑器,弄了N久也没弄出来,后来看

我的处女作:关于BIRT_2_3_0_RC1源代码构建后的一个问题

最近要做一个图形编辑器,弄了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_2_3_0_RC1源代码构建后的一个有关问题

因为birt在解析js脚本的时候用到了rhino,一个在js里可以调用java类的框架,这里有动态生成.class的java文件,也值得看一看,虽然没看懂,呵呵,看懂了也会和大家一起交流,好的东西就要大家一起分享嘛!这是我写的第一个博客,希望大家对付看,也希望提出批评等宝贵意见,互相学习互相进步!

2 楼 whydayu 2008-10-09  
看了你的帖子有个问题请教,我是从CVS上下载的birt2.3.0的源码,但是编译的时候却总是编译不过去,能否指教一下具体的编译过程!很急,谢谢!我的联系方式:whydayu@yahoo.com.cn

热点排行