Hi Oscar, I don't know of any open source projects using Isis that you could look at but I did start (and never finished) a port of the dddsample[1] app to Isis. The code is on GitHub[2] but I don't know how much help it will be since it's so incomplete. I hope to make more progress this summer. I did raise one ticket related to something you mentioned your framework handles related to "field groups"[3]. Hopefully I'll finish that too. You can see what I intend it to look like by selecting one of the Cargos from the list here[4].
Hope it helps. -- Adam [1] http://dddsample.sourceforge.net/ [2] https://github.com/adamhoward/onaboat [3] https://issues.apache.org/jira/browse/ISIS-348 [4] http://immense-brook-7613.herokuapp.com/wicket/wicket/bookmarkable/org.apache.isis.viewer.wicket.ui.pages.action.ActionPage?pageType=ACTION&actionSingleResultsMode=REDIRECT&objectOid=onaboat.domain.model.cargo.CargoRepository:1&actionType=USER&actionOwningSpec=onaboat.domain.model.cargo.CargoRepository&actionId=findAll%28%29&pageTitle=Find+All&actionMode=RESULTS On Thu, May 2, 2013 at 11:36 AM, GESCONSULTOR - Óscar Bou < [email protected]> wrote: > > Hi to all! > > My name is Oscar and I'm the Team Leader of a software solution that is > implemented with a vision really similar to Isis and we are also using some > DDD patterns. > > We are using JPA with an Hibernate implementation and custom annotations > for defining field groups, localized names on the fields, field help texts > extracted from the source Java help, etc. > > All entity forms are generated automatically by a custom generator over > Wavemaker technology stack (Spring + Hibernate + Java + JavaScript + DOJO). > > Here are some examples of Domain classes: > > A PARTY CLASS > > @XMSEntityNames({ > @XMSEntityName(locale = "es", name = "Organización / > Persona"), > @XMSEntityName(locale = "en", name = "Party") }) > @Entity > @Inheritance(strategy = InheritanceType.JOINED) > @DiscriminatorColumn(discriminatorType = DiscriminatorType.STRING, name = > "DTYPE", length = 64) > public abstract class Party extends AbstractMultiTenantEntity { > > @XMSField(locales = { @XMSLocale(locale = "es", caption = "Es > Externa"), > @XMSLocale(locale = "en", caption = "Is External") > }) > private Boolean isExternal; > > private String userName; > > @OneToMany(mappedBy = "party", cascade = CascadeType.REMOVE) > @XMSField(locales = { @XMSLocale(locale = "es", caption = > "Direcciones"), > @XMSLocale(locale = "en", caption = "Addresses") }) > private Set<AddressParty> addresses; > > @OneToMany(mappedBy = "party", cascade = CascadeType.REMOVE) > @XMSField(locales = { > @XMSLocale(locale = "es", caption = > "Responsabilidades"), > @XMSLocale(locale = "en", caption = > "Responsibilities") }) > private Set<ResponsibilityParty> responsibilities; > > > [... getters, setters and custom methods ...] > > A CLASS WITH SECTIONS (FIELD GROUPS ON THE USER INTERFACE) > > @Entity > @Inheritance(strategy = InheritanceType.JOINED) > @XMSSections(value = { > @XMSSection(code = "RISK", locales = { > @XMSLocale(locale = "es", caption = > "Riesgo", description = "Información relacionada con la Gestión del > Riesgo"), > @XMSLocale(locale = "en", caption = > "Risk", description = "Information related to the Management of Risks") }), > @XMSSection(code = "CONTINUITY", locales = { > @XMSLocale(locale = "es", caption = > "Continuidad de Negocio", description = "Información relacionada con la > Continuidad de Negocio"), > @XMSLocale(locale = "en", caption = > "Business Continuity", description = "Information related to the Continuity > of the Business Activities and their impact on Customer's Products and > Services") }) }) > public abstract class AssetAssessment extends AbstractMultiTenantEntity { > > @SuppressWarnings("unused") > @Transient > @XMSField(show = false, locales = { @XMSLocale(locale = "es", > caption = "Activo") }, section = "RISK") > private XMSAsset asset; > > /***** CHARACTERIZATION *****/ > > @XMSField(locales = { @XMSLocale(locale = "es", caption = > "Valoración del Activo") }, section = "RISK") > @Embedded > private AssetAssessmentValuation assetValuation; > > @XMSField(locales = { @XMSLocale(locale = "es", caption = > "Localización") }) > @ManyToOne > private LocationAssessment location; > > > > > As you can imagine through the previous code, our framework vision it's > quite similar to this one. 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. > The @Description should also support localization. In our case, we are > directly generating the help texts from the source files using a custom > Doclet. > > 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. > > 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. > > 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, ... 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. 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). > > 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. > > Is there an example with a more complex Domain, testing, etc. anywhere > that we can further analyze? > > Thanks a lot in advance, > > Oscar > > > >
