Category Archives: Uncategorized

We just pushed another release of Apache Isis, and it’s a big one! New features in this release include:

– a new theme-able look-n-feel for the Wicket viewer, using Twitter Bootstrap [1] and font awesome icons [2]
– a new simplified set of annotations (@Property, @DomainObject, @CollectionLayout etc) to make features more discoverable; see cheat-sheet [3]
– support to enable multi-tenancy (in particular in conjunction with Isis addons security module [4])
– new i18n support using gettext .po files, honouring user locale [5]
– sign-up/self-regisration support (so that end-users can create own user accounts) [6]
– EmailService for sending HTML emails, optionally with attachments [7]
– ability to validate individual parameters imperatively
– config property to flag use of deprecated annotations/method prefixes
– Maven plugin to validate domain object model with respect to Isis programming conventions
– improved support for Neo4J
– experimental support for more flexibility of generating Restful Objects representations [8]

Full release notes are available on the Isis website [9]

As of 1.8.0 we’re continuing to trim down and simplify. To that end, the Wicket Viewer is bundled in with Core, while the ToDoApp archetype is no longer provided. In its place the example todoapp is available from Isis addons (not ASF) to fork and adapt [10].

Also, I should point out that this release finally drops support for JDK 1.6, standardizes on JDK 1.7

I’m delighted to announce that Martin Grigorov has been voted in as a committer on Apache Isis, and also as a member of the Isis PMC. The first gives Martin the right to commit changes directly to Isis’ codebase, the second gives him the right to be involved in future votes.

Initially Martin got involved because Jeroen and I brought him onto the Estatio project in order to “bootstrappify” the Wicket viewer. Even though that piece of work is substantially complete, Martin continues to be actively involved, providing patches and working on other tickets, and from speaking with him I know he’s keen to get involved with all aspects of Isis, not just the Wicket viewer. For recent contributions, check out these github statistics and his activity stream on JIRA.

I’m looking forward to working with Martin in the future; another great addition to Isis’ committers.

The new EventBus stuff substantially helps decouple business logic in apps, while the @DomainService annotation reduces a lot of boring configuration. But it’s the last two bullet points I want to talk a bit more about.

To expand on what these last two bullet points mean, as of 1.6.0 Isis now has a companion website, www.isisaddons.org [10]. Similar to the way in which Apache Wicket has an additional “wicketstuff” website [9], the intention is for this site to house various third-party extensions to Isis, such that they can either be used “out-of-the-box”, or be forked and extended as need be.

Currently Isis add-ons fall into two categories:

modules… these provide business functionality to be incorporated directly into your domain object model, usually as domain services, occasionally with supporting entities. Examples include mail merge, spreadsheets, tags/labels.

In the future we expect to add in “metamodel” category for customizations to Isis’ metamodel, eg an extension to leverage various Java 8 reflection features which we don’t want to roll into Isis core just yet.

The intention is for all modules in www.isisaddons.org to follow a standard format, and include full unit and integration testing. Thus, if you want to fork and extend any given module, then there is a solid base to start from. Over time we hope that the “modules” in particular will provide a useful catalog to help bootstrap Isis development, and provide a way for the community to contribute back their own functionality as modules.

We are also considering moving some of Isis’ own modules (ie those recently factored out, such as for auditing, command, publishing etc) into www.isisaddons.org. Doing so will reduce the size of Isis itself while making it possible for these components to be more easily extended/adapted by the user community as need be. We will certainly take a *copy* of these modules in the first instance.

Share this:

I’ve just watched this excellent talk on Reactive Extensions – how they do Async Javascript at NetFlix. A genuinely new idea for me (though I feel a bit dumb for only learning about RX now). Worth spending the 30 mins to watch.

Also really cool that there are versions of RX not only for Javascript but also .NET and Java.

Even so, there’s still a time for books. I’m going to be starting on the next-gen viewer for Apache Isis soon, and because it’s going to be written in AngularJS, I really think there’s no substitute for immersing oneself in a book to really get into the “mindset” of that technology.

