Bindings, Platforms, and Innovation
This presentation focuses on the Internet and separating myth from fact, history from the future, and the mundane from the imaginative. Bob Frankston presents a vision of what could and should be.
Tracking change and innovation in the enterprise software development community
Posted by Werner Schuster on May 23, 2008 05:15 PM
JRuby and JRuby on Rails continue to being adopted by many projects. After Mingle, Oracle Mix or Sun's rewrite of mediacast.sun.com, a new project using JRuby on Rails has surfaced.Collaborative Software Initiative (CSI), the company that brings like-minded organizations together to work on collaborative software at a fraction of the cost, today announced the release of the first open source, web-based infectious disease reporting and management system.
The disease reporting and management system, which is being piloted in Utah, will be adaptable in all 50 states and available under an open source license later this year. It is designed to support local health departments in the early detection and investigation of individual cases and local clusters of communicable diseases, while simultaneously meeting the state and federal needs of outbreak control, disease surveillance and epidemiologic research.
We are about 6 months into an iterative (based on Lean Software Development) two year initial build of the application. So far it is 100% JRuby. Its currently all web application, but we have a very extensive roadmap that includes analytics, a disconnected client, and substantial integration. We are undecided on the technology for analytics, disconnected client, and integration. We'll want to use JRuby and Java as much as possible.
We are currently using Java 6, JRuby 1.1.1 with the following gems:
* Rails 2.0.2
* hpricot
* mechanize
* postgres-pr
We are currently using the following Rails plug-ins:
* auto_complete
* validates_date_time
* model_auto_completer
* haml
* calendar_date_select
* betternestedset
* RAA soundex (actually a library: http://raa.ruby-lang.org/project/soundex/)
We also have a plug-in in development named acts_as_auditable and may spin it out as open source before we open the entire project if it pans out. We are using RSpec and Selenium Grid (also uses RSpec) for testing, and Hudson for Continuous Integration. We are using NetBeans and vim for development.
We are using PostgreSQL for the database. We looked at Solr for full text search, but ultimately favored PostgreSQL Full Text Search as it met our needs and we didn't want to introduce another moving part.
We are currently using Tomcat for our servlet engine. It is working well. We have heard good things about GlassFish and would like to take it for a spin at some point. Warbler has been terrific. Nick Sieger really eased some pain with that (original Goldspike based packaging has now been deprecated). A small contribution we made to the JRuby community was to provide some specific documentation on how to use Warbler with Rails 2 when it first was released in the JRuby wiki. I wrote a blog post on that pointing at it the wiki page and it still gets dozens of hits a day from lots of large companies. I've taken that as a good sign of JRuby uptake
Collaborative Software Initiative (CSI) engages the power of community to build project teams and provides the central project management function for developing Collaborative Software, including development, testing and ongoing support for the code. CSI delivers the software to a broader base of customers under the open source licensing or Software as a Service (SaaS) model. There are currently over 100 participants in our public health community. The community is currently made up of Subject Matter Experts (SMEs) and Developers. The SMEs in this case are epidemiologists, nurses, and medical doctors. There is a core team of 15 SMEs and Developers. 5 members of the Core Team are developers. We also have 2 part time developer contributors. Of the 7 developers, 4.5 are actively writing JRuby. Our senior developers on the project are Ed Copony and Pete Lacey. Plug: we are looking for another core developer.
At the end of the day, developing serious software is really hard even under ideal situations like ours. We hired known performers for the development team. For better or worse, our experience with JRuby, Ruby, and Rails wasn't terribly deep although we had some. Ross Cooperman, the leader of another Collaborative Software Initiative project in the Financial Services vertical had deep Ruby and Rails experience with MRI. That was really useful in the early days of the project in steering us in the right direction. So there certainly have been learning curve issues. Ruby and Rails are productive once you conquer the learning curve, but it doesn't come over night. We have had some trying days, but are having far less of them now.
Along the way we've turned to the JRuby mailing lists, wiki, and IRC. The community has been very supportive. When Rails 2.0 first came out I found a bug in Goldspike (the JRuby Rails servlet): http://jira.codehaus.org/browse/JRUBY-1879. We worked out a fix with the community quickly over a weekend. In the days leading up to our first release in March, JRuby 1.1 was about to ship and we found a bug that was going to prevent us from releasing our application with JRuby 1.1 as we had hoped: http://jira.codehaus.org/browse/JRUBY-2314. The JRuby community rallied around it and squashed it and we were able to release with JRuby 1.1.
We chose JRuby over MRI for a number of reasons: * Ease of deployment * Every enterprise on the planet runs Java * Our development team has a Java heritage * Our roadmap for the project is extensive and we didn't believe we could do it with Ruby alone. We wanted our fall back language to be Java rather than C.
More than anything, we have been impressed with the drive of the JRuby community. It is very ambitious and also pragmatic. The core team is comprised of some spectacular developers. The focus seems to be on the right things. Better Java integration, constant performance improvement, and collaborating with the JVM folks on improving the JVM for all dynamic languages. This is all good.
I ran this question past Pete and Ed to get their input as well. Their input has to do with Rails & not JRuby specifically. We'd like to see better multi-model support, possibly via nested has_many throughs and has_one throughs. We'd also like to see more consistent validation support, including rolling up validation errors to the top model. And finally more flexible URLs formats, maybe including URI Templates.
In our experience to date, Rails is holding up. As I mentioned above, JRuby and Rails is a very productive environment, but we are building a large application here - its a ton of work regardless of what technology you are using. We are definitely seeing significant productivity benefits over straight Java or Java and Spring, but Rails is not a silver bullet. That said, there are many innovative tools and ideas in the Ruby community and in Rails that have provided for many moments of delight, even in the midst of tackling sometime frustrating learning curves.
In our experience, JRuby just works. We have yet to have an issue with JRuby vs. MRI compatibility. There are of course some gems that have not been ported to Java yet, but we have not had a need to use them.
We haven't had any problems externally with our partners as its just Java to them. Our current deployment package contains database scripts and a .war file. As we build out the roadmap there will be more moving parts, but certainly no more than a typical JEE application.
Collaborative Software Initiative is a very meritocratic company. At the beginning of the project we debated using Ruby (MRI), Python, Java & Spring, JRuby & Rails & Java, JRuby & Merb & Java, PHP etc. It really came down to momentum. The Ruby language has a lot of momentum. There is a lot of diversity in Ruby virtual machine implementations and collaboration between the language implementors. This is a very good thing in our view. We looked at all the options, assessed the communities, had a healthy debate and then voted. We were very impressed with the trajectory of JRuby. In our view, it was ready for production use. We ultimately decided that given this project and our team, we were most comfortable with JRuby, Rails, and Java. We certainly have nothing against the other options, but we made our choice and are happy with the results so far.
Download the Free Adobe® Flex® Builder 3 Trial
Adobe® Rich Internet Application Project Portal
Give-away eBook – Confessions of an IT Manager
This presentation focuses on the Internet and separating myth from fact, history from the future, and the mundane from the imaginative. Bob Frankston presents a vision of what could and should be.
This article explores the use of JBoss and jBPM to implement design solutions that effectively address the issue of orchestrating long running activities.
This presentation covers the use of graph databases as an optimal solution for data that is difficult to fit in static tables, rapidly evolving data or data that has a lot of optional attributes.
This session introduces Real Options and shows how it can help in running your project. Real Options is a decision-making process that can be used to manage risk.
This article discusses the use of bindings on services and references (including the instance of non-configured bindings) as the means to implement SCA communications in a Web and SOA environment.
After a short introduction to DSLs, Scott Davis plays with the keyboard showing how to approach the creation of a DSL by typing working snippets of Groovy code that get executed.
IBM Rational and InfoQ present, Scaling Agile with C/ALM, an eBook showing organizations how to become “finely tuned software delivery machines” by enabling team integration and scaling.
Amanda Laucher presents a real life enterprise application written in F#. She shows actual code snippets, explaining design decisions and suggesting how to use some of the F# constructs.
No comments
Watch Thread Reply