Welcoming Martin Grigorov as a new committer on Apache Isis

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.

Martin is already a key committer on the Apache Wicket project, as well as actively contributing to the companion Wicket-bootstrap project. But you also can’t failed to have noticed his involvement in Isis’ users and dev lists recently.

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.

[ANN] Apache Isis version 1.7.0 Released

We just pushed out Isis 1.7.0, which consists of:
* Apache Isis Core version 1.7.0
* Wicket Viewer 1.7.0
* SimpleApp Archetype 1.7.0
* ToDoApp Archetype 1.7.0

This was mostly a bug fix release, including as it did some security fixes raised by the community (ISIS-883, ISIS-884, ISIS-895). It did have a couple of new features in it though, notably:

- ISIS-809: @ViewModel annotation, no longer requiring explicit implementation of the IViewModel interface.
ISIS-916: ability to override framework-provided services, such as MementoService or BookmarkService.
ISIS-917: (beta): pluggable representations for the RO viewer

A lot of work was also done over in the Isis add-ons website, in particular the new isis-module-security add-on (see also this previous post).

Full release notes for the release are available on the Isis website, [1,2,3,4], as well as a migration guide [5].

[1] http://isis.apache.org/core/release-notes/isis-1.7.0.html
[2] http://isis.apache.org/components/viewers/wicket/release-notes/isis-viewer-wicket-1.7.0.html
[3] http://isis.apache.org/archetypes/release-notes/todoapp-archetype-1.7.0.html
[4] http://isis.apache.org/archetypes/release-notes/simpleapp-archetype-1.7.0.html
[5] http://isis.apache.org/core/release-notes/migrating-to-1.7.0.html

Configuring Apache Isis command profiling and auditing module add-ons

When v1.6 of Apache Isis was released a month or two back we also announced the creation of a new “add-ons” website as a place to hold reusable module of code for any Apache Isis app.

Two of the modules that we’ve moved into the add-ons site are for auditing and for command profiling; the latter also enhances auditing capability as well as enabling Isis’ background command support.

The screencast below Read the rest of this entry

Configuring Apache Isis’ Security Module Add-on

When v1.6 of Apache Isis was released a month or two back we also announced the creation of a new “add-ons” website as a place to hold reusable module of code for any Apache Isis app.

Working with Jeroen I recently completed a new security module that handles both authentication and authorization for Isis apps.
Read the rest of this entry

How to restore a PostgreSQL backup

There would seem to be several ways, but if the backup file was created by pg_dump and is actually a series of DDL and INSERT statements (look in vi), then use:

psql -U postgres -d dbname < dbname.backup

‘Nuff said!

[ANN] Apache Isis version 1.6.0 Released

We just pushed out 1.6.0 of Isis, which now consists of:
  • Apache Isis Core version 1.6.0
  • Wicket Viewer 1.6.0
  • TodoApp Archetype 1.6.0
  • SimpleApp Archetype 1.6.0
If you compare this announcement to that of 1.5.0, you’ll see that we’re releasing a lot fewer components.  But that’s because:
  • Isis Core now incorporates the JDO Objectstore, Restful Objects Viewer and Shiro Security (all previously released as separate components).
  • TodoApp Archetype was previously the ‘Quickstart (Wicket/Restful/JDO) archetype’
  • SimpleApp Archetype was previously the ‘Simple (Wicket/Restful/JDO) archetype’
Full release notes are available on the Isis website, but there are some significant new features and reorganization worth calling out.
  • Extend (custom) EventBus vetoing logic so that can also encompass hide, disable, validate (ISIS-831)
  • @DomainService annotation to automatically discover and register domains (ISIS-493)
  • Wicket viewer: Add edit capability to view objects (ISIS-781)
  • Wicket viewer: Wizard-like form for Wicket viewer (ISIS-800, ISIS-810)
  • Move jdo, shiro and restful into core (ISIS-832)
  • Breaking out applib and JDO services into modules (ISIS-833)

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.
  • wicket extensions … these extend the capability of the Wicket viewer, eg maps, calendars, charts.

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.

OK, that’s it.  Go check out some of those links…

[1] http://isis.apache.org/core/release-notes/isis-1.6.0.html

[2] http://isis.apache.org/components/viewers/wicket/release-notes/isis-viewer-wicket-1.6.0.html

[3] http://isis.apache.org/getting-started/release-notes/todoapp-archetype-1.6.0.html

[4] http://isis.apache.org/getting-started/release-notes/simpleapp-archetype-1.6.0.html

[5] http://search.maven.org

[6] http://isis.apache.org/download.html

[7] http://isis.apache.org/intro/getting-started/simpleapp-archetype.html

[8]http://isis.apache.org/intro/getting-started/todoapp-archetype.html

[9] http://wicketstuff.org/

[10] http://www.isisaddons.org/

[11] http://isis.apache.org/core/release-notes/migrating-to-1.6.0.html

[ANN] Apache Isis version 1.5.0 and related components Released

