I successfully delivered my first "real" Apache Isis application today --
YAY!! -- and would like to share my experience.

My background: I am a reasonably experienced developer proficient in custom
application development in C#, Java, Javascript, Python etc. but never
touched Apache Isis nor Apache Wicket nor DataNucleus before, my Java chops
are a bit rusty and I am a complete Maven noob.

I have been following NakedObjects since the early 2000's and am quite
intrigued by its philosophy and promises but never mad the "plunge" to
actually implement a project for a client with it. I checked out Apache
Isis on and off (hey, I even bought and enjoyed Dan's book in 2009 or so)
but - without wanting to sound blasé - the UI was never quite up to my
taste (the .NET-Version was even worse). But the recent changes to the look
and feel of the Bootstrap Wicket interface made me confident to finally be
able to "sell" it to clients.

The target application is - in a nutshell - an internal web-application for
a government department to define and configure traffic webcams (~1000),
locate them interactively on a map, display their latest images, link them
to their road network data etc. Nothing too complex but the right size to
try something new, I guess.

The great:
I implemented a working prototype of the application in under a week(!),
which already looked very polished and had lots of "bells and whistles",
like a Google Maps interface, display of live images, Excel-export,
auditing-service, REST-interface etc.. The client was positively surprised
by the polished looks and richness of features and went for it. So, within
two weeks after that I was able to implement the complete application,
reusing most of the work implemented in the prototype.

I had to implement two Isis wicket components:
- Display of a map (Locatable) based on OpenStreetMap:
 I had trouble getting the Google map interface to work in the client's
environment. It kept complaining about application keys etc. and wasn't
usable at all. Thanks to the "wicket stuff" implementation of openlayers3
and a shameless "raid" of Dan's gmap3-isis-component I was able to build an
openlayers3-isis-component myself, despite my utter isis/wicket noob-ness.
- Display of static image resources:
 The "standard" Blob-interface didn't cut it for me because it only
displays a thumbnail image (which was even of a bigger byte size and lower
resolution than the original) of an image resource from memory/db. I was
able to build an Isis ExternalImageUrl-component by copying much of the
Blob/Clob-component but using static URLs, which works flawlessly for
displaying the original images based on an "ExternalImageUrl"-Property of
the entity.

(Once the dust has settled I want to contribute the openlayers3- and static
image components. Maybe one of you guys can provide me with a little
guidance how to set that up...)

I had some minor questions that got answered instantly by Dan and Co on the
mailing list. Thanks again!

The ability to define aspects of the interface in the XML-layout files is
great (despite some minor quirks with the translation)! Studying the
TodoApp helps a lot in this regard.

The not-so-great:

I think the code base is still quite dynamic, which is good in a way
because it gets actively developed (does Dan ever sleep? ;)) but it's also
difficult for a noob to jump in. I happened to work with the sources right
before the 1.12.2 release which had some annoying "surface" bugs and in
1.13-SNAPSHOT some subtleties of the Isis-components implementation already
changed.
I18ln:
There are lots of labels hard-coded in English (I'm looking at you:
bookmarks-display, list pager, signin fields, excel download etc.) which
can be a real show stopper for certain clients in certain locales (France,
Germany, ...). Plus, if you want to fix these kinds of errors you need to
understand the Wicket-way of doing this plus the way Isis goes about it as
well. And then do it for the contribs also. Surprisingly complex for a
beginner even if they are by themselves all just small trivial fixes.
Documentation:
All in all the documentation is great and better than much of the other
stuff out there, but a lot of details are missing to really understand the
concepts behind value objects, enum types, facets, objects not originating
from a database and the like.
Furthermore, there is not a lot of info or "hand holding" about how to take
an application from prototyping to production. I had to spend a lot of time
figuring out how to get a jetty runner working with an "uberjar" in
headless mode as a service with "external" configuration (the internal Isis
Server didn't work for me at all, but that might also just due to my
inexperience).

Wish list:
- Better out-of-the-box handling of the display of external/static
resources (Images, IFrames(!) etc.)
- A component for pageable display of entity collections in a grid
- A tree component

All in all I definitely see Apache Isis as a great and clean way of doing
these kinds of applications and I want to encourage people to just try it
out for a project and see for themselves -- IMHO it's quite low risk and
lots of fun!, especially if you can go with the existing components. It
gives me quite a bit of confidence that even adding substantial new
functionality - once you get the model right - just works. (Guess I'm
preaching to the choir here here anyway ;)

Cheers and a have a great weekend,

Reply via email to