
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.
Makumba's main elements are:
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="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.