On Fri, Sep 4, 2015 at 7:19 PM, Dan Haywood <[email protected]> wrote:
> +1 on that. > > That said, I still find myself conflicted on this. There's definitely some > value in spiking a business app, without tests, just in order to validate > that there's a worthwhile app to build. But if one takes that road, then > it's soooo very tempting to keep that prototype rather than throwing it > away. > > Although writing fixture scripts adds some overhead, I think it's > worthwhile to think of writing them as part of the requirements gathering > phase: what is the "given" (as in given/when/then) for a particular > scenario. If one isn't able to get the app into that initial state, then > there's probably some other prerequisite stories that still need to be > written. And of course, those fixture scripts are useful not only for > demoing the app, but can also be reused in the integration tests. > > Anyway, glad you're going back to simpleapp and then adding your own stuff > in piecemeal. I suspect it won't take too long to get back to where you > presently are, but I'm sure you'll tell us one way or another :-) > > I'll assume that being ignored is a sign that I've either said too much, or haven't thought enough! > Cheers > Dan > > PS: the simpleapp does have a BDD integration with Cucumber. Although BDD > is cool, it only makes sense to add the overhead if you are actually doing > BDD in collaboration with your business users. If you aren't (ie if > instead you are "just" deploying the app itself into a UAT environemtn in > order to obtain feedback / verification of behaviour) then I'd suggest just > focusing on the regular JUnit tests and remove those BDD specs. > > Agreed. Just a comment on electronic forms, my idea is to interact with the metamodel, in the way a viewer does I assume, then on anobject create or update, if any properties of an object aren't in the model the associated values still get saved as key:value pairs. This is not that far removed from what happens in the audit module I am guessing. This is simply to allow the forms to evolve under the control of the users, on a different cycle to the Java domain model. So the bones of it are there already. > > On 4 September 2015 at 10:11, Stephen Cameron <[email protected]> > wrote: > > > Hi, > > > > Yes, I could see the probable reason, but couldn't figure out what might > be > > a fix it. > > > > I have changed strategy and I think it will be better to begin over with > > simpleapp and add things in. Better to have a starting point that works > > then I know that the breakage was due to the last thing added, but also > to > > do it the TDD way. > > > > I looked at fixtures and integtests early on, but was in too much of a > > hurry to show something to the client. I've decided to go back to the > right > > approach. > > > > Try to eliminate the stress early (well mid-way) through the project > rather > > than it hitting at the end, as I read. > > > > On Fri, Sep 4, 2015 at 6:27 PM, Dan Haywood < > [email protected]> > > wrote: > > > > > Hi Steve, > > > > > > I've taken a quick look, and found one issue: > > > > > > > > > > > > https://github.com/Stephen-Cameron-Data-Services/isis-chats/blob/master/integtests/src/test/java/au/com/scds/isis/integtests/bootstrap/SimpleAppSystemInitializer.java#L51 > > > > > > should be "au.com.scds.chats.dom.module". > > > > > > > > > However, the error reporting clearly needs to be better to help track > > this > > > down ... I saw an exception regarding the misconfiguration in the > > console, > > > but it didn't seem to be written to stdout or stderr, for some reason. > > > > > > The subsequent exception that you are seeing (NullPointerException) is > > > because Isis tries to do a shutdown after a failed initialization, and > > this > > > fails - perhaps not surprisingly - because the initialization was > > > incomplete. I think this could be improved too, so will look into it. > > > > > > ~~~ > > > > > > With this issue fixed, I did then hit a further issue with respect to > > > database schemas. I will take a look at that later today, though I > have > > > some other things to work on first, I'm afraid > > > > > > HTH > > > Dan > > > > > > > > > > > > > > > On 4 September 2015 at 06:10, Stephen Cameron < > > [email protected]> > > > wrote: > > > > > > > Hi All, > > > > > > > > I am trying to make a start with integration testing, not much > success > > so > > > > far. > > > > > > > > I am getting an NullPointerException in the metamodel creation phase > I > > > > think. > > > > > > > > > > > The stack trace indicates that the framework can't find an > implementation > > > of TranslationService. Under normal circumstances the implementation > is > > > provided by default by the framework > > > (org.apache.isis.core.runtime.services.i18n.po.TranslationServicePo). > > > > > > > > > > > > > > > > I tried to set a breakpoint in Eclipse to see what is being > translated, > > > but > > > > that does not happen for this exception, do I need to have the Isis > > code > > > on > > > > the classpath? > > > > > > > > Maybe I can get more info on the metamodel validation in the log? I > am > > > > mostly just seeing the datanuclues db schema creation to this point. > > > > > > > > Perhaps I need to go back to the start, beginning with simpleapp and > > > start > > > > adding things to be truly doing TDD! Retrospective is not easy :) > > > > > > > > java.lang.NullPointerException > > > > 14:58:11,347 [ObjectReflectorDefault Thread-0 INFO ] shutting > down > > > > > > org.apache.isis.core.metamodel.specloader.ObjectReflectorDefault@6c9499ea > > > > at > > > > > > > > > > > > > > org.apache.isis.core.metamodel.facets.all.i18n.NamedFacetTranslated.<init>(NamedFacetTranslated.java:42) > > > > at > > > > > > > > > > > > > > org.apache.isis.core.metamodel.facets.all.i18n.TranslationFacetFactory.translateName(TranslationFacetFactory.java:98) > > > > at > > > > > > > > > > > > > > org.apache.isis.core.metamodel.facets.all.i18n.TranslationFacetFactory.process(TranslationFacetFactory.java:61) > > > > at > > > > > > > > > > > > > > org.apache.isis.core.metamodel.specloader.facetprocessor.FacetProcessor.process(FacetProcessor.java:324) > > > > at > > > > > > > > > > > > > > org.apache.isis.core.metamodel.specloader.specimpl.FacetedMethodsBuilder.createPropertyFacetedMethodsFromAccessors(FacetedMethodsBuilder.java:385) > > > > at > > > > > > > > > > > > > > org.apache.isis.core.metamodel.specloader.specimpl.FacetedMethodsBuilder.findAndRemovePropertyAccessorsAndCreateCorrespondingFacetedMethods(FacetedMethodsBuilder.java:339) > > > > at > > > > > > > > > > > > > > org.apache.isis.core.metamodel.specloader.specimpl.FacetedMethodsBuilder.createAssociationFacetedMethods(FacetedMethodsBuilder.java:316) > > > > at > > > > > > > > > > > > > > org.apache.isis.core.metamodel.specloader.specimpl.FacetedMethodsBuilder.getAssociationFacetedMethods(FacetedMethodsBuilder.java:294) > > > > at > > > > > > > > > > > > > > org.apache.isis.core.metamodel.specloader.specimpl.dflt.ObjectSpecificationDefault.createAssociations(ObjectSpecificationDefault.java:220) > > > > at > > > > > > > > > > > > > > org.apache.isis.core.metamodel.specloader.specimpl.dflt.ObjectSpecificationDefault.introspectTypeHierarchyAndMembers(ObjectSpecificationDefault.java:178) > > > > at > > > > > > > > > > > > > > org.apache.isis.core.metamodel.specloader.ObjectReflectorDefault.introspect(ObjectReflectorDefault.java:514) > > > > at > > > > > > > > > > > > > > org.apache.isis.core.metamodel.specloader.ObjectReflectorDefault.introspectIfRequired(ObjectReflectorDefault.java:501) > > > > at > > > > > > > > > > > > > > org.apache.isis.core.metamodel.specloader.ObjectReflectorDefault.loadSpecificationForSubstitutedClass(ObjectReflectorDefault.java:400) > > > > at > > > > > > > > > > > > > > org.apache.isis.core.metamodel.specloader.ObjectReflectorDefault.internalLoadSpecification(ObjectReflectorDefault.java:378) > > > > at > > > > > > > > > > > > > > org.apache.isis.core.metamodel.specloader.ObjectReflectorDefault.loadSpecification(ObjectReflectorDefault.java:344) > > > > at > > > > > > > > > > > > > > org.apache.isis.objectstore.jdo.datanucleus.DataNucleusApplicationComponents.catalogNamedQueries(DataNucleusApplicationComponents.java:242) > > > > at > > > > > > > > > > > > > > org.apache.isis.objectstore.jdo.datanucleus.DataNucleusApplicationComponents.initialize(DataNucleusApplicationComponents.java:112) > > > > at > > > > > > > > > > > > > > org.apache.isis.objectstore.jdo.datanucleus.DataNucleusApplicationComponents.<init>(DataNucleusApplicationComponents.java:103) > > > > at > > > > > > > > > > > > > > org.apache.isis.objectstore.jdo.datanucleus.DataNucleusPersistenceMechanismInstaller.createDataNucleusApplicationComponentsIfRequired(DataNucleusPersistenceMechanismInstaller.java:134) > > > > at > > > > > > > > > > > > > > org.apache.isis.objectstore.jdo.datanucleus.DataNucleusPersistenceMechanismInstaller.createObjectStore(DataNucleusPersistenceMechanismInstaller.java:110) > > > > at > > > > > > > > > > > > > > org.apache.isis.core.runtime.system.persistence.PersistenceSessionFactory.createPersistenceSession(PersistenceSessionFactory.java:95) > > > > at > > > > > > > > > > > > > > org.apache.isis.core.runtime.system.session.IsisSessionFactory.openSession(IsisSessionFactory.java:141) > > > > at > > > > > > > > > > > > > > org.apache.isis.core.runtime.system.context.IsisContextStatic.openSessionInstance(IsisContextStatic.java:70) > > > > at > > > > > > > > > > > > > > org.apache.isis.core.runtime.system.context.IsisContext.openSession(IsisContext.java:279) > > > > at > > > > > > > > > > > > > > org.apache.isis.core.runtime.system.IsisSystem.shutdownServices(IsisSystem.java:311) > > > > at > > > > > > > > > > > > > > org.apache.isis.core.runtime.system.IsisSystem.shutdown(IsisSystem.java:300) > > > > at > > > > > > > > > > > > > > org.apache.isis.core.integtestsupport.IsisSystemForTest.shutdown(IsisSystemForTest.java:467) > > > > at > > > > > > > > > > > > > > org.apache.isis.core.integtestsupport.IsisSystemForTest.access$100(IsisSystemForTest.java:74) > > > > at > > > > > > > > > > > > > > org.apache.isis.core.integtestsupport.IsisSystemForTest$Builder$1.run(IsisSystemForTest.java:301) > > > > java.lang.NullPointerException > > > > at > > > > > > > > > > > > > > org.apache.isis.core.metamodel.facets.all.i18n.NamedFacetTranslated.<init>(NamedFacetTranslated.java:42) > > > > at > > > > > > > > > > > > > > org.apache.isis.core.metamodel.facets.all.i18n.TranslationFacetFactory.translateName(TranslationFacetFactory.java:98) > > > > at > > > > > > > > > > > > > > org.apache.isis.core.metamodel.facets.all.i18n.TranslationFacetFactory.process(TranslationFacetFactory.java:61) > > > > at > > > > > > > > > > > > > > org.apache.isis.core.metamodel.specloader.facetprocessor.FacetProcessor.process(FacetProcessor.java:324) > > > > at > > > > > > > > > > > > > > org.apache.isis.core.metamodel.specloader.specimpl.FacetedMethodsBuilder.createPropertyFacetedMethodsFromAccessors(FacetedMethodsBuilder.java:385) > > > > at > > > > > > > > > > > > > > org.apache.isis.core.metamodel.specloader.specimpl.FacetedMethodsBuilder.findAndRemovePropertyAccessorsAndCreateCorrespondingFacetedMethods(FacetedMethodsBuilder.java:339) > > > > at > > > > > > > > > > > > > > org.apache.isis.core.metamodel.specloader.specimpl.FacetedMethodsBuilder.createAssociationFacetedMethods(FacetedMethodsBuilder.java:316) > > > > at > > > > > > > > > > > > > > org.apache.isis.core.metamodel.specloader.specimpl.FacetedMethodsBuilder.getAssociationFacetedMethods(FacetedMethodsBuilder.java:294) > > > > at > > > > > > > > > > > > > > org.apache.isis.core.metamodel.specloader.specimpl.dflt.ObjectSpecificationDefault.createAssociations(ObjectSpecificationDefault.java:220) > > > > at > > > > > > > > > > > > > > org.apache.isis.core.metamodel.specloader.specimpl.dflt.ObjectSpecificationDefault.introspectTypeHierarchyAndMembers(ObjectSpecificationDefault.java:178) > > > > at > > > > > > > > > > > > > > org.apache.isis.core.metamodel.specloader.ObjectReflectorDefault.introspect(ObjectReflectorDefault.java:514) > > > > at > > > > > > > > > > > > > > org.apache.isis.core.metamodel.specloader.ObjectReflectorDefault.introspectIfRequired(ObjectReflectorDefault.java:501) > > > > at > > > > > > > > > > > > > > org.apache.isis.core.metamodel.specloader.ObjectReflectorDefault.loadSpecificationForSubstitutedClass(ObjectReflectorDefault.java:400) > > > > at > > > > > > > > > > > > > > org.apache.isis.core.metamodel.specloader.ObjectReflectorDefault.internalLoadSpecification(ObjectReflectorDefault.java:378) > > > > at > > > > > > > > > > > > > > org.apache.isis.core.metamodel.specloader.ObjectReflectorDefault.loadSpecifications(ObjectReflectorDefault.java:415) > > > > at > > > > > > > > > > > > > > org.apache.isis.core.metamodel.specloader.specimpl.FacetedMethodsBuilder.createAssociationFacetedMethods(FacetedMethodsBuilder.java:310) > > > > at > > > > > > > > > > > > > > org.apache.isis.core.metamodel.specloader.specimpl.FacetedMethodsBuilder.getAssociationFacetedMethods(FacetedMethodsBuilder.java:294) > > > > at > > > > > > > > > > > > > > org.apache.isis.core.metamodel.specloader.specimpl.dflt.ObjectSpecificationDefault.createAssociations(ObjectSpecificationDefault.java:220) > > > > at > > > > > > > > > > > > > > org.apache.isis.core.metamodel.specloader.specimpl.dflt.ObjectSpecificationDefault.introspectTypeHierarchyAndMembers(ObjectSpecificationDefault.java:178) > > > > at > > > > > > > > > > > > > > org.apache.isis.core.metamodel.specloader.ObjectReflectorDefault.introspect(ObjectReflectorDefault.java:514) > > > > at > > > > > > > > > > > > > > org.apache.isis.core.metamodel.specloader.ObjectReflectorDefault.introspectIfRequired(ObjectReflectorDefault.java:501) > > > > at > > > > > > > > > > > > > > org.apache.isis.core.metamodel.specloader.ObjectReflectorDefault.loadSpecificationForSubstitutedClass(ObjectReflectorDefault.java:400) > > > > at > > > > > > > > > > > > > > org.apache.isis.core.metamodel.specloader.ObjectReflectorDefault.internalLoadSpecification(ObjectReflectorDefault.java:378) > > > > at > > > > > > > > > > > > > > org.apache.isis.core.metamodel.specloader.ObjectReflectorDefault.loadSpecification(ObjectReflectorDefault.java:344) > > > > at > > > > > > > > > > > > > > org.apache.isis.objectstore.jdo.datanucleus.DataNucleusApplicationComponents.catalogNamedQueries(DataNucleusApplicationComponents.java:242) > > > > at > > > > > > > > > > > > > > org.apache.isis.objectstore.jdo.datanucleus.DataNucleusApplicationComponents.initialize(DataNucleusApplicationComponents.java:112) > > > > at > > > > > > > > > > > > > > org.apache.isis.objectstore.jdo.datanucleus.DataNucleusApplicationComponents.<init>(DataNucleusApplicationComponents.java:103) > > > > at > > > > > > > > > > > > > > org.apache.isis.objectstore.jdo.datanucleus.DataNucleusPersistenceMechanismInstaller.createDataNucleusApplicationComponentsIfRequired(DataNucleusPersistenceMechanismInstaller.java:134) > > > > at > > > > > > > > > > > > > > org.apache.isis.objectstore.jdo.datanucleus.DataNucleusPersistenceMechanismInstaller.createObjectStore(DataNucleusPersistenceMechanismInstaller.java:110) > > > > at > > > > > > > > > > > > > > org.apache.isis.core.runtime.system.persistence.PersistenceSessionFactory.createPersistenceSession(PersistenceSessionFactory.java:95) > > > > at > > > > > > > > > > > > > > org.apache.isis.core.runtime.system.session.IsisSessionFactory.openSession(IsisSessionFactory.java:141) > > > > at > > > > > > > > > > > > > > org.apache.isis.core.runtime.system.context.IsisContextStatic.openSessionInstance(IsisContextStatic.java:70) > > > > at > > > > > > > > > > > > > > org.apache.isis.core.runtime.system.context.IsisContext.openSession(IsisContext.java:279) > > > > at > > > > > > > > > > > > > > org.apache.isis.core.runtime.system.IsisSystem.shutdownServices(IsisSystem.java:311) > > > > at > > > > > > > > > > > > > > org.apache.isis.core.runtime.system.IsisSystem.shutdown(IsisSystem.java:300) > > > > at > > > > > > > > > > > > > > org.apache.isis.core.integtestsupport.IsisSystemForTest.shutdown(IsisSystemForTest.java:467) > > > > at > > > > > > > > > > > > > > org.apache.isis.core.integtestsupport.IsisSystemForTest.access$100(IsisSystemForTest.java:74) > > > > at > > > > > > > > > > > > > > org.apache.isis.core.integtestsupport.IsisSystemForTest$Builder$1.run(IsisSystemForTest.java:301) > > > > 14:58:11,442 [ObjectReflectorDefault Thread-1 INFO ] shutting > down > > > > > > org.apache.isis.core.metamodel.specloader.ObjectReflectorDefault@6c9499ea > > > > > > > > Results : > > > > > > > > Tests in error: > > > > TODO: implement me > > > > TODO: implement me > > > > TODO: implement me > > > > TODO: implement me > > > > TODO: implement me > > > > TODO: implement me > > > > ParticipantsIntegTest$Create>SimpleAppIntegTest.initClass:33 » > > Runtime > > > > java.la... > > > > ParticipantsIntegTest$ListAll>SimpleAppIntegTest.initClass:33 » > > Runtime > > > > java.l... > > > > > > > > > >