The Isis team is pleased to announce the release of:
– Apache Isis Core version 1.5.0
– Wicket Viewer 1.5.0
– Restful Objects Viewer 2.3.0
– JDO Object Store 1.5.0
– Shiro Security 1.5.0
– Simple Archetype 1.5.0
– Quickstart Archetype 1.5.0

New features and improvements in this release include:
– Additional EventBus service events, ability to programmatically trigger events, vetoing subscribers (ISIS-550, ISIS-786)
– Integration testing improvements, most notably the new FixtureScript API and auto-injection of services into integration tests (ISIS-776, ISIS-782, ISIS-783)
– Better handling of multiple realms in Shiro security (ISIS-746)
– Better default column sizes for applib services (command, auditing, pubsub) (ISIS-744, ISIS-750)
– Precommit phase to flush pending updates for applib services (ISIS-769)
– Preparatory work for move to Java 7 (ISIS-569, ISIS-770, ISIS-772)
– Improved support for JRebel in Maven and various IDEs (ISIS-756)

Notable bug fixes include:
– Fixed blob/clob mapping in JDO Objectstore (ISIS-714)
– Fixed handling of mandatory boolean parameters in Wicket viewer (ISIS-431)
– RO not threadsafe when buiding metamodel (ISIS-777)

Full release notes are available at [1,2,3,4,5,6,7] on the Isis website (links below).

You can access this release directly from the Maven central repo [8],
or download the release and build it from source [9].

Enjoy!

-The Isis team

[1] http://isis.apache.org/core/release-notes/isis-1.5.0.html
[2] http://isis.apache.org/components/viewers/wicket/release-notes/isis-viewer-wicket-1.5.0.html
[3] http://isis.apache.org/components/viewers/restfulobjects/release-notes/isis-viewer-restfulobjects-2.3.0.html
[4] http://isis.apache.org/components/objectstores/jdo/release-notes/isis-objectstore-jdo-1.5.0.html
[5] http://isis.apache.org/components/security/shiro/release-notes/isis-security-shiro-1.5.0.html
[6] http://isis.apache.org/getting-started/release-notes/quickstart_wrj-archetype-1.5.0.html
[7] http://isis.apache.org/getting-started/release-notes/simple_wrj-archetype-1.5.0.html
[8] http://search.maven.org
[9] http://isis.apache.org/download.html

Deleting git tags on a remote

For some reason our git repo for Apache Isis (mirrored on github) acquired a bunch of tags in the form:

  • upstream/isis-1.4.0
  • upstream/upstream/isis-1.4.0
  • upstream/upstream/upstream/isis-1.4.0
  • upstream/upstream/upstream/upstream/isis-1.4.0

Clearly something or someone has been accidentally pushing bad tags.

To remove these tags locally, I used:

for a in `git tag -l upstream*`; do echo $a; git tag -d $a ; done

To remove these tags from origin, I chose to do it in two steps. First locate the tags to be deleted:

git ls-remote –tags origin | awk ‘{print $2}’ | \
grep ^refs/tags/ | cut -c11- | \
grep upstream | grep -v "\^{}" \
> /tmp/y

then delete ‘em:

for a in `cat /tmp/y`; do echo $a; git push –delete origin $a ; done

Observable and Iterator design pattern are the same thing – who knew?

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.

 

Still a place for books…

Like everyone else, if I need to know how use some little API, I google for the answer and then follow the links to stackoverflow.  Yesterday my searches that took me there included an error regarding a missing Windows Identity Foundation DLL, how to do try/catch/finally in Powershell (just as you would’ve thought, by the way), and how to change the name of a Windows service (somewhat more obscure).  In fact my google history for yesterday shows I visited SO 15 times that day with different queries.

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!

Isis 1.4.0 released

After 4 months development, we (that is, the Apache Isis team) have just released Isis 1.4.0, and supporting components.
 
This is a pretty cool release, because it’s the one that Estatio (the first major application to run on Isis) has been deployed against.
 
Some of the features in this release include:
  •  further support in layout.json files for additional facets/UI hints
  • better reporting of metamodel validation errors (including a new page in Wicket viewer)
  • improved support for bulk update
  • @javax.enterprise.context.RequestScoped for request-scoped services
  • QueryResultsCache request-scoped domain service (for performance tuning)
  • new MementoService to support view models
  • new request-scoped @Bulk.InteractionontextService for standardized co-ordination between bulk action invocations
  • Scratchpad request-scoped domain service (for adhoc coordination between actions, eg bulk action invocations)
  • Command, CommandContext, BackgroundCommandService, for profiling and background task support
  • improvements to JDO implementations of auditing and publishing services, to integrate closely with the new Command/backgroundCommand services
  • improved support for running arbitrary Isis jobs via a scheduler
  • supporting methods (disableXxx, validateXxx) for contributed actions/associations now supported
  • services autowired prior to @PostConstruct, and Isis session present for service initialization
  • JRebel support (JRebel plugni itself is third-party, see Isis website for details)