The publishers that first cornered the market in technology-specific books (at least so far as my reading was concerned) was OReilly, and then a little later I became aware of Manning. Most recently though I’ve got into reading Packt Publishing, also doing an excellent job of delivering quality titles on specific technologies. When it comes to AngularJS, for example, I see that they have 4 books currently; enough to be getting on with! That compares to just one book on the topic from either O’Reilly or Manning.

Now I must admit that Packt do seem pretty strong on marketing, which leaves me torn. If I were being cynical, I tend to worry that strong marketing might cover up for a weakness in material. But as an author myself, I think I’d be appreciative that my publishing company was working hard to flog my wares! Whatever; Packt’s own surveys show almost 90% of readers are “very satisfied” with their books; that’s a pretty impressive statistic.

So why this puff piece about Packt? Well, they’ve just released their 2,000 book, and they’ve currently got a discount code which is basically a buy-one-get-one-free offer. So if you were after a book on technology X, definitely worth checking out.

Full disclosure: Oh, and yeah, I told you about their marketing department? So, apparently this post earns me an ebook or two for myself. Well, there’s a couple more of those AngularJS books I need to read, so if they help me write Isis’ next-gen viewer, then it’s for the greater good!

JRebel itself is pluggable, and so for a while now I’ve been meaning to work on an integration with Apache Isis. Actually, invalidating Isis’ metadata caches is pretty easy, the difficulty really arises in Isis’ JDO/DataNucleus objectstore.

But, with a bit of experimentation, I’ve got what I think is a workable integration going, full details up on github.

And if you just want to see what this means, take a look at this screencast (also available on the the Isis website):

The book organized around a single coherent example which – if contrived – is easy enough to grok and helps unify the content. Through that example this book does a pretty reasonable job of explaining how to use Mockito’s capabilities.

As with many technical books, the layout/indentation of the code examples left something to be desired; I don’t think the author was done any favours by his editor. And I did struggle a bit with little with the omission of import statements in the examples; it wasn’t clear which class the static mock() method had been imported from, for example. The first mention of Matchers was also confusing; both Mockito and the widely used Hamcrest library define a class of this name.

I did also find myself wondering why Mockito’s @Mock annotation hadn’t been used; only later was that explained. I would rather the author had shown the use of @Mock first, and then only later (as a mechanism that involves much more boilerplate), covered the use of mock().

Overall, this book doesn’t cover very much more than what’s covered in Mockito’s own Javadoc API. So is it worth buying? Well, yes, probably… the content is solid enough, you’ll read it quickly, and will end up with a pretty understanding of what Mockito is and how to use it. Which I am sure is what the author set out to do.

Disclaimer: I was asked to review this book – and provided a free eBook for my trouble – by Packt Publishing.

Share this:

In my last post I talked a little bit about attending Oredev 2013, and promised I’d talk a bit about my own talk.

The session title was called RRRADDD! – ridiculously rapid application development with Apache Isis – so I decided that I would do exactly that, and build up a three domain class in a session lasting just 50 minutes. What started off as a bunch of notes and code fragments in notepad eventually morphed into a github project with a README, and (count them!) 22 tags acting as checkpoints as the app is built up piece by piece.

I have to say having done the talk I’m not that sure how well it worked from the point of view of the attendee; perhaps too repetitive and not enough jokes. In other sessions I attended at Oredev the live coding portion only did a very small amount of stuff (too little, I thought); but maybe I should have followed suit. Anyway, you can judge for yourself… the talk has been uploaded to Vimeo.

Whatever, plus side is that the github project is now a useful additional asset for those coming to Isis and who want to experiment a bit; I’ve linked to it from the Isis website.

Post script:
Every Oredev session is voted by attendees as they leave. How well this one went over I’ll never know… the Oredev conference organizers got in touch and said that unfortunately due to a glitch they lost the votes for my session. Maybe I hit it out of the park. Then again, maybe not.

