Makumba is a query-centric technology designed by BEST that helps you to rapidly develop web applications that keep their data in a database (i.e. data driven web applications). It is implemented in Java and offers a JSP tag library and a Java API to the web app developer. The technology has been in use since late 2001, and is being further developed, based on users' experience and requests.

## Latest news

Loading...

## Short introduction

Makumba's main elements are:

- Makumba List, an intuitive way of iterating over data records and which automatically formats the display according to the data type and the subtype.
- Makumba Forms, making it possible to build nested forms without having to worry how the data gets stored or the form gets rendered
- Makumba Data Definitions, a very simple yet powerful abstraction of data types which make data modelling very easy

Makumba is built around OQL (Object Query Language) and we are working on intergrating support for HQL (Hibernate Query Language) as well as Hibernate mappings.

If you are interested in Makumba you might want to take a look to ParaDe, a Parallel Development environment. The only thing you need is an internet connection and a browser to develop your application!

Makumba is open source and the product of the volunteer work of individuals who have a background in the IT Committee of BEST. Everyone is welcome to use and contribute to Makumba.

Description of Makumba around a short example First you describe the data in a text file, called Makumba Data Definition. It contains lines like:
    name= char[30]                   ;Name
    dob= date                        ;Date of birth
    addresses= set                   ;Addresses of the person
    addresses-> city = char[40]      ;City
    addresses-> phone_number = int  ;Phone number
Say you call the above record a "Person". Makumba can use this information to perform the right action when manipulating the database or generating HTML output. Of course, complex applications have more types of data, with pointers from one to the other. Makumba can generate SQL statements that create the needed tables and do read/write operations in a database of your choice. It currently supports MySQL, Informix, DB2, PostgreSQL and ODBC but many other database engines can be easily supported if needed. At the interface level, Makumba can generate html for inserting, editing, viewing and deleting data from the database. You don't have to care about details of HTML forms, parsing the CGI arguments, composing SQL statements etc. All this routine work is done for you, but you can freely build upon it. For instance, following code will show a list of persons and their phone numbers. You mix HTML and Makumba jsp tags to get the desired view.
    <mak:list from="general.Person p, p.addresses a" where="a.city = 'Vienna'">
      <b><mak:value expr="p.name"/></b> was born on <mak:value expr="p.dob"/><br>
      Phone numbers:
      <mak:list from="p.addresses a, a.phone_number n" separator=", ">
        <mak:value expr="n"/>
      </mak:list>
    </mak:list>
Makumba will generate the appropriate queries needed to display the result and optimise them so as to execute the least possible number of queries, in order to increase performance. If you wish to add a new Person to your database, you can just write the following code. It takes care of creating an input form in HTML, and arranges for all necessary database commands to be performed after submit (including the creation of subrecords, in our example a new address object).
    <mak:newForm type="general.Person" name="person" action="listPersons.jsp">
            Name : <mak:input name="name"/> <br>
            Date of birth : <mak:input name="dob"/>
            <mak:addForm object="person" field="addresses">
              Phone number: <mak:input field="phone_number"/>
            </mak:addForm>
    </mak:newForm>
Makumba will choose appropriate input controls for each datatype, as indicated by the data definition above. Behind the HTML pages, developers can optionally write "business logic" in Java that adds certain operations to the basic actions (insert, edit, delete). For this, the full power of Java, enhanced with the Makumba API for e.g. database handling, is available. You can see more in a slightly more detailed example.

So more or less this is it. Makumba was inspired by Lotus Notes, but we found it impossible to use Lotus Notes because of visual programming (rather than plain ext files) and other problems. Other tools (say MS Access) have similar problems, plus we don't want to be dependent on one technology. We want to work with plain text files because it's easy to cooperate at a distance using them. We want everything to be simple for the web app developer. That's why all routine actions are handled by Makumba.

These webpages might be a bit out-of-date, as most our efforts are going to using, developing and designing future enhancements of Makumba. We apologize for that.

#### Worldwide mirrors

EE, EE2, RO, SI, US
2001-2008