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

Reply via email to