Versions Compared


  • This line was added.
  • This line was removed.
  • Formatting was changed.


Table of Contents


This is for new Mifos developers. If you have experience with computer science, Java/J2EE Web applications, testing, databases, etc. but are learning Mifos for the first time, this guide is for you!


This is not a detailed, comprehensive guide. Instead, it is made to point out key concepts and areas of Mifos, leading you to further study. Think of it as an index into the most important parts of Mifos.

Core functionalities aligned with domain

loans, savings, clients

see Product Features for overview of loans, savings and client functionality


Savings and Savings products

Cross-cutting functionality

Transaction Management

Mifos has legacy transaction manager org.mifos.framework.hibernate.helper.HibernateUtil, and some new code which uses spring based declarative transactions manager /mifos-appdomain/src/main/resources/org/mifos/config/resources/persistenceContext.xml.


Audit Logging

... (mapped to change_log_detail table)


Legacy code in Mifos uses a custom security mechanism based on RolesAndPermissions* classes.  Handling of security is being transitioned to Spring Security which has been configured to run on top of the legacy security system.  Spring security configuration can be found in application/src/main/webapp/WEB-INF/applicationContextSecurity.xml.


Application Security in Mifos

Spring Security Spike

Lookup Values

Legacy code in Mifos make use of LookupEntity, LookupValueEntity, LookupValueLocaleEntity, and LookupLabelEntity. Together these objects were supposed to fill multiple purposes including supporting static lists of localizable values, user definable lists of localizable values, user customizable labels.

More detail can be found on the LookupValueBackground page.


Mifos has many configuration settings. See for the authoritative guide.

Trapdoor settings

Some configuration settings may only be changed once! These settings must be carefully considered before entering data into a new Mifos installation.

LSIM, GLIM, locales in the db

current refactorings in progress

UI conversion

Presentation layer code is being migrated from Struts 1.x/JSP to SpringMVC/Webflow/Freemarker. The goal is to remove all Struts/JSP code and replace it with SpringMVC/Webflow/Freemarker. As such any new functionality added should be implemented as SpringMVC/Webflow/Freemarker.

Service facades

Legacy Mifos code has business logic scattered through the code all the way up to the presentation layer including action classes and JSP pages. The goal is to remove business logic from the presentation layer and have it encapsulated inside Service Facades and Services.

build/developer details/limitations

Most developers use Eclipse, but it is certainly possible to use other IDEs


Time to run acceptance tests

Acceptance tests hit a running instance of Mifos, clicking through the app and filling out forms as users would.


ci server (birch) running in Seattle office

See Hudson Continuous Integration.

internal resources

the vault

Sensitive information (like passwords) is only shared using strong encryption. Ask an existing Mifos administrator for access to the vault.

Admin contacts: Adam Monsen, Van Mittal-Henkle, Sumit Shah, Udai Gupta

internal confluence wiki

  • runs on a server in the Seattle office
  • admin contacts: Ed Cable, Scott Falaschi, Adam Monsen, Sumit Shah, Udai Gupta


  • Mifos admins are notified of outages via email.
  • Outage notifications are sent to the mifos administrators mailing list.
  • OpenNMS runs on a server called "cloudboss". Ask an admin contact for access.
  • Monitoring Servers With OpenNMS
  • Admin contacts: Adam Monsen, Van Mittal-Henkle, Sumit Shah, Udai Gupta

Mifos administrators mailing list


  • We regularly remotely backup data on all machines.
  • BackupPC runs on a server called "cloudboss". Ask an admin contact for access.
  • /wiki/spaces/MIFOSADMIN/pages/8552796 (← must be logged in to view)

Testing infrastructure

Unit and Integration tests in Mifos uses Junit 4.5+ framework and only Acceptance Tests (acceptanceTests module) uses TestNG 1.5+ framework.


- Mockito

Unit Testing

Unit Tests

Integration Testing

Integration Tests follows a naming convention *IntegrationTest

legacy *StrutsTest

Struts tests are legacy tests related to struts framework and supposed to be removed once the UI Conversion in G is completed.

Acceptance Tests

Selenium is used to drive the user interface for end-to-end testing. Test datasets are maintained to avoid lots of boilerplate application setup for each test. 


Running Acceptance Tests

Writing Acceptance Tests

Page Objects

Acceptance Tests uses Page Objects concept with Selenium.


legacy BIRT integration

BIRT Reports in Mifos is used for providing basic reporting capabilities. We have been trying to move to Pentaho since the start of Develop Data Warehouse Strategy.


- Replacing

Pentaho server/reports

Installing Mifos BI (Pentaho)

Mifos BI

Accounting Integration

/mifos-accounting module serves the purpose of getting accounting information from Mifos. Current integration was build to support Tally ERP 9.


Batch jobs

Mifos uses Spring batch / Quartz for batch jobs which are scheduled bulk processing when system is not in use (usually midnight)

meeting schedule generation

The notion of schedules are used for loans, savings and customer-loan officer meetings in mifos.


NOTE: There is a bug in mifos whereby if you are running with LSIM on, the loan accounts schedules are changed when they shouldnt be.

Database Migration/Upgrades

Mifos started using Liquibase ( since Mifos 2.1, Database Upgrades give good overview about how changes to database are added as Liquibase scripts.


Read Also: Database Development, Data Migration - Historic data - no updates to be made, Database Neutrality