Share this:

Last week I attended Oredev conference for the first time. First time in Malmo, first time in Sweden in fact.

Have to say I really enjoyed the venue, a good size. the catering also good, not to mention the free beer at the end of the day. Indeed, I was going to get some Swedish Krona from the cash machine when I was there, but completed the whole trip without any need to; just a couple of train tickets to/from Copenhagen airport, paid for on Visa. Criticisms: perhaps a bit short on power supplies for laptop, and the wifi (as is always the case at tech conferences) was a bit hit-and-miss.

Hotel too was good – and literally next door to the conference venue. Most of the speakers were staying there, so possible to have a conversation in the lounge area after the conference venue closed up at 10:30pm. And the conference organisers were very helpful, both before the event (eg providing clear instructions on logistics) and at it.

There were some good keynotes too (and some less good ones). Everyone, I think, enjoyed Randall Monroe’s xkcd talk, some great anecodotes, as was the talk on the “World of Minecraft”; now I understand what the game is about, I can see how people get immersed in it. Great examples of what could be done, some very funny stuff also. Back home we enjoyed watching up some of those same examples on youtube. Matthew McCullough’s talk was also good value; he always does a good and professional job. (The less said about the opening keynote on Wed am, though, the better).

As to the sessions, each were 50 minutes, and over a good variety of topics. I liked there was some techie stuff (Java, .NET, HTML5/JS) and some agile/process-y stuff, probably a 60:40 split. There were over 6 concurrent tracks, but each also was recorded and have already been uploaded to Vimeo. As for my own session, I’ll blog about that separately.

To sum up, overall, if you are thinking of attending Oredev – either as an attendee or as a speaker – then I can definitely recommend it.

And the author, Bill Bejeck, has, on balance, done a pretty good job of covering the all the most important classes provided by the library, without getting too bogged down in any of them. That’s to his credit; I could easily imagine an author spending too much time on a particular personal favourite of the library.

Still, you’ll need to be a reasonably competent developer to get the most out of this book. This isn’t a book that provides lengthy tutorials on functional programming for example. But the examples that the author provides generally make sense (even if they are often rather shallow). As a reasonably competent developer myself, I did enjoy learning about some of the nooks and crannies of Guava that I might not have discovered quite so easily. I didn’t know that Guava had a Table collection class for example, and I think that the FluentIterable class might simplify some code I’ve written recently.

On the other hand, I don’t write that much multi-threaded code (thankfully!), and so the Concurrency chapter didn’t really help me understand when I might want to use a FutureCallback vs a ListenableFuture. And when reading the coverage of Sinks and Sources in the Files chapter, the examples didn’t explain well enough why these abstractions are useful.

There were also quite a few typos in the book, including in class names. In a similar vein, quite a lot of the indentation of code samples was also inconsistent. The book said it’d use JUnit tests throughout to illustrate the usage; but I can tell you it didn’t. And the grammar in some of the sentences was somewhat sloppy and could have benefitted from a bit more copy-editing. The feeling was of a book written a little too quickly.

But overall, I’d give this book 7 out of 10. If by reading it you end up using Guava a bit more in your day-to-day programming – and I think that you will – then it’s done its job.

Disclaimer: I was asked to review this ebook (and received a free copy) off the back of a blog post a while back I did on Guava myself.

Share this:

The first week in October I’ll be trogging off to do a talk at a new tech conference with a little bit of a difference… it’s in a castle, by the Med. The conference is the MedIT Symposium, to be held at the Castle of Milazzo, in Sicily.

The scheduleis heavy on open source technologies, with an emphasis on the leading edge. Mobile and cloud get substantial coverage, so too do DSLs as do RAD frameworks such as Apache Isis and OpenXava.

For myself, I’m interested in learning a bit more about OpenXava, and I’m also interested in the XText … we’ve been thinking about writing a DSL for Apache Isis, and we reckon XText would be a good fit.