Web Framework

Key Requirements of the core OpenMRS Web Framework

  • Open Source: prefer something open source, not just free for open source use, since we want to encourage innovation atop this framework, including commercial entities that might want to build on our efforts

  • Compatible Licensing: a copy-left license (like GPL) would conflict with the OPL and might preclude commercial entities from getting involved

  • Customizable: Should be able to customize content, functionality, themes/layouts/logos/etc without programming. Should be able to add new "plugin" content without modifying the core web application.

  • Personalizable: Configure role-based or permission-based pages (home pages, etc) and deliver varying content appropriate for a user's role

  • Developer friendly: Easy to develop new functionality; promote reusablity; Provide built-in, common features - validation, error handling, ajax support, widget library, etc.

  • Productive: Things like eliminating the need for re-compiling and most server restarts when developing.

Popular: We want to build on something that has the lion's share of the market (like Spring & Hibernate). When the next new thing comes along, we want to be one of thousands of groups that are making the switch from*this framework to the new one.

  • Low Bandwidth: Must be able to operate well in low-bandwidth / high-latency settings

  • Libraries: Would be nice to overlap and/or play well with, for example, jQuery and DWR

  • Data Driven Forms: should be a step toward form development without programming

Technology Evaluation

MVC / Component Frameworks

Tapestry 5

Grails (Groovy on Rails)

Wicket

JSF 2.0 (JavaServerFaces 2.0)

  • Componentized (lots of pre-built components available)

  • Can be combined with Spring Web Flow and other frameworks

  • Swing-like - smaller learning curve for Swing developers

  • Lots of developers and popular

  • Opensource and standardized in JavaEE 5

Spring web

Struts 2.0 / WebWork

GWT (Google Web Toolkit)

Portals

Liferay

Stringbeans

Apache Jetspeed2

Custom portal implementation using Apache Pluto

Conclusions / Strategy

TBD