Hi! As Dan mentioned me as a "third party" ;-) here's a link to the demo I did, the 'Transport Planning Manger' http://tpmdemo.eidemsnesset.cloudbees.net/
The background is a bit like the example for "Implementing Design Driven Development", but I didn't know about it when I started. I had little time to come up with something useful but ISIS has made it possible. The demo only uses the in-memory object store. Unfortunately the project has come to an end for now. The source code can be found here g...@git.assembla.com:transportplanner.git Cheers Christian ________________________________________ From: Dan Haywood [d...@haywood-associates.co.uk] Sent: Friday, May 03, 2013 12:21 AM To: users; o....@gesconsultor.com Subject: Re: Hi to all. Project introduction and some doubts Hi Oscar, Thanks for your interest in Isis, and for your very interesting email. I'm replying to both you and to the mailing list; you might want to subscribe to users@isis.a.o and/or dev@isis.a.o. I'll reply in line so that I don't miss anything.... On 2 May 2013 17:36, GESCONSULTOR - Óscar Bou <o....@gesconsultor.com>wrote: > > We are using JPA with an Hibernate implementation ... As you probably know, the Hibernate license is incompatible with ASF; this is one of the reasons why we use JDO/DN. > > Here are some examples of Domain classes: > > [snip] > As you can imagine through the previous code, our framework vision it's > quite similar to this one. Yes, pretty similar. I didn't notice any actions though? Where do you put your "know-how-to" responsibilities; do you subscribe to Isis' "behaviourally complete" objects? > An important difference is support for multiple languages on some critical > annotations. > As you can see previously, de @XMSField is like the @Named one from ISIS, > but supporting localization. > In fact, Isis' architecture does support localization. The @Named annotation is interpreted by the various FacetFactory's [1] that make up Isis' programming model and are part of its metamodel builder. In the case of @Named, it is NamedAnnotationOnMemberFacetFactory [2], which installs an implementation of NamedFacet on the property. In addition, Isis has an API called FacetDecorator. One implementation is I18NFacetDecorator [3]. From this, you'll see that we can provide localized names, help text and descriptions. (As an aside: this FacetDecorator API actually predates the FacetFactorys, and we do intend (at least, I would like) to just have the FacetFactory API, and have an implementation of FacetFactory that can do the localization. Not a big deal). Just a note on your @XMSField annotation; it seems a bit odd to me to have the translations in the text rather than in a resource bundle. But presumably it fits your development process well enough, otherwise you wouldn't have done it that way. One thing you might want to consider: you could if you wanted write your own implementation of NamedFacetFactory that understands your @XMSField annotation, if you wanted. In other words, teach Isis about your programming model, rather than the other way around. (You would still need to translate the JPA stuff into JDO, though). > The @Description should also support localization. In our case, we are > directly generating the help texts from the source files using a custom > Doclet. > > You mean @DescribedAs? Also supported by the I18NFacetDecorator. > I'm following the project and email list for the last months, because we > have been spending a lot of resources developing our framework but are > thinking about evaluating for future Bounded Contexts a mixed approach, > using Apache Isis for the Domain Model development, testing and REST API, > and our technology for the User Interface and other infrastructure areas. > > That's very interesting to hear. Which makes me ask in turn: is your UI stuff proprietary? or could it be open sourced in turn as another viewer for Isis? > Migration from JPA to JDO seems quite fast and easy (but directly > supporting it would be perfect, despite what I've seen from JDO seems > really, really good). As our programming model was also quite similar, it > seems also relatively easy to "migrate" our custom annotations to your > equivalent ones. > > Prior to starting the formal evaluation of the migration process, we want > to make a prototype migrating one Bounded Context. For that, we have used > the Maven archetype for creating the prototype. Current Archetype is really > good exposing really fast the Domain through a web and a REST interface. > But we find Testing (Junit mainly but also BDD), "the programmer's > interface", is missing and would be perfect to have some test examples with > the JUnit viewer and the BDD viewer. > > With respect to the JUnit viewer, at the moment it focuses on testing the UI/domain interaction, and just using an in-memory objectstore. Separately, there is IsisSystemForTest [4], which can be used to bootstrap an Isis runtime for domain/DB integration (via the JDO objectstore) What I want to do is to combine these frameworks into a single JUnit framework, which allows domain/DB integration and optionally allows the full-stack UI/domain/DB integration too. This is the main reason I haven't released the JUnit viewer yet since us becoming a TLP. With respect to the BDD viewer, I think this also needs to work the same way; and it probably should be made part of the same single framework. So, then it's one integration testing stack for domain/DB testing, optionally testing the UI interaction through the existing JUnit viewer stuff or through the BDD viewer stuff. > It would also be really good to have a more complex model on the > Archetype, showing the proper annotations and use of Entities, > ValueObjects, Aggregates, Repositories, Factories, ... As you probably know if you've been following the mailing lists, Jeroen and I are both working part-time on a substantial app for his company, building an estate management application ("Estatio"). Think of it as the calculation engine for rents for tenants in shopping centres and the like, and then integrates with a separate general ledger system using the new PublishingService that I developed a month or two back. The intention is for this app to be open sourced when done (later this year, we expect). Some parts of it (to do with proprietary calculation algorithms) will remain closed source, but we think we can provide suitable plugin points such that the vast majority of the app is open sourced. The app also has a bunch of integration tests written using the IntegSystemForTest. By all means contact Jeroen or me off-list regarding this. > It would be ideal to have a model equivalent to the SCRUM one exposed on > the "Implementing Design Driven Development", showing how to implement it > on Apache Isis. Yes, that is a nice little domain that one could work up. Don't have the bandwidth myself, but if you are doing an evaluation of Isis, perhaps you might consider building it as a proof-of-concept and put it on github. Also, you might want to ping Christian Steinbach, who was very active a month or two back on the mailing lists while writing a demonstrator app using Isis. He would provide some useful "third-party" feedback for you, I would have thought. > It would also help on identifying "gaps" on the framework or, if different > design decisions have been taken, to justify it by comments (for example, > the one to not referencing Aggregates by id due to automatic lazy loading > on DataNucleus, that was discussed some days ago). > An unsatisfactory exchange... I've never had an answer I could understand as to why one would wish to do all that tedious mucking about with Ids if one has the power of an ORM to call upon. And all that extra boilerplate ultimately impedes being able to develop the ubiquitous language. > > Another design recommendation would be the creation of an annotation, > method example, etc. for automatically registering a new service. We are > now editing the wicket viewer "isis.properties" file, but we waited for an > automatic "convention over configuration" way of doing it. > Yes, I have this on my todo list... to automatically discover services, eg using the META-INF/services mechanism (or perhaps CDI). There is, in fact, a not-at-all-documented API to do this. If you create an implementation of ServicesInstaller [5], then you can specify to use it by adding a setting in isis.properties: isis.services-installer=com.foo.bar.MyServicesInstaller Haven't tried this for a good while, but it ought to work... You could use some code similar to the RegisterEntities domain service [6] that we wrote to bootstrap JDO more reliably. > > Is there an example with a more complex Domain, testing, etc. anywhere > that we can further analyze? > > Estatio would be the best example. When it's done, we do intend to use it as a substantive case study. "When it's done" being the operative words in that sentence. Hope that was helpful, Cheers Dan [1] https://github.com/apache/isis/blob/master/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java [2] https://github.com/apache/isis/tree/master/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/members/named/annotation [3] https://github.com/apache/isis/blob/master/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facetdecorators/i18n/I18nFacetDecorator.java [4] https://github.com/apache/isis/tree/master/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport [5] https://github.com/apache/isis/tree/master/core/runtime/src/main/java/org/apache/isis/core/runtime/services [6] https://github.com/apache/isis/tree/master/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/service > Thanks a lot in advance, > > Oscar > > > >