This is the first article in a series addressing technologies used by CanaryApps. In this article I want to address the main challenges facing Online Application Generation.
Traditional application generation is the process of constructing some of the application artifacts, leaving developers to fill in the blanks. CanaryApps application generation constructs all the artifacts of an application, including the complete source code, unit tests, database scripts, deployment scripts, documentation, and analysis reports; to name a few. The construction of these artifacts requires domain expert hands-on in each area and is based on best practices, guidelines, and well-proven patterns.
The main advantages of using application generation are to save time, money, and reduce risks. Time to market and meeting deadlines is the foremost concern for most of us. For example, constructing a web application based on Java, .Net or Adobe’s Flex is not a trivial task. It requires a team of good expertise of application architecture pertaining to the platform, and various skill-sets in different aspects of the application layers. This might take several weeks to months (and sometime years!), based on the size of the application and the team involved. In contrast, full application generation of a considerable schema size can take several hours, including all the functional unit tests. A cohesive mix of open-source tools that work well together can save both money and time; and now there are many organizations that have standardized on them. Minimizing risks is a vital factor for the success of delivering high quality applications in any organization. Mitigating such risks usually implies hiring best quality architects, developers, methodologies, and tools. Using best practices for each platform, automated unit tests, and pattern-driven methods reduce these risks.
Before delving into these challenges, what do we mean here by “online” ? Do you think by just uploading your application metadata into the CanaryApps application generator, and poof! you get your application archive, with no development tools, skills, knowledge, or any of that? This is crazy! The short answer: its true, except for that last part!.
Lets examine some of the challenges facing application generation and how CanaryApps provides solutions for each of them:
1. Metadata: Application generation uses metadata as a form of specification, such as application model or database model, as an input to the application generator in order to construct the application. Using XMI (XML Metadata Interchange) as a unified format lacks standardization, and it’s not common among most communities. On the other hand there is no such standard for SQL (Structured Query Language) across all database system as their DDLs (Data Definition Languages) syntax vary from one database to another.
To solve this dilemma, CanaryApps provides a tool, the Schema Exporter (see screenshot below), to extract the database schema into a special format, which is used as input to the application generator. You will be able to download the Schema Exporter with the launch of the site.

CanaryApps Schema Exporter
The Schema Exporter works with all the databases supported by Hibernate or NHibernate. You need to connect to your database using a JDBC driver for the target database, which you can download from the database vendor’s site. Once you connect to your database server, and using the Schema Exporter you will be presented with all the database schemas (or catalogs), which you have access to on that server. Now you can select the table definitions you’d like to export for your application. The Schema Exporter will only export the table structure and relationships (and not the data!). The generated file is a clear XML file that you can inspect using your favorite text/xml editor.
2. Persistence Layer: Generated applications use a target database to persist data, and there are many database systems, all with different DDLs, DMLs (Data Manipulation Language), and DCLs (Data Control Language). CanaryApps abstracts these databases using ORM (Object Relational Mapping) tools such as Hibernate and NHibernate, making the job much easier.
3. Unified Architecture: Generating a unified application architecture on different platforms, such as Java, .Net is also challenging. CanaryApps provides a unified application architecture using Spring (on Java), and Spring.Net (on .Net) in wiring all the application tiers and injecting dependencies, hence making the gaps much smaller.
4. Customized application logic: Many will argue that application generation can’t address all the application development aspects. This is true for applications that have specific requirements and has certain customized logic. CanaryApps provides a mechanism to incorporate these specialized cases by dynamically loading the classes implementing such functionality using runtime object binding of classes utilizing a predefined interface.
5. Limited scope: CRUD (Create, Read, Update, and Delete) operations are the base producers of application generation.
CanaryApps provides more for application generation than just CRUD operations. The add-ons functionality, such as analytic report generation, graphical visualization (using charts), exposing the middle tier through Web Services, and localization (supports different locale and languages).
6. System Re-engineering: How application generation helps in migrating Legacy Systems to modern technologies. Using schema conversion and data migration from one database system to another helps legacy systems to move fast into Java, .Net and/or Flex technology with the least amount of efforts.
7. Legacy systems resurgence: Application generation can revive your legacy systems and keep all their assets, and then helps exposing them as Web Services. This makes your data accessible, say using Flex technology.
6. Application Deployment: Ok, I got the application artifacts, and all the scripts, and documentation, now what?
CanaryApps provides an application installer that assists in deploying the application into the target application server. This gets you up and running in the shortest amount of time.
I Hope this sheds some light on what CanaryApps will be offering. My next post will be driving deeper into each area of these challenges.