We occasionally get questions regarding the tools and approaches we use for developing our products. These are described below.
Languages and IDE
Most of our programming is done in Java. We consider JDK 1.6 to be our baseline, though we use both 1.6 and 1.7 on various platforms.
We also use Groovy to ensure it works with business logic, most notably in the tests.
We use Subversion
to manage our source. We publish our source tree along with the various parts of the product, as source jars and as part of a Maven package. As part of every release, we put all open-source code in GitHub
We use jUnit
, both for integration tests and unit tests. The integration tests are included in your download as part of the BusLogicIntro project as further explained here
. The integration tests are quite extensive, utilizing all logic constructs in typical real-world scenarios. Note:
- You can run the ant script (eg, runAllTests_hsql#runAllTests) as described in the link above, and in the download installation verification procedure.
- The integration tests run extensive updates, often in multiple transactions. To ensure that the database results in an expected state, we make extensive use of SnapshotDB, a "database diff" which compares database state before/after the test, with services to test the diff to verify expected results.
All components are automatically built and tested every night. We use a series of Ant scripts to drive the build, and the scripts are in turn managed by Jenkins
. Here's a typical build output
As part of this automated build, we run a fairly extensive suite of tools (in addition to all the compilation, testing and packaging):
| Javadoc|| To produce the API documentation for the engine and the add-ons|
| java2html|| To format the source code and make it easy to browse online|
| NCSS|| To gather statistics on the code base|
| JCSC|| Same purpose, with some differences in approach|
| PMD|| For static code analysis, and finding possible bugs|
| CPD|| To detect code duplication|
| FindBugs|| For static analysis of the bytecode|
| JarAnalyzer|| To keep track of the dependencies between the various jars used in the project|
| CheckStyle|| To measure our compliance with our coding standards (we're working on it!)|
| StatSVN|| To get a report of who's been editing what files when|
| JDiff|| To detect API changes between releases|
We use many third-party products to create ABL, here are the main ones:
| Apache Tomcat|| We use Tomcat as one of our test platforms for web environments. We also ship Tomcat in the standalone demo of ABL.|
| Apache Commons beanutils|| An excellent library to manipulate Javabeans.|
| Groovy|| We fully support Groovy as a language to express business logic. We use it ourselves to write some testing code.|
| Hibernate|| This one should go without saying, of course.|
| Apache Commons Jexl|| We use Jexl as the analyzer and interpreter for declarative rules, i.e. those rules expressed in the annotation rather than in code. The wonderful people who write Jexl were kind enough to make some enhancements that have allowed us to make full use of it.|
| Apache log4j|| We use log4j as our primary logging framework.|
| JUnit|| All our tests are written using jUnit.|
| JunitReport|| For the daily builds, the output from JUnit is formatted using JUnitReport.|
| HSQLDB|| We use HSQL as part of all the demos: it's fast and convenient. The in-memory mode is very convenient. We also use it for many of our tests.|