从php 调用BIRT 报表
BIRT 最近公布了一个从php 调用birt 报表的示例,从而使php 开发环境具备了一个高水准的报表框架,后台执行引擎还是java 的,使用了php-java-bridge 这样一个开源框架,一直都听说各种基于JVM 的动态语言框架如雨后竹笋出现,还有什么java 与.net 互通的成功案例,从来都不知道java 可以和php 互通的(自己孤陋寡闻而已),而这个php-java-bridge 通过php 引擎向java web 容器(tomcat 等) 发送XML-RPC 请求,所以需要你的环境能够即支持java web 环境又支持php 开发环境. 一般典型情况是这样:
你的php 仍然使用apache 作为web server , 使用端口80, 它是默认的端口是由Apache使用。
你的tomcat 使用8080 端口作为java web container 来处理实际的BIRT 报表任务. 并且你的tomcat 里面已经部署了它提供的JavaBridge.war 应用, 里面默认是包含BIRT Runtime Engine 2.2.2 的, 里面跟BIRT Runtime 基本都一样,除了以前的jsp 文件现在变成了php 文件.
当有一个请求到达你的php 环境调用报表的时候, 它就会请求后台的tomcat 来实际执行这个报表,并把结果返回给php 这边. 在php 里面使用如下的代码:
<?php
define ("JAVA_HOSTS", "127.0.0.1:8080");
define ("JAVA_SERVLET", "/JavaBridge/JavaBridge.phpjavabridge");
require_once("java/Java.inc");
echo java("java.lang.System")->getProperties();
?>
当然,如果你喜欢在tomcat 里面开发php 程序,我们也不拦着你.
从上面代码看的出来,可以是多php 程序调用同一个tomcat 实例,也就是说多个普通的php + apache 的环境连接一台java+tomat 的机器就够了.
兼容性
这种从php 代码里面调用BIRT 报表的方式肯定是不会有100% 的兼容性的,不过目前对于常用的BIRT 功能都已经提供了对应的php class ,常用的BIRT 功能都是支持的:HTML ,Excel ,PDF ,WORD 的输出,图片的生成,library 的使用,drill-through , javascript 的事件等。
目前已知的是它不包括那个birt open source viewer , 可以简单理解为那个长得不太好看的导航条部分,它主要提供运行参数的UI , TOC 的控制, 导出数据 和打印的功能,因为那个部分是jsp + prototype.js 做的,如果你需要做参数页面的话, 你要自己用html + php 脚本来做,设置参数就是用
$task->setParameterValue(“Top Count”, new java(“java.lang.Integer”, 6));
这样的语句就可以了.
其他的关于BIRT 功能性上的兼容性还未知,
关于java 方面的兼容性根据php-java-bridge 网站上给出的信息是:支持jsp , jsf 或其他框架,J2EE 后台的容器和apache 的load balance.
性能
BIRT 报表本身的性能是非常快的,使用了这个php-java-bridge 之后,从php 调用BIRT 报表也同样非常的快,根据我自己实际测试的结果是比从java 调用BIRT 快一点点.
从JAVA 调用BIRT 的第一次执行会比较慢,主要是因为要生成Document 文件,第二次或之后的速度就是正常的速度. 一般考虑性能指标都不算第一次的时间。
而这个php 版的BIRT 第一次执行BIRT 报表的时候就会非常快,跟第二次或之后的速度差不多,而即使是第二次执行,php 版的还是比java 版的要快一点点,0.5秒左右.
应用
我对php 开发语言是完全不懂的,不过从google 出来的结果看,好像php 没有一个很强力的报表框架 , 大多数报表需求还是使用比较低层的API , (从http://www.oschina.net/project/lang/22?tag=133 了解到的),如果说的不对还请高手指出.
这次从Actuate 放出的php 版的BIRT 在很大层度上强化了php 的报表分析需求,Zend 跟Actuate 有合作开发一个商业版的php birt 框架,具体比这个开源版的强在哪些方面还不知道,我估计是有一个php 版的Actuate BIRT Viewer , (就是那个有动态交互功能的商业版) . 不过由于这毕竟不是纯php 版,而且php 开发人员也不一定会很想用一个java 环境的报表框架,尤其很重要的是企业在关键应用上使用这种php + java 的混合模式应该还是持保守态度(我猜的,除非功能需求真的很重要), 至于php 的传统领域WEB 上,应该前台还是比较少,后台是最大的应用领域,毕竟后台的统计分析需求还是比较多的, 而且服务器的环境容易控制,应该还是会受到一定程度支持的. 无论像是论坛,博客,在线社区等等这些php 的应用后台一般都是在公司内部使用,统计分析需求还是会很容易选择这项技术的.
另外一个我猜测的应用领域应该是服务器管理监控,像是不少的服务器监控领域都是使用的php , python , perl 之类的语言开发的,而且服务器管理监控的数据分析需求会远大于语言的限制, 图表,下转,动态性都是这类服务器管理领域重要的需求,尤其是一些大的互联网公司要开发满足自己管理需求的特定服务器管理软件,估计这种需求会远大于语言本身的限制.
不过要求php 开发人员知道有这样一个可选项估计Actuate 公司还有很长的路要走. php 程序员和报表开发员会需要更多的综合性知识. 至于应用怎么样,还需要时间去检验.
参考资料:
http://www.theserverside.com/tt/articles/article.tss?l=IntegratingBIRTwithPHP
Jason Weathersby 在TSS 上发表的关于怎样在php 中集成BIRT 的详细文章.
http://www.birt-exchange.com/devshare/deploying-birt-reports/743-calling-birt-from-php/#description
下载它提供的集成包,一个war 文件,部署在tomcat 里面就可以用了, 里面提供了php 的文件和BIRT 报表.
注意看具体文档.
http://php-java-bridge.sourceforge.net/pjb/
php-java-bridge 的主页.