When someone mentions cloud application development and cloud application delivery, you think of the days, weeks and months of relentless code writing and debugging that are followed by integration issue — what you want is accelerated development and deployment through reuse of existing assets, high availability (HA), and seamless integration to any platform.
This article describes how cloud application development can be accelerated through the use of modern rapid application development (RAD) tools while at the same time preserving the flexibility provided by traditional development environments and coding techniques. Before introducing a real-world example of a tool to illustrate the concepts put forward here, let's discuss those concepts.
- Separation of concerns: How does parallel development on different application tiers — the GUI, data connectivity, business logic — affect development speed of cloud applications?
- Deployment flexibility: If a development, or even a deployment, feature is too closely tied to the environment in which it runs, how does that affect application development?
- Application/software deployment virtualization: What components of deploying a SaaS application as a cloud-enabled application might complicate a deployment scenario?
Most of today's web application development involves at least three tiers:
- Graphical user interface: This is where the visual of the application is done, through a mix of HTML, CSS, and Javascript. Most often embedded inside JSP or ASPX files.
- Business logic: Involves setting up a page flow model, along with fields/content to populate the pages, and their relationships, whether it's validation, branching, external services calls, etc.
- Data connectivity: Involves making the connections to the back-end systems, including databases, web services, and others to save, transform, and transmit the data collected from the end-user.
Typically these tiers will start in a sequential fashion or at the very least involve multiple back-and-forth between them because of some intricate dependencies, lengthening the delivery time for the solution.
In order to speed up the solution delivery, you should be able to develop in parallel all tiers with well-defined boundaries so you can avoid any conflict during development. Such parallelism shouldn't come at the expense of complexity.
For example code-generator development platforms can deliver neatly packaged MVC applications; however they are a nightmare to customize. (Model-view-controller is an architectural pattern used in software engineering which isolates the application logic for the user from the user interface in order to allow you to perform independent development, testing, and maintenance of each. Our "separation of concerns.")
The table summarizes the pros and cons in today's web development tools.
Pros and cons of web development tools
| Web development tool type | Pro | Con |
|---|---|---|
| Traditional IDE (Eclipse, Visual Studio) | Ultimate flexibility Execution speed | Long development cycle Requires deep technical expertise |
| Form focused RAD | Short development time Requires moderate technical expertise | Limited customizability Limited application type Often database driven and dependent |
| Code generator | Short development time Requires moderate technical expertise | Limited customizability |
Although the cloud offers a great opportunity for developing and running web applications that scale and benefit from high availability, there are times when the application should be developed in house and then deployed to the cloud (or vice-versa).
One such scenario is a company delivering software to fill out and submit tax forms online. When tax season comes, a huge spike in demand will arise and so a move to a scalable cloud infrastructure would be required to ensure high availability.
If the development tool relies on any feature of the environment in which it runs, this transition might prove difficult, if not impossible.
The key factors to avoid being locked in to a specific environment include the following concepts:
- Be platform agnostic: Your development tool should be able to run under J2EE as well as .Net environments. Furthermore the developed applications should run under any portlet-type environment like a Microsoft® SharePoint platform or an IBM® WebSphere® Portal one. And not only that, but the transition between these environments should require no recoding at all.
- Encourage a minimal- or zero-coding environment: Obviously the less code you create, the less you'll have to touch when transitioning between environments. This extends to the interface layer as well. Is a pure HTML/Javascript interface available or are you forced to develop using JSP or ASPX technologies?
- Establish clearly decoupled layers: Following what we previously discussed about separation of concerns, the better you have isolated interface, business logic, and data connectivity, the better you will be able to modify any of them without affecting the entire application should you have to do so.
Application/software deployment virtualization
One of the greatest benefits of the cloud is the ability to abstract the provisioning of the infrastructure (IaaS) or the middleware application (PaaS). Within the cloud, a non-technical person can deploy a complex environment within minutes without requiring a deep understanding of the underlying complexity.
SaaS cloud applications can also be activated by customers without any technical knowledge. However, deploying a SaaS application itself as a cloud-enabled application might not be an easy task. Let's highlight some of the difficult aspects that could be helped by setting up a tool to facilitate the process.
In this context, you need a tool that provides an additional abstraction layer to the cloud by enabling application provisioning for non-technical people. In a sense, that tool would act as an application hypervisor or an SaaS application to enable SaaS applications.
Multi-tenancy resource sharing and provisioning
Much in the same way that IaaS and PaaS maximize the use of hardware and middleware, having a tool that can maximize the use of a development environment in multi-tenant mode can be a boon. This includes the ability to reuse components at the graphical level, business logic level, and data connectivity and sharing for all tenants.
The complexity of deploying multiple instances of your applications may become cost intensive if each application is developed independently since provisioning rules and testing will be required for each of instance. Having a platform on which all your applications can be deployed within a click gives you a path to multiple instances simply by provisioning a new instance of the platform itself.
Normally deploying multiple versions of a web application requires careful and delicate work to avoid conflicts and unintended side effects. Ideally you want your tool to provide you with an easy way to duplicate existing applications, be it for testing modifications you make to it, or to provide different versions.
You may also want to develop your application on premise to facilitate testing and interaction with internal services while making sure that your cloud deployment will be seamless. This can be achieved easily by having a RAD platform that can be deployed natively on premise and in your cloud environment.
Let's look at a real-world tool the authors developed to illustrate some of these concepts.
SmartGuide, example of a real-world RAD dev/deploy tool
The Alphinat SmartGuide® motto is "Rapid application development for the rest of us" which implies that it makes the complex task of quickly developing and deploying a cloud-enabled application easy enough for a non-technical person to perform. But another important aspect of this claim is that by converting many of the tasks of development and deployment into more automated formats, it gives the seasoned cloud developer a tool which enhances his productivity along the development-to-deployment process path.
We'll use SmartGuide to demonstrate how the previous concepts are implemented in a real-world, proven product.
First, to understand where SmartGuide fits in the landscape of products out there, you can look at a graph of development tools with the x-axis being flexibility and the y-axis being speed of solution delivery:
Figure 1. Speed of delivery vs flexibility in cloud app development tools
The three ellipses denote the three broad categories outlined in the table in the first section. SmartGuide gets as close as possible to native code flexibility while at the same time providing maximum development and deployment speed.
In the following sections, we'll look at the features of SmartGuide that match the concepts discussed earlier.
Balancing speed and customizability
SmartGuide is architected from the ground up to provide a quick development platform for the web while preserving the flexibility of customization found in custom code. Figure 2 exposes a high-level view of the SmartGuide architecture.
Figure 2. High-level view of SmartGuide's architecture
The key points are:
- The business logic of the application is stored as an XML representation.
- This XML representation is compiled on the first application call through an optimized business rule engine.
- The visuals of the application can be rendered through JSP (or ASPX) files, making use of a custom tag library to render the business logic, or through HTML/JavaScript™ connecting to the business logic engine via its REST web service interface.
- Data connectivity is done through a custom class loader for extension functions or native REST/SOAP web service support.
Every component developed can be reused, whether it is services (web services or extension functions), themes, or business logic components such as fields. Think about the ability to develop a second application without having to deploy any code to render it just by reusing previous GUI layer. Only the XML representation of the application needs to be uploaded to your cloud environment.
One-click application creation
SmartGuide contains many features to help you quickly build interactive web dialogues. For example, you can automatically create application fields from existing PDF forms by simply checking a box:
Figure 3. Automatic field creation from PDF/XML files
The same one-click mechanism can be used when importing XML schemas (XSD) or connecting to web services and extension functions. In the case of connections, the input and outputs of the methods called are used to create fields.
Using SmartGuide Designer, you can easily manage the entire content and business logic of applications through visual drag-and-drop interfaces. For instance, a field can be added to an application by dragging or double-clicking it onto a page:
Figure 4. Fields drag and drop
You can then easily define field properties, values, help, validation, appearance, and actions:
Figure 5. Field properties editing
SmartGuide automatically creates a visual representation of an application's pages and the relationship between them, including the branching rules. An integrated editor makes it easy to define the conditions under which users should navigate to certain pages.
Figure 6. Application page flow view
The visual function editor allows the manipulation of field values without writing a single line of code. Point-and-click functions can be applied to strings (upper/lowercase, substring, character replacement), numbers (format number, round, sum), and dates (current date, difference between two dates). Compound functions and calculations are natively supported.
Figure 7. Function editor
If the user has some coding knowledge, he can also go into source mode and type beanshell code directly.
Zero-code web service integration
SmartGuide natively supports SOAP and REST web services. To add a connection to a web service, only a definition file (WSDL or WADL) or a sample call is required. The available operations are then automatically extracted and made available through user-friendly interfaces. One can also create application fields automatically using the services defined.
Automatic documentation generation
As you build an application, it is possible to generate its documentation in an on-demand way. SmartGuide will automatically generate a customizable Word document that contains a detailed description of the application, including all of its pages, fields, services, files, and actions.
SmartGuide allows pre-filling PDF forms with the collected data without any coding. This enables you to break down complex forms into a series of logical steps in order to simplify data collection while still displaying the completed form in a PDF for pixel-perfect printing or archiving.
In addition, SmartGuide can generate PDF files from applications dynamically. Total control is provided through customizable templates over the appearance of the resulting PDF documents.
The data-centric nature of SmartGuide makes it possible to use the same collected data to also produce schema-compliant XML streams that can be sent to external systems for further processing. When choosing to auto-create application fields from a schema (XSD), the streams automatically inherit any validation rules that were defined in the schema definition file.
Advanced built-in validations allow you to perform syntactic validations in a single mouse-click.
Many different validations are available out of the box and vary by field type. When creating a text field for example, you can indicate its minimum and maximum allowable lengths, select from pre-defined validations (alphabetic, alphanumeric, email address, phone or fax number, postal code, etc.), and use an external service to validate the field. You can also create custom, reusable validation rules.
Furthermore, SmartGuide Designer allows a user to perform semantic validations to ensure data conforms to expected business rules.
You can define a field once and use it any number of times in different applications to reduce the number of fields to create. Once a reusable field is imported from the library, it's possible to modify its properties without impacting the default settings of the field.
For example, a field could be mandatory in one application and optional in another. You can also easily share the value of a field across multiple applications to avoid end users having to re-key the same information.
The same capacity for reuse applies to web services, extension functions, knowledge bases, and presentation themes and templates.
Accessible presentation templates
With SmartGuide, a user can completely separate an application's logic and presentation layers. This means a domain expert can fully concentrate on the business logic and content of an application without worrying about its appearance.
In parallel, a graphic or web designer can focus on creating user-friendly interfaces that are standards-compliant and accessible while working with a familiar technology (JSP, ASPX, or pure HTML/JavaScript).
Once templates are ready, they can be applied to an application in one click. Templates can even be shared by multiple applications or across tenants in a multi-tenant installation. This further reduces time-to-deployment and helps standardize the appearance of content and fields (size of text boxes, location of labels, etc.).
SmartGuide also enables the creation of knowledge bases using a web-based interface, enabling the user to then create filters in order to present only information that is 100 percent relevant to an end user.
There's no limit to the number or types of knowledge bases that can be created. The same module can therefore be used to create lists of formalities, activities, people, locations, etc.
Powerful API for custom functions
Java and .NET developers can write extension functions to add custom functionalities like setting up auto-responders, performing a series of advanced manipulations on a field, integrating with a database, LDAP or back-end system, etc. A simple configuration file then allows these extension functions to be used in the same manner as web services, therefore making them available to non-technical personnel.
SmartGuide lets users:
- Create field groups and capture multiple rows of data (like a list of people).
- Deploy applications in multiple languages.
- Easily present a recap of the data end users have entered and allow them to go back to a specific page to make changes.
- Build components that can be reused across many different applications.
- Set conditions for field visibility, page validation and navigation rules, field values, field validations, service and file mapping rules.
- Call a web service or extension function to initialize an application (like to pre-populate fields).
- Define actions that should take place on every page load or exit.
- Merge PDFs.
This article explored the various challenges organizations face when bringing their applications to the cloud, from code modification to reusability to ease of deployment. You saw some of the critical factors to moving your applications to the cloud. Along the way, you were presented with an overview of Alphinat's SmartGuide product, an agile development platform for the rapid application prototyping with a cloud environment as the end target that quickly builds interactive web dialogs online in a multi-tenant environment.
Whether you're a seasoned application developer or this is your first time building an application for a cloud environment, consider a RAD tool to make the job easier.
Learn
-
In the developerWorks cloud developer resources, discover and share knowledge and experience of application and services developers building their projects for cloud deployment.
-
Find out how to access IBM SmartCloud Enterprise.
Get products and technologies
-
See the product images available for IBM SmartCloud Enterprise.
-
Alphinat SmartGuide is a development platform that allows users to fully manage the content and logic of an application through easy-to-use drag-and-drop tools, making your cloud applications easier to build, test, and maintain.
Discuss
-
Join a cloud computing group on developerWorks.
-
Read all the great cloud blogs on developerWorks.
-
Join the developerWorks community, a professional network and unified set of community tools for connecting, sharing, and collaborating.




