Chinook: P2P & Web Services platform for Bioinformatics
I love it when a good P2P project using JXTA comes my way. This time it is Bioinformatics and JXTA. Project Chinook has just graduated from the incubator at Global Education and Learning Community (GELC) of java.net. The project's new home is the GELC research area. Let's take a look at it and talk to the project owner to learn more about what this project is about.
Chinook is a peer-to-peer (P2P) bioinformatics service. The goal of the Chinook platform is to facilitate exchange of analysis techniques within a local community and/or worldwide. Chinook operates by turning command-line applications into services which are broadcast over a virtual network. Currently, there are over 25 analysis services that have been made "Chinook-ready". These range from alignment to regulation prediction algorithms. Furthermore, Chinook is designed to make it extremely easy to add new services.
Chinook clients can be operated from Java, Perl, or within applications like Sockeye. (And soon Pegasys, and OrthoSeq)
I asked the developer(Stephen Montgomery) about how Chinook was built. Here is his colorful and informative response:
Arghhh.... you are also asking me how Chinook was built. Well, for half of it, I ate some hallucinagenic chili peppers and ended up extreme programming in the mexican desert with my spirit guide, Duke. It's all about the test cases, man ;) Anyways....
The best I have for a general overview is the architecture diagram http://www.bcgsc.ca/gc/bomge/chinook/images/chinook-arch.png And then there is a user guide (the latest one comes with the installer)
Basically, for the P2P though, I just have a PeerGroup called Chinook. Under it are two different MSA advertisements (one for web services implementations and the other for RMI implementations). Users pick up the associate MIA for these MSA which has the URI of the server specified (either http://foo:8080/axis/services/ApplicationServerImpl or //foo:1099/ApplicationServerImpl) and then they talk to the server using either web services or RMI. I had to build a bunch of utilities to maintain state of jobs, the size/frequency of uploads and downloads, etc. etc. But everything is configured using XML under the resources directory.
For connecting Perl to Chinook, I just use standard sockets from the client to pass rudimentary messages to and from a client instance between perl modules and then send off the job/process the report.
For services, I am building a wizard to help server peers install new tools (it is about 75% done). And then I will package them with the installer for RMI mode only.