Bioinformatics领域的Java应用

阅读更多

对于做Bioinformatics领域的开发工作的朋友,有相当一部分有着Java平台的技术水平。 那么,Java究竟都有哪些具体应用呢? 这里笔者将结合自己的实际工作,小谈一点想法。


第一部分

单就Java语言来讲,它可以开发各种类型的程序,甚至包括较底层的驱动程序开发,以及移动设备上的各种程序开发、嵌入式开发,也许这正是java本身的优势或者说特点吧。 那么,对于bioinformatics领域,我们可能涉及到的java程序大概有如下几种:

1 Java Application :这个名称其实只有java开发者明白它的界定,还要具体再分:

 (1 以.jar 形式分发的java app程序,这种是最常见的了,只要使用java -jar filename.jar [arguments] 即可执行;也许这就是java中的cli程序?。。。

 (2 GUI程序:很常见,带有GUI界面的java程序,最大特点就是平台无关,所谓到哪都会讲方言,界面风格与OS一致;GUI目前还可以分很几种: AWT,SWING,SWT,其中的SWT可不只局限于GUI程序,它可以构建更加复杂的信息系统。

 (3 .jnlp 程序:其实这只是java app的另一种部署方式,避免了客户端更新程序等等,直接使用SUN的jws就可以管理和更新。

 

2 Java Web Application :这种类型占有很大的比重;从一个小型的可视化应用,到包含而不限于大数据集的存储、检索、统计、管理等等操作的复杂应用系统,Java都可以胜任;而且,不同于电信和金融行业,Bioinformatics领域的数据有着自己的特点和性质;虽然由于历史原因等,在Bioinformatics领域,perl所构建的复杂web application不在少数;但是,在当今的环境下,系统的集成、互联互通、重构等等需求越来越多,perl在这些方面的表现相比就没有Java那么优秀了。 

如果说要对这种类型再具体划分子类,那么我也只能粗略地分为简单型和复杂型。简单型比如基于一个小物种的基因组注释数据而构建的web应用,它其实就是把数据存储与后台的数据库,然后在web前端通过图形和表格进行可视化而已,并且后台的数据更新频率非常低,甚至根本不会更新。 复杂型,比如类似ensembl,EBI的webservice等等,Java平台是开发此类应用的首选。


3 API级别 : 最典型的大家都熟悉 - BioJava ,BioXXX之一;其实除此以外,还有很多民间开发的API,只不过由于没有一个组织来收集整理并管理这些资源,所以他们也只是散落与民间而已。

 

4 如果说还有一类,那么就是java的applet了 ;这是java独有的;在web页面,有时候它能帮你解决或者避开一个复杂的问题; 就像如今连facebook的图片上传组建都是java applet构建的。 为什么? 因为今天,java 就好比一个记事本一样地安装在各种平台的系统中,所以我们不用担心,更何况主流的浏览器都有支持,而且默认的选项都是选中“允许java”的。至于最终用户,他们会管你java不java么? 不会,他们只关心自己的照片到底能不能方便地上传。所以只要我们对applet签名,并且用户允许,那么我们就可以轻松地访问本地文件系统。

 

第二部分

上一部分所做的分类,其实是按照java程序本身的结构特点划分的。 综观所有Bioinformatics领域的java程序,几乎有90%的程序都是用来做一件事 --- 可视化,这也符合Bioinformatics领域的特点:复杂而抽象的字符或者数字。所以从数据可视化的角度,Java程序只是一种可选的解决方案。比如要得到一个svg图形,我们可以选择Batik,但这一般是在我们对java熟练,而对svg不够熟练的前提下;如果我们对svg熟知,那么我们更愿意选择perl,python,甚至shell去做这件事。

 

下面列举两个常见的java程序实例:

1 使用java来绘制系统发育树: 简单说,这就是把一个数据结构为树类型的数据进行可视化,所以只要我们对树这种数据结构熟练,那么实现起来很简单. 基本思路是,先把原始数据构建成java的树类型数据结构;然后确定树上的各个节点在画布上的俄坐标,做法是横纵坐标分别计算,先序遍历计算得到横坐标,中序遍历计算得到纵坐标;最后绘制图形。

 

2 使用java来构建一个简单的数据库应用: 在Bioinformatics领域,这样的需求我们一般选择MySQL, Apache+ Tomcat / JBoss。首先需要分析原始数据集的特点和实体之间的关系,确定好数据库的schema;然后确定查询或者可视化的需求,弄清楚哪些数据需要显示,哪些需求统计,哪些是关联查询的,哪些是第一级,等等,确定好所有的查询用例后,基本上,就可以开始底层的编码;同时确定web前端的设计和实现;最后整合所有,做功能测试,集成测试等。

 

我们可以看出,以上两个程序的规模属于中小型,复杂度也是中小,但就是这样的程序却有着很多很多的需求;至于更加复杂的大型应用,那一定是花了money的,我想谁都不会很轻易地简述出来。

 

除此以外,我还要强调两种特别的类型:

(1 SWT ,基于eclipse的RCP程序,主要原因是它适合构建workshop之类的程序。而在Bioinformatics领域,这样的需求也有着不小的比重。 不过已经有开发者在开发开源的Bioinformatics领域基于SWT的workshop程序了。

 

(2 基于ajax的webapp : 尤其适用于数据可视化的web application; 一个页面中我们需要绘制好几张图,如果每次操作都刷新整个页面,那么性能上以及用户友好性上都要打折扣,所以ajax是首选。 我们只需要刷新最需要那张和那几张图。

而且,这样的应用有一个特点是,服务器端的程序你可以采用任何语言来实现,只要它处理的是相应的get或者post请求,返回我们期望的JSON格式的数据就好。 这样的例子有venter的基因组浏览器。 试想,如果我们把前台的图形部分能完全地独立出来,那么是不是就可以做成一个产品呢? 用户只要提供自己的数据源并且编写自己的业务逻辑,然后返回需要可视化的JSON数据,使用我们的前端就可以浏览。。。也许这是个好主意!

 

 

总结

此篇小文简述了Bioinformatics领域的java程序的基本类型和特点,并简单分析了各种类型的基本应用方面,并以实例说明了为何Java适合。

 

 

关于作者

GentleYang ,Developer for Bioinformatics

联系地址: 中国 深圳

 

你可能感兴趣的:(Java,应用服务器,数据结构,Web,中国电信)