You was correct. I re-ran the templates, by removing the capitalization in the property field, and letting intact the generated @Property(), only to see the result. The error was gone.
So i am going to resume using the template to generate skeleton code for some other entities. Thanks Dan for your fast answer. -Eder 2017-02-14 10:28 GMT-04:00, Dan Haywood <d...@haywood-associates.co.uk>: > OK, this is pretty obscure, but it's because you've capitalized > "Description". Change it to: > > @Column(allowsNull = "false") > @Property > @Getter @Setter > private String description; > > Also, there's no need for @Property in this case... you haven't specified > any additional semantics. > > Why is this the fix? > > The @Column is a JDO annotaiton, @Property is an Isis annotation. > > JDO and Isis have different rules, unfortunately, for whether a > property/field should be treated as optional or not. For JDO, primitives > are treated as mandatory, everything else as optional. For Isis, it treats > everything as mandatory. > > The metamodel validation error is attempting to warn that there's an > incompatibility here. In Isis a property is really identified by the > getter method (in this case autogenerated by Lombok). In order to support > the use of Lombok, the framework looks for annotations both on the getter > method and also on any backing instance field. However, it infers the > backing field from the getter ... so getDescription() is expected to be > backed by "description", not "Description". > > Hope that makes sense. Raise a ticket in JIRA if you can think of a better > way for us to handle this.... > > Dan > > > On Tue, 14 Feb 2017 at 14:10 L Eder <eder200...@gmail.com> wrote: > >> The intact template-generated source code was: >> >> Component.java: >> " >> package domainapp.dom.PPB; >> >> import javax.jdo.annotations.Column; >> import javax.jdo.annotations.DatastoreIdentity; >> import javax.jdo.annotations.IdGeneratorStrategy; >> import javax.jdo.annotations.IdentityType; >> import javax.jdo.annotations.PersistenceCapable; >> import javax.jdo.annotations.Queries; >> import javax.jdo.annotations.Query; >> import javax.jdo.annotations.Unique; >> import javax.jdo.annotations.Version; >> import javax.jdo.annotations.VersionStrategy; >> >> import org.apache.isis.applib.annotation.BookmarkPolicy; >> import org.apache.isis.applib.annotation.DomainObject; >> import org.apache.isis.applib.annotation.DomainObjectLayout; >> import org.apache.isis.applib.annotation.Editing; >> import org.apache.isis.applib.annotation.Property; >> >> import lombok.Getter; >> import lombok.Setter; >> >> @PersistenceCapable( >> identityType = IdentityType.DATASTORE, >> schema = "PPB", >> table = "Component" >> ) >> @DatastoreIdentity( >> strategy = IdGeneratorStrategy.IDENTITY, >> column = "id") >> @Version( >> strategy = VersionStrategy.VERSION_NUMBER, >> column = "version") >> @Queries({ >> @Query( >> name = "find", language = "JDOQL", >> value = "SELECT " >> + "FROM domainapp.dom.PPB.Component "), >> @Query( >> name = "findByDescriptionContains", language = "JDOQL", >> value = "SELECT " >> + "FROM domainapp.dom.PPB.Component " >> + "WHERE Description.indexOf(:Description) >= 0 >> "), >> @Query( >> name = "findByDescription", language = "JDOQL", >> value = "SELECT " >> + "FROM domainapp.dom.PPB.Component " >> + "WHERE Description == :Description ") >> }) >> @Unique(name = "Component_Description_UNQ", members = { "Description" }) >> @DomainObject( >> editing = Editing.DISABLED >> ) >> @DomainObjectLayout( >> bookmarking = BookmarkPolicy.AS_ROOT >> ) >> public class Component implements Comparable<Component> { >> >> @Column(allowsNull = "false") >> @Property() >> @Getter @Setter >> private String Description; >> >> //region > compareTo, toString >> @Override >> public int compareTo(final Component other) { >> return org.apache.isis.applib.util.ObjectContracts.compare(this, >> other, "Description"); >> } >> >> @Override >> public String toString() { >> return org.apache.isis.applib.util.ObjectContracts.toString(this, >> "Description"); >> } >> //endregion >> >> } >> " >> >> ComponentMenu.java: >> " >> package domainapp.dom.PPB; >> >> import org.apache.isis.applib.annotation.Action; >> import org.apache.isis.applib.annotation.ActionLayout; >> import org.apache.isis.applib.annotation.BookmarkPolicy; >> import org.apache.isis.applib.annotation.DomainService; >> import org.apache.isis.applib.annotation.DomainServiceLayout; >> import org.apache.isis.applib.annotation.MemberOrder; >> import org.apache.isis.applib.annotation.NatureOfService; >> import org.apache.isis.applib.annotation.RestrictTo; >> import org.apache.isis.applib.annotation.SemanticsOf; >> >> @DomainService( >> nature = NatureOfService.VIEW_MENU_ONLY >> ) >> @DomainServiceLayout( >> named = "Components", >> menuOrder = "210" >> ) >> public class ComponentMenu { >> >> @Action( >> semantics = SemanticsOf.SAFE, >> restrictTo = RestrictTo.PROTOTYPING >> ) >> @ActionLayout( >> bookmarking = BookmarkPolicy.AS_ROOT >> ) >> @MemberOrder(sequence = "1") >> public java.util.List<Component> listAll() { >> return componentrepository.listAll(); >> } >> >> @Action( >> semantics = SemanticsOf.SAFE >> ) >> @ActionLayout( >> bookmarking = BookmarkPolicy.AS_ROOT >> ) >> @MemberOrder(sequence = "2") >> public java.util.List<Component> findByDescription( >> final String Description >> ) { >> return >> componentrepository.findByDescriptionContains(Description); >> } >> >> @Action( >> ) >> @MemberOrder(sequence = "3") >> public Component create( >> final String Description) { >> return componentrepository.create(Description); >> } >> >> @javax.inject.Inject >> ComponentRepository componentrepository; >> } >> " >> >> ComponentRepository.java: >> " >> package domainapp.dom.PPB; >> >> import org.apache.isis.applib.annotation.DomainService; >> import org.apache.isis.applib.annotation.NatureOfService; >> import org.apache.isis.applib.annotation.Programmatic; >> >> @DomainService( >> nature = NatureOfService.DOMAIN, >> repositoryFor = Component.class >> ) >> public class ComponentRepository { >> >> @Programmatic >> public java.util.List<Component> listAll() { >> return container.allInstances(Component.class); >> } >> >> @Programmatic >> public Component findByDescription( >> final String Description >> ) { >> return container.uniqueMatch( >> new org.apache.isis.applib.query.QueryDefault<>( >> Component.class, >> "findByDescription", >> "Description", Description)); >> } >> >> @Programmatic >> public java.util.List<Component> findByDescriptionContains( >> final String Description >> ) { >> return container.allMatches( >> new org.apache.isis.applib.query.QueryDefault<>( >> Component.class, >> "findByDescriptionContains", >> "Description", Description)); >> } >> >> @Programmatic >> public Component create(final String Description) { >> final Component component = >> container.newTransientInstance(Component.class); >> component.setDescription(Description); >> container.persistIfNotAlready(component); >> return component; >> } >> >> @Programmatic >> public Component findOrCreate( >> final String Description >> ) { >> Component component = findByDescription(Description); >> if (component == null) { >> component = create(Description); >> } >> return component; >> } >> >> @javax.inject.Inject >> org.apache.isis.applib.DomainObjectContainer container; >> } >> " >> >> >> ---------- Forwarded message ---------- >> From: L Eder <eder200...@gmail.com> >> Date: Tue, 14 Feb 2017 10:00:48 -0400 >> Subject: Error "The application failed to start due to a number of >> metamodel validation errors..." >> To: users@isis.apache.org >> >> Hello isis users: >> >> I tried to create my first domain object, called Component, using the >> file templates. >> >> I created a package under the dom module, and created the files >> Component. java, ComponentMenu.java, and ComponentRepository.java. >> >> I then ran the project, without build errors. >> >> However, opening the browser at http://localhost:8080/wicket/ i got this: >> >> Error “The application failed to start due to a number of metamodel >> validation errors. domainapp.dom.PPB.Component#description: >> incompatible default handling of required/optional properties between >> Isis and JDO; add @javax.jdo.annotations.Column(allowsNull="...")” >> >> Source: web browser >> >> Any help is appreciated, thanks >> >