In the Wicket viewer, major changes/improvements include:

  • show action dialogs in a modal dialog, rather than new page
  • limit number of bookmarks, make less easier to accidentally trip, show/hide with keyboard shortcut
  • improved IE9 support, bundle CSS files
  • simplify URLs in Wicket viewer
  • actions returning URL open new browser window
  • UI sorting/ordering hints, pop-up to copy to clipboard
  • breadcrumb drop-down to easily revisit previous page
  • upper/lower case now switchable
  • standalone tables now rendered according to runtime type, not compile-time type
  • better tooltips over icon/titles
Full release notes are available at [1,2,3,4,5,6,7,8,9,10,11] on the Isis website.
  

Isis integration with JRebel

You probably know about JRebel already – it’s a commercial product that dynamically reloads Java classes without having to redeploy your webapp. Not necessarily the cheapest of products, but if you’re a full-time dev working on the JVM, then it can easily pay for itself. Oh, and it’s free for use on any hobby/open source projects.

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):

Instant Mockito – a review

Instant Mockito is just a little book covering https://code.google.com/p/mockito/, but that’s not a bad objective in itself. Mockito, after all, is one of the most commonly used Java mocking libraries. (I happen to prefer other mocking libraries better, but that’s another story).

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.

Oredev 2013 – RRRADDD!

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.

Oredev 2013

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.

Isis 1.3.0 – crammed full of goodies!

Over on Apache Isis, we’ve just released a new version, 1.3.0, of the framework (core plus supporting components).

There are some major new features in this release; indeed this is probably the most significant release of Isis as a TLP.  Just to highlight some of the main features…

In core, the new features include:

  • contributed collections and properties
  • view model support (across both Wicket and RO viewers)
  • UI layouts defined in JSON files
  • better integration and BDD testing support, including Cucumber-JVM integration
  • domain services for handling application and user settings service
  • domain service providing various developer utilities (eg downloading metamodel)
  • domain service incorporating Guava’s EventBus service);
  • context-specific autoComplete
  • conditional choices
  • new annotations: @SortedBy; @CssClass; @PostsPropertyChangedEvent
  • helpers for writing contract unit tests and for writing comparable entities
  • optimistic locking improvements

In the Wicket viewer, new features include:

  • default dashboard
  • more sophisticated layouts, with multiple columns
  • dynamic reloading of layouts
  • sortable table columns
  • BlobPanel displaying images
  • bookmarkable actions
  • upgrade to wicket 6.11.0

In JDO objectstore, new features include:

  • better integration/validation between Isis and JDO metamodels
  • upgrade to DataNucleus 3.2.7
  • better Google App Engine compatibility
  • expose JDO PersistenceManager via domain service for more sophisticated use cases

The Restful Objects viewer also had several bug fixes vis-a-vis the RO spec v1.0 (thanks to our GSOC students for highlighting these).

In addition to all that, there is a new “simple” archetype, making it easier to get started.

The full release notes etc are available at [1,2,3,4,5,6,7] on the Isis website.

You can access this release directly from the Maven central repo [8], or download the release and build it from source [9].

As ever, feedback welcome

 

Google Summer of Code Veteran Orgs: Apache Software Foundation

The Google open source blog has just posted the write-up that ASF provided on some of its students for GSOC 2013. I contributed a couple of paragraphs on how Apache Isis‘ two students, Dimuthu Upeksha and Bhargav Golla, got on.

Here’s what I said:

Read the rest of this entry

Getting Started with Google Guava – review

Getting Started with Google Guava” isn’t a bad book to get you started with Google Guava – indeed, it’d probably be quite hard to write a bad book on Guava given just how good a library Guava is.

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.

A tech conference … in an Italian castle … by the Med.

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 schedule is 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.

But – as you’ll see from a peruse of the schedule – other technologies being covered include Apache Cordova, Gaelyk, Apache Cassandra, Sencha Touch, JOOQ, Mixare, Appcelerator, ownCloud … something for most everyone!

Anyway, check it out as something a little different to round off your summer.

Welcoming Oscar Bou as a new committer to Apache Isis

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

If you’ve been following the Isis users and dev lists over the last few months, you can’t fail to have seen Oscar’s energetic involvement. Oscar came across Isis while building a similar framework in-house, and has since worked with his team to port much of their application – still in development – over to Isis. In so doing, Oscar has provided invaluable early testing and feedback for new features being implemented.

Oscar has ticked the boxes in terms of being a committer: using the mailing lists appropriately, raising JIRA tickets, provided patches to address specific issues, providing help to others in the community. But he’s gone beyond that in raising a number of insightful – sometimes challenging – questions regarding Isis’ design/responsibilities as a framework, and shown that he’s keen to address these issues and thus improve Isis as a product.

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


As a bit of tidying up, we have also voted for Jeroen van der Wal, and Maurizio Taverna, to be members of the Isis PMC. In fact, in many/most Apache projects, all committers are also PMC members, so it was something of an anomaly that we originally voted Jeroen and Maurizio as just committers.

Follow

Get every new post delivered to your Inbox.

Join 283 other followers