Leeonsoft releases Dreamsource 2.0, a RAD application for J2EE


News: Leeonsoft releases Dreamsource 2.0, a RAD application for J2EE

  1. Leeonsoft has released Dreamsource 2.0, a code generation product for Java and J2EE developers. Dreamsource provides a simple persistence framework, and allows users to build complex SQL query easily. Dreamsource generates data access source codes based on Data Access Object (DAO) design pattern using database schema from live JDBC connection. Dreamsource also generates web source codes based on Struts 1.2 and J2EE deployment descriptors.

    The goal of Dreamsource is to help developers become more productive. Leeonsoft claims that developers can use Dreamsource to cut down their development time by 50% to 70%.

    A demo version can be downloaded from http://www.leeonsoft.com/download.htm.
  2. How can you compare Dreamsource against its Open Source alterantives:
    * JAG
    * OpenXava
    * OpenMDX
    * AndroMDA

  3. Dreamsource doesn't use entity bean. Dreamsource uses JDBCHome objects. Each table has one JDBCHome object. JDBCHome object defines CRUD methods for a table as well as its related tables. A JDBCHome object source code is genereated by Dreamsource using the built-in a simple persistence framework without xml configuration files. Dreamsource generate a table object for each database table. A table object Defines a lot of methods that return information about the table such as table name, a com.leeonsoft.crud.Field object containing column attributes - column name, data type, and primary key. A table object also defines its relationships to other tables. Dreamsource allows developers to build and test very complex queries easily. Also developer can promptly build SQL queries in IDE from com.leeonsoft.crud.Field. The following is an example:
    public class CustomersAction extends MappingDispatchAction {
        private static Fields _fields = null;
        static {
            //define queried fields or columns
            _fields = new Fields();

        public ActionForward doQuery(...) {
            CustomersDAO _customersDAO = DelegateFactory.getCustomersDAO();

            //get an user input value.
            String lastName = _customerQueryForm.getLastName();
            //queried fields or columns
            Select select = new Select(_fields);
            //where clause
            Condition condition = new Condition(CustomersTable.getLastNameField(false).eqs(lastName));
            select.setOrderBy("FIRST_NAME asc");
            Collection _customerss = _customersDAO.findBySelect(select);
    Please visit a live demo at http://www.leeonsoft.com/jsource_session/.

  4. If the code can be generated, I am assuming its simplistic code that can be described in some specification/ markup language . The question is why bother generating this code? Why not represent this as some sort of Service with a well defined API ? The rest of the not-so-simple modules can access these services. This way you don't have to maintain generated code.
  5. Why generate Code?

    Maybe for direct data access style not generate code is possible.
    But if you want that the framework uses EntityBeans, or EJB3, or Hibernate or JDO, in an unified and simple way you need to generate code.
    And some people like to use these OO approaches to write his applications.

    If you does not generate code then your application will be very dynamic hence fragile (Smalltalk vs Java).