The Brazilian National Healthcare System, called the largest enterprise Java application ever built, has brought a valuable level of automation to the public healthcare system as well as the people of Brazil.
Brazil is one of the few nations in the world with a completely free public healthcare system. Like any public service of that magnitude, many operational problems exist. Parts of the system were largely paper based and very little integration was available between existing IT systems between the government and local health care providers.
With these problems in mind, the building of a health care automation system called Siga Saude was commissioned. The system is designed to handle all aspects one could imagine in a public healthcare information system including scheduling and inventory management of doctors and equipment, billing, disease tracking, reporting/auditing, regulatory compliance, and security access control.This case study
takes a look at the architecture, solutions, lessons learned and future directions for the project.
The application is based on EJB 2.1 + Struts and utilizes a well defined layered architecture using established EJB design patterns including data transfer objects, session facade, service locator, and business delegates. Development was done in Eclipse, testing and deployment done on the JBoss application server. A rules engine (Drools) was used in certain areas, and the application is currently deployed non-clustered on a Dual Xeon 3.1 server with 4 gigs RAM, on Linux, running JBoss 3.2.7.
One significant lesson learned was that code generation is essential to a system like this.
Code generation was a key success factor on this project. It gave more productivity to the developers and made the code homogenous. Having an homogeneous code is very important when you have 50 developers working in independent teams, all of them sharing the same basic components. Using XDoclet, however, after a while, had an unwanted side effect, since the generation time took too long. Moving to annotations allowed to decrease generation time and still keep the benefits of code generation.
Other topics covered include:
- The implementation process of certain important use cases like scheduling appointments
- Using annotations to solve XDoclet drawbacks
- How a rules engine simplified business logic
- Future testing outside of the container
- Moving to a POJO-based architecture
- How AJAX simplified UI workflows
What do you take away from this case study? Have you implemented any of these processes yourselves? How would you have done what the Brazilian team have done?