Below is a set of complimentary technologies specifically chosen to enable exponential engineering for business applications. The set of technologies are not appropriate for high volume transaction based systems but are very powerful for systems that need to be highly customisable. Each technology displays the common attributes of simplicity (which is critical to get the extreme productivity required) and power (which adds value to the project).
Runtime Platform : Java 2 (standard edition)
Simplicity :
- An object-oriented language simplifies the software engineering techniques of abstraction and low-level reuse.
- A garbage collected language removes the complexity of memory management.
- A non-J2EE runtime removes the temptation to over engineer (when you have limited resources) but still allows good J2EE libraries to be added as needed.
Power :
- A huge range of class libraries give security for the future knowing that there will likely be a reusable solution for unforeseen requirements.
Database : ObjectDB (embedded version)
Simplicity :
- An object-oriented database removes the complexity known as the "Impedance mismatch" between object models and relational schemas. No conversion between object graphs and database tables is needed as the semantic model is identical.
- An embedded database removes the complexity in concurrent data access and network access.
- Transparent object persistence (JDO and JPA) removes the need to manually convert between conceptual object queries and SQL.
Power :
- An embedded database communicates with a single process only which enables very fast performance. However, a complimentary technology for inter-process communication is needed to fill the omission of multi-process database access.
Reporting : ReportMill
Simplicity :
- A pure object reporting system removes another "Impedance mismatch" between object models and the relational like tables which, as far as I know, all other reporting systems are architecturally based on.
Power :
- A pure object reporting system allows reports to call directly into business logic methods on your real business objects in the live application unlike all other reporting tools that can only access the relational database fields.
Business Logic Language : Groovy
Simplicity :
- A simplified and consistent syntax allows business logic to be written in fewer lines of code (half or less) and is much easier to read and understand.
Power :
- An dynamic language allows complex business logic to be prototyped very fast.
- A language native to the Java runtime allows dynamic code to be easily optimised by making it static or even falling back to raw Java.
Inter-Process Communication : ActiveMQ
Simplicity :
- A persistent queue based messaging system removes the complexities of location addressing, guaranteeing delivery, automatic recovery and concurrency management.
Power :
- A queue manager infrastructure configuration with destination transparency allows the data communications between a network of distributed servers to scale up from single server to large numbers of inter-dependent servers with little or no configuration changes on the servers.
Web User Interface Framework : Google Web Toolkit
Simplicity :
- A Java to Javascript compiler removes the need for developers to learn a second language : Javascript.
- A Java to Javascript compiler also allows the same code to be used for both client and server removing the need to maintain two version of the same code in different languages or write custom data converters.
- An abstract UI layer removes the complexity of having to code different versions for each browser.
Power :
- A suite of reusable UI components allows developers to focus on the unique parts of the application instead of re-inveting the wheel.
In-house Frameworks : GSpice
Frameworks :
- A transaction management framework with multi-thread safe transaction manager and a generic transaction class containing database transactions and reused for client service requests as well as peer server requests.
- A Web 2.0 data synchronization framework for customizing multiple views of the data model and translation of the views between the Java server and the Javascript client.
- A design by contract framework for preventing and detecting flaws in the software. (See my article on design by contract for more information)
- A user feedback framework for capturing exception failures, design by contract failures, errors and warnings plus accurate diagnostic information and passing incidents to the client user interface, server logging and e-mail alerting frameworks.
- An e-mail alerting framework for automatic remote notification of production events such as failures, errors and degraded service.
- And many other more domain specific frameworks.
In The Wild
This platform has been proven in a commercial production environment. The software product is an integrated point of sale, warehousing and head office solution for multi-store retail chains and has been live since December 2008.
© 2008 Keith Foster. "The Daring Developer" was created for people who share an insane excitement about advanced software engineering.