What's the Matter with JMatter?by Eitan Suez
It has been approximately a year since I wrote my first article on JMatter, first article, and a year is a long time for a successful open source project. Many things have changed and I'd like to give you an update. My last article was an introduction to JMatter and it's time we tackled something more advanced.
Allow me to begin with a very brief, orienting description of JMatter.
JMatter proposes that you, the developer of a small business application, concern yourself primarily with the business logic or the domain in question, for example, say we're developing a solution for a school, perhaps to administer or manage a curriculum. Alternatively, perhaps we're trying to write a system to better manage parts at an automotive shop, or perhaps we're dealing with real estate properties for sale. You get the picture.
JMatter further proposes that you consider most software development tasks that are not directly related to the business domain (such as persistence, writing the user interface, authentication, deployment, and more) as plumbing: it's someone else's job. In fact it's JMatter's job.
Applications developed with JMatter sport user interfaces built on top of the Java Swing toolkit. They are deployed over Java Web Start. For persistence, JMatter leverages Hibernate Core, therefore is compatible with any database system supported by Hibernate.
To give you further insight into the nature of this framework, let's walk through the construction of a non-trivial JMatter application.
Let's Build an App!
The JMatter framework comes with a half dozen demonstration applications that are designed to teach various aspects of the framework.
For this article, let's develop an application that illustrates some of JMatter's object-oriented capabilities. Whether we've attended it or not, many of us are familiar with the JavaOne conference in San Francisco. Let us then develop an application for managing the JavaOne conference. This application somewhat resembles the Sympster demo application that comes with JMatter. A complete application with all use cases is, of course, a little beyond the time and space that we have for this article, so we'll build the foundation for such an application. I'll let you be the judge of the degree of leverage JMatter provides.
I happened to have a copy of the brochure for JavaOne 2006 underneath a stack of papers on my desk. After perusing it, I made the following observations:
JavaOne is a conference, an event, where many talks are given. There seem to be a number of different types of events such as Technical Sessions (TS), which are the meat of the conference. Let's not forget Keynote speeches, and the popular Birds of a Feather (BOF) sessions at night.
Both the BOFs and technical sessions have a unique code such as TS-1234 or BOF-2332, while Keynote sessions do not. BOFs and TSs are also categorized by track, and there appear to be five tracks: Java SE, Java EE, Java ME, Tools, and Cool Stuff. All talks have a speaker, a topic, and a description.
Some speakers are distinguished as rock star speakers, some are Java champions, and some are both. Let's call such accolades Speaker Recognitions.
Typically, a distinction is made between the definition of a talk and the scheduling of a specific talk at a specific time and location. This distinction doesn't appear to be necessary for this application.
Finally, talks are scheduled for different rooms. We might want to keep track of the seating capacity for each room, which would be important if we wanted to manage registration for specific talks.
Here, then is a tentative initial model for our application: Talk (with subclasses: Keynote, BOF, and Technical Session), Speaker (and Speaker Recognition), Room, and Track. Let's go ahead and throw in an additional categorization for a talk: a Talk Level (perhaps with three levels: Beginner, Intermediate, and Advanced) to help us ascertain the expertise level expected of attendees.
Creating Our Project
Download JMatter from http://jmatter.org/ and unzip (or untar) the distribution.
Assuming you've got Ant installed, from the command line, cd into
jmatter/ and issue the following command to create a new project:
Figure 1. GUI for creating new JMatter projects
Give your project a name (JavaOneMgr). You have the choice a create a standalone or dependent project. In standalone projects, all the necessary dependencies are bundled into your project. It doesn't matter too much which you pick here. Dependent projects are simpler to work with if you're making changes to both your project and to the underlying framework.
After creating your project, quit this little app and
../JavaOneMgr, your new project's base directory (feel free to move your new project to another parent directory). The project is already equipped with a build file and base directory structure.
Project Directory Structure and Configuration
The project's directory structure is fairly self-explanatory:
src/: This is where JMatter will expect to find your source code.
test/: Place any JUnit tests you write in this directory.
resources/: This directory contains a variety of application resources. The
images/folder is where you place various image resources: a splash screen and icons representing your model objects that will be used by the JMatter's user interface.
hibernate.propertiesis where you configure your application's database connection (among other Hibernate-related concerns). Some model metadata can be specified in the file
model-metadata.properties(more from Chapter 11 of JMatter's documentation); the application's localization resources are also located here.
doc/: Place any documentation specific to your application in this directory.
For standalone projects, you will also find a
lib/ folder containing all of your application's dependencies. Dependent projects' build files reference dependencies in your JMatter installation.
You'll be using the generated Ant build file to compile your code, generate your database schema, test run your application, run unit tests, and, when your application is ready, to produce the artifacts necessary to deploy it over Java Web Start.
To configure your project with an IDE, you typically must communicate these pieces of information:
- Where your source code is located (specify the
- Where to output compiled code (to match the Ant build file, specify
build/classes, though we'll typically use the build file for compilation)
- Where dependencies are located (for dependent projects, that would be all the jars in
jmatter/lib/runtimeand the directory
JMatter requires Java SE version 5 or higher.
We're going to start coding soon, so go ahead and configure your working environment to your tastes.