My Love Letter to SOFIA

- -

In November, I was evaluating frameworks to help me build web applications in Java. My background includes constructing several in PHP using Dreamweaver. I had done a couple of “messy” projects using Servlets, JSP and Taglibs, but I wanted to get real experience with what Java, my “native” language, had to offer. While I was looking for a job, I took the time to evaluate the web application frameworks that were available. I already knew about Struts, and excitedly dug into the Manning Struts in Action book.

I read the entire thing, and was kind of puzzled. I didn’t see anything in there that dealt with the problems I was familiar with, and the areas of flexibility that it offered didn’t add as much value for me as I had expected. Still, though, I knew Struts was famous, and was confident that I could at least use it.

What I wanted, in addition, was a “last mile” solution for doing my web design. I knew that Dreamweaver didn’t have the greatest level of support for JSP tags. It was this search that led me to SOFIA. I downloaded the platform, went through the tutorial and looked over the examples. That was all it took for me to dispatch Struts from my toolkit and use SOFIA in its place.

Here’s a list of the other bonuses that I got from SOFIA within the first two weeks.

“Live Page” view in Dreamweaver, via the translator servlet

This was exactly what I was looking for with my search in the first place.

Java-code free JSP pages

Java code on JSP pages is ugly, unrenderable by Dreamweaver, difficult to debug, nigh-impossible for web designers to work with, etc.

Swing-like coding of pages

I’ve since seen other frameworks that have similar MVC coding techniques, but I still like SOFIA’s the best. I’d had exposure to Swing in the past, and this capability made coding SOFIA controllers a snap to get right into. Suddenly, worrying about which submit button was pressed was a thing of the past. You can have a submit button for each row in a DataStore and you’re one event.getRow() call away from figuring out exactly what to do with what set of data.

Trivial in-IDE debugging

Set breakpoints in your controller code and watch your page execute just as a standard Java application would. This one still makes me very happy.

Professional construction and power

The SOFIA team has been at this for quite some time. You might find their philosophy regarding SOFIA’s open source status an interesting read. I don’t have to read a book to reap the benefits of the long, hard road that the SOFIA developers have travelled; they’ve left a framework behind instead. (Not that I mind reading! I love it.) They provide solutions to many advanced problems, and some quite interesting features that I’m still learning about.

Support and flexibility

SOFIA does not use any bean or POJO persistence strategy itself, opting for SQL. I felt that Hibernate more closely fit my needs in terms of database access and use. Even though SOFIA doesn’t particularly have a use for it, there was a BeanDataStore ready for me to use and adapt. In addition, the SOFIA team has been nothing but helpful in helping me through troubles, and the user community is a fairly active one.

I don’t anticipate leaving SOFIA any time soon; they’ve enabled me to focus on the problems my application faces, and not on data interface and plumbing. I’m fortunate that I’m doing green field work, but if you’re fortunate enough not to be tied in already, I couldn’t recommend SOFIA more highly.