Hi folks, On Friday and Saturday just gone a number of us - Jeroen, Oscar, Maurizio, Kevin, Nacho and myself (5 committers and 1 non-committer) - met up in Milan for the first "IsisCon". Ok, not exactly a conference, but a great opportunity to see what we'd each been using Isis for, and to build a roadmap for Isis' future. There was also plenty of conversation about "marketing" Isis, in order to build up the user base.
I believe we all came away the event feeling it had been extremely useful (as well as enjoyable), and I think there was a consensus on what that roadmap and respective priorities for Isis should be. That said, the "Apache way" is for such matters to be discussed on the mailing list: "if it isn't on the mailing list then it didn't happen". I therefore want to summarize the main topics of conversation that we had. For those who were in Milan: please amplify/extend/correct as necessary. For everyone else: please join in the conversation with your own thoughts. Remember: we assume silent consensus. ~~~~~ Some of the ideas that follow build upon each other, some are independent of each other. I won't attempt to outline an exact timetable, but you can see that some of this work could be performed in parallel. For example, improved Shiro support (4) could be done at the same time as simplifying the framework (1). 1. Simplifying the framework Apache Isis is the evolution of the original Naked Objects Framework for Java; when it entered the Apache incubator in 2010 the codebase was the NOF code along with a number of "sister projects" that I had written over the previous few years. Some of this codebase is very old however - Rob Matthews (one of our committers) actually started on NOF in about 1999; 15 years ago! Obviously, since then a lot has changed, both in terms of the architectures we aim to support, and in other libraries/frameworks that are available that we can leverage. For example, originally the NOF was intended to run either as standalone client, or in client/server mode, or as a server-only webapp. In Isis we retired the client/server remoting support when we graduated in 2012, but we still have the Drag-n-drop (DnD) viewer as a standalone Java AWT viewer (even though this hasn't been released since we graduated the Apache incubator in 2012). Another change over the years is in persistence support. Isis has an ObjectStore API, and this allows different ObjectStore implementations to be plugged in. These include the JDO/Datanucleus ObjectStore, but also the In-Memory ObjectStore, the XML ObjectStore and the NoSQL ObjectStore. (Again, these latter two have not been released since we graduated). While the JDO/Datanucleus ObjectStore manages (through the DataNucleus ORM) its own lazy loading and dirty object tracking, the other ObjectStores do not have this ability; which means that the core-runtime component of the Isis framework must handle such matters instead. This introduces a lot of complexity into Isis, as it must do many of the tasks that an ORM would normally do. Finally, another area where we have the opportunity to leverage third party frameworks is in security. Isis defines its own authentication and authorization APIs, and these are exposed to the domain code in the DomainObjectContainer#getUser() method. Right now we have three such implementations - a simple file-based implementation, a do-nothing "bypass" implementation, and an implementation based on Apache Shiro. So... we now feel the time is right to simplify: * Isis will run only as a server-side webapp. This implies that the DnD viewer will be retired. This will also enable Isis' bootstrapping to be simplified and rationalized. * Isis' current ObjectStore API will be removed, and the JDO/DataNucleus ObjectStore implementation then made part of core. The other ObjectStore implementations will be retired. This step in particular should enable considerable simplification * Isis will adopt the Shiro authentication classes rather than define its own. This will also allow authentication to be moved into the core. Each of these changes is relatively low risk, and introduces only minimal changes to existing domain code. In fact, hopefully only the change to authentication classes will require updates to existing code. The main intent is to throw away code that no longer provides any benefit, thus making it easier for others to learn a simplified Isis codebase. 2. JPA support Having simplified the codebase, the next step (so far as persistence is concerned) is to also support JPA. While DataNucleus is the reference implementation for JDO, we do recognize that most Java developers know and therefore prefer JPA over JDO. Luckily DataNucleus does also support JPA. Hopefully it will be easy enough to allow developers to use either API - JDO or JPA - with DataNucleus as the underlying implementation. 3. Alternative Persistence providers Having in (1) made Isis dependent on an ORM (for lazy loading and dirty object tracking) and on DataNucleus in particular, the next step in the roadmap is to re-introduce pluggability so that developers can use other ORM implementations; particularly for the JPA API. Being an Apache product means that we cannot dependent on certain licenses, but we certainly provide alternative implemenation based on either Apache OpenJPA, or on EclipseLink (the old TopLink product). We might also look to provide an implementation for the market leader, namely Hibernate. However, because Hibernate is LGPL, this implementation would need to live outside of Apache Isis' formal codebase, eg in the apache-extras.org site or perhaps just likely on github. 4. Improved support for Shiro We've noticed a number of users wanting to use our Shiro integration, with Shiro configured to use a JDBC Realm. It ought to be relatively simple to build Isis entities that map onto the Shiro concepts (users, roles, permissions). In this way Isis could provide a self-contained security subsystem for managing users "out-of-the-box". We anticipate delivering this as an optional module that could be included as necessary. An extension of this is to deliver a standalone application built with Isis for administrating the users/roles/permissions for any application configured to use the Shiro JDBC realm (not just an Isis application). 5. Other Reusable modules In the applib there are a number of services; some depend on parts of the Isis runtime; some do not. Some have their own entities, some do not: - CommandContext (applib implementation) - BackgroundService (core-runtime implementation) - BackgroundCommandService (JDO implementation, with entities) - AuditingService3 (JDO implementation, with entities) - PublishingService (JDO implementation, with entities) - ApplicationSettingsServiceRW (JDO implementation, with entities) - UserSettingsServiceRW (JDO implementation, with entities) - ClockService (applib implementation) - QueryResultsCache (applib implementation) - Scratchpad (applib implementation) - MementoService (core-runtime implementation) - BookmarkService (core-metamodel implementation) - XmlSnapshotService (core-runtime) - EventBus (core-runtime implementation) - ClassDiscoveryService (applib implementation, +optional org.reflections dependency) - WrapperFactory (core-wrapper) - DeveloperUtilitiesService (core-metamodel implementation) Extended the idea of the Shiro security module (4, above), we think it makes sense to modularize these other services; probably in five or so modules in line with the grouping shown above. That way developers could bring in a dependency to the services that they require, and ignore the others. 6. Profile Store The profile store is a component of the framework that is not supported by either the Wicket or Restful Objects viewers, but whose functionality is broadly superceded by the UserSettingsService. In line with simplification (1) we'll retire this component. 7. Restful APIs The Restful Objects viewer implements the Restful Objects spec [2] and provides a full REST Hypermedia API to the Isis metamodel and runtime. The original intent of the RO spec/viewer was to provide a rich http/json API, rigorously following RESTful principles, to enable both the development of a "next-gen" generic viewer written in something like AngularJS [3], and also to enable bespoke REST applications to be written. While we still feel that the RO viewer is appropriate for the former, what is becoming more obvious is that the RO viewer is too complex for "idiomatic" RESTful access when using tools such as AngularJS and in particular higher-level lbraries such as Angular UI [4] We therefore have decided to: - rename the Restful Objects viewer, probably to be called the "Hypermedia API" (remove the term "viewer") - implement a new "Idiomatic REST" API which - although not necessarily REST in the purist's sense - will play well with the aforementioned tools. Many of the capabilities of the existing RO viewer can be leveraged to write this new Idiomatic REST API. But we do hope it will open up the possibilities of using Isis as a back-end to a new group of users. And, an influx of new users might then lead in turn to the development of a generic viewer against the "Hypermedia API". 8. Wicket Viewer We intend to continue developing the Wicket viewer. One part of its development will be to re-implement its components to use Wicket-Bootstrap [5]; this will make it easier for its look-n-feel to be customised. We will also probably rename it. "Wicket" is merely the implementation technology; its name should represent what it's role is. Possible names are the "default viewer", or the "standard viewer" (preferences? alternatives?) 9. Community outreach In line with making Isis appeal to Javascript developers, we also want to make contact with the user communities of some of the technologies that we use. Within Apache these include Wicket and Shiro. Meanwhile Oscar and Nacho's application has a custom UI that leverages Wavemaker and React.js. Once we have the new "Idiomatic REST API" implemented, then opportunities open up to build demos to attract AngularJS and similar technologies (eg dhtmlx). 10. "framework" vs "platform" Although Isis was originally conceived as a framework - indeed, was originally named the Naked Objects Framework - the consensus in Milan was that it would be better to position Isis as a platform. Part of the rationale comes down with the way in which Isis is deployed, either sitting on top of the JEE platform or Cloud platforms such as Google App Engine. 11. Better documentation, better website. Probably every open source project would wish for better documentation and examples; we are no different, and we intend to keep improving the docs and providing examples of usage. On the homepage one idea is to make Isis' value proposition more obvious. We intend to distinguish our audience, though; what a business person wants to know about is different from what a techie wants. So we will provide different material for each to consume. For a bit of interest/originality, Maurizio has offered to develop some goanimate [6] cartoon videos; he has used these with some success in his own software development company. Right now I am working on some scripts to be developed; one 2-minute business-focused one, and a number (3 or 4) of 2-minute technicaly focussed ones. Also, I am aware that much of the materials were written by me and all of the screencasts have my voice on them. But there should be other voices present on the website; Isis isn't a one-man show and visitors to the website shouldn't get that impression. 12. The great and the good With so many great open source projects out there it can of course be difficult to get heard and discovered. But if we can get some publicity and hopefully nice words/endorsements from the "great and the good", then that might well help increase our user base. Once we have updated the website a little (see 10) there are a few individuals we have in mind who we will look to contact. 13. Conferences, articles, podcasts Jeroen and I are intending to submitting a couple of sessions to ApacheCon EU in Hungary [7], and in general try to do a few more sessions. I have also promised an 500-word blog post for Zeroturnaround to advertise our JRebel integration. And, it'd also be good to do some podcasts sessions; I am sure they are several looking for new people to talk with. ~~~ As you'll have noticed, the last 4 or 5 topics fall broadly under the category of "marketing". So - if you've read this far - can I ask anyone and everyone in Isis to start help generate collateral. Blog posts (not just in the English language) are great; or ask (and self-answer) questions on stackoverflow (with the #isis tag); or simply just send hints and tips on the mailing lists and I'll put them onto the website. ~~~ OK, I think that's it. As I say, for those who were in Milan, please amplify/expand/correct. For everyone else, your comments/thoughts are welcome. Cheers Dan Apache Isis PMC Chair [1] http://semver.org [2] http://restfulobjects.org [3] http://angularjs.org/ [4] http://angular-ui.github.io/bootstrap [5] http://wb.agilecoders.de/demo/components [6] http://goanimate.com [7] http://www.apachecon.com/