Might be worth using Project Lombok, then... less boilerplate so easier to
spot such issues.


http://isis.apache.org/guides/cg.html#_cg_ide_project-lombok


On 26 November 2015 at 10:08, Stephen Cameron <steve.cameron...@gmail.com>
wrote:

> Yes, I still had a variable region declared in Person that was over-riding
> the one in the base class I guess, so the setter was setting the super
> class but the subclass value was being persisted.
>
> On Thu, Nov 26, 2015 at 8:45 PM, Stephen Cameron <
> steve.cameron...@gmail.com
> > wrote:
>
> > My silly mistake!
> >
> > On Thu, Nov 26, 2015 at 8:40 PM, Stephen Cameron <
> > steve.cameron...@gmail.com> wrote:
> >
> >> That is not the problem then,
> >>
> >> Its a bit bizarre actually, I generated some logging and added some
> >> messages, I see that two objects Participation and Participant do have
> >> their region value set but the Person object doesn't.
> >>
> >> All these objects extend the same base class, but  the SQL insert
> created
> >> for Person doesn't have the value whereas it does for the others.
> >>
> >> The code is as follows:
> >>
> >>     @Programmatic
> >>     public void setUpdatedBy(String updatedBy) {
> >>         if (getCreatedBy() == null) {
> >>             setCreatedBy(updatedBy);
> >>             System.out.println(">>>updatedBy: " + updatedBy);
> >>             if (userRepository != null) {
> >>                 System.out.println(">>>repositoryExists");
> >>                 ApplicationUser user =
> >> userRepository.findByUsername(updatedBy);
> >>                 if (user != null && user.getTenancy() != null) {
> >>                     String path = user.getTenancy().getPath();
> >>                     String name = path.substring(path.lastIndexOf("/") +
> >> 1);
> >>                     if (name.isEmpty())
> >>                         name = "GLOBAL";
> >>                     System.out.println(">>>setting Region for name: " +
> >> name);
> >>                     setRegion(regions.regionForName(name));
> >>                 }else{
> >>                     System.out.println(">>>>user tenancy not found");
> >>                     setRegion(regions.regionForName("GLOBAL")); //TODO
> >> temp fix
> >>                 }
> >>             }
> >>             else{
> >>                 System.out.println(">>>userRepository is null");
> >>                 setRegion(regions.regionForName("GLOBAL")); //TODO temp
> >> fix
> >>             }
> >>         } else
> >>             setLastModifiedBy(updatedBy);
> >>     }
> >>
> >> The stdout:
> >>
> >>
> >> 20:20:25,720  [Native               qtp209845522-18 DEBUG]  SELECT
> >> 'au.com.scds.chats.dom.module.general.Person' AS
> >>
> NUCLEUS_TYPE,a0.createdby,a0.createdon,a0.lastmodifiedby,a0.lastmodifiedon,a0.birthdate,a0.email,a0.emailaddress,a0.firstname,a0.homephonenumber,a0.middlename,a0.mobilephonenumber,a0.oldid,a0.preferredname,a0.surname,a0.person_id
> >> FROM person a0 WHERE a0.surname = <'Ncks'>
> >> >>>updatedBy: sven
> >> >>>repositoryExists
> >> 20:20:25,732  [Datastore            qtp209845522-18 DEBUG]  Closing
> >> PreparedStatement
> >>
> "org.datanucleus.store.rdbms.datasource.dbcp.DelegatingPreparedStatement@76fe870e
> >> "
> >> 20:20:25,732  [Datastore            qtp209845522-18 DEBUG]  Closing
> >> PreparedStatement
> >>
> "org.datanucleus.store.rdbms.datasource.dbcp.DelegatingPreparedStatement@76fe870e
> >> "
> >> 20:20:25,732  [Native               qtp209845522-18 DEBUG]  SELECT
> >> 'org.isisaddons.module.security.dom.user.ApplicationUser' AS
> >>
> NUCLEUS_TYPE,a0.accounttype,a0.emailaddress,a0.encryptedpassword,a0.familyname,a0.faxnumber,a0.givenname,a0.knownas,a0.phonenumber,a0.status,a0.username,
> >> a0.id,a0.version FROM applicationuser a0 WHERE a0.username = <'sven'>
> >> >>>setting Region for name: GLOBAL
> >> 20:20:25,738  [Datastore            qtp209845522-18 DEBUG]  Closing
> >> PreparedStatement
> >>
> "org.datanucleus.store.rdbms.datasource.dbcp.DelegatingPreparedStatement@7dfe372f
> >> "
> >> 20:20:25,738  [Datastore            qtp209845522-18 DEBUG]  Closing
> >> PreparedStatement
> >>
> "org.datanucleus.store.rdbms.datasource.dbcp.DelegatingPreparedStatement@7dfe372f
> >> "
> >> 20:20:25,738  [Native               qtp209845522-18 DEBUG]  SELECT
> >> 'au.com.scds.chats.dom.module.general.names.Region' AS
> >> NUCLEUS_TYPE,a0.`name` FROM region a0 WHERE a0.`name` = <'GLOBAL'>
> >> 20:20:25,785  [Datastore            qtp209845522-18 DEBUG]  Using
> >> PreparedStatement
> >> "org.datanucleus.store.rdbms.ParamLoggingPreparedStatement@74efbe8f"
> for
> >> connection
> >>
> "org.datanucleus.store.rdbms.datasource.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@15e2c48d
> >> "
> >> 20:20:25,785  [Datastore            qtp209845522-18 DEBUG]  Using
> >> PreparedStatement
> >> "org.datanucleus.store.rdbms.ParamLoggingPreparedStatement@74efbe8f"
> for
> >> connection
> >>
> "org.datanucleus.store.rdbms.datasource.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@15e2c48d
> >> "
> >> 20:20:25,792  [Native               qtp209845522-18 DEBUG]  INSERT INTO
> >> person
> >>
> (birthdate,contacttype_name,email,emailaddress,englishskill_englishskill_id,firstname,homephonenumber,mailaddress_location_id,middlename,mobilephonenumber,oldid,preferredname,region_name,salutation_name,streetaddress_location_id,surname,createdby,createdon,lastmodifiedby,lastmodifiedon)
> >> VALUES
> >>
> (<1960-10-19>,<null>,<null>,<null>,<null>,<'Stevie'>,<null>,<null>,<null>,<null>,<null>,<null>,<null>,<null>,<null>,<'Nicks'>,<'sven'>,<2015-11-26
> >> 20:20:25.74>,<null>,<null>)
> >> 20:20:25,795  [Datastore            qtp209845522-18 DEBUG]  Closing
> >> PreparedStatement
> >> "org.datanucleus.store.rdbms.ParamLoggingPreparedStatement@74efbe8f"
> >> 20:20:25,795  [Datastore            qtp209845522-18 DEBUG]  Closing
> >> PreparedStatement
> >> "org.datanucleus.store.rdbms.ParamLoggingPreparedStatement@74efbe8f"
> >> >>>updatedBy: sven
> >> >>>repositoryExists
> >> 20:20:25,808  [Datastore            qtp209845522-18 DEBUG]  Closing
> >> PreparedStatement
> >>
> "org.datanucleus.store.rdbms.datasource.dbcp.DelegatingPreparedStatement@6822e803
> >> "
> >> 20:20:25,808  [Datastore            qtp209845522-18 DEBUG]  Closing
> >> PreparedStatement
> >>
> "org.datanucleus.store.rdbms.datasource.dbcp.DelegatingPreparedStatement@6822e803
> >> "
> >> 20:20:25,809  [Native               qtp209845522-18 DEBUG]  SELECT
> >> 'org.isisaddons.module.security.dom.user.ApplicationUser' AS
> >>
> NUCLEUS_TYPE,a0.accounttype,a0.emailaddress,a0.encryptedpassword,a0.familyname,a0.faxnumber,a0.givenname,a0.knownas,a0.phonenumber,a0.status,a0.username,
> >> a0.id,a0.version FROM applicationuser a0 WHERE a0.username = <'sven'>
> >> >>>setting Region for name: GLOBAL
> >> 20:20:25,812  [Datastore            qtp209845522-18 DEBUG]  Closing
> >> PreparedStatement
> >>
> "org.datanucleus.store.rdbms.datasource.dbcp.DelegatingPreparedStatement@6949a458
> >> "
> >> 20:20:25,812  [Datastore            qtp209845522-18 DEBUG]  Closing
> >> PreparedStatement
> >>
> "org.datanucleus.store.rdbms.datasource.dbcp.DelegatingPreparedStatement@6949a458
> >> "
> >> 20:20:25,812  [Native               qtp209845522-18 DEBUG]  SELECT
> >> 'au.com.scds.chats.dom.module.general.names.Region' AS
> >> NUCLEUS_TYPE,a0.`name` FROM region a0 WHERE a0.`name` = <'GLOBAL'>
> >> 20:20:25,815  [Datastore            qtp209845522-18 DEBUG]  Using
> >> PreparedStatement
> >> "org.datanucleus.store.rdbms.ParamLoggingPreparedStatement@7fb858f5"
> for
> >> connection
> >>
> "org.datanucleus.store.rdbms.datasource.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@15e2c48d
> >> "
> >> 20:20:25,815  [Datastore            qtp209845522-18 DEBUG]  Using
> >> PreparedStatement
> >> "org.datanucleus.store.rdbms.ParamLoggingPreparedStatement@7fb858f5"
> for
> >> connection
> >>
> "org.datanucleus.store.rdbms.datasource.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@15e2c48d
> >> "
> >> 20:20:25,816  [Native               qtp209845522-18 DEBUG]  INSERT INTO
> >> participant
> >>
> (lifehistory_lifehistory_id,loneliness_loneliness_id,person_person_id,socialfactors_socialfactors_id,status,createdby,createdon,lastmodifiedby,lastmodifiedon,region_name)
> >> VALUES (<null>,<null>,<8>,<null>,<'ACTIVE'>,<'sven'>,<2015-11-26
> >> 20:20:25.814>,<null>,<null>,<'GLOBAL'>)
> >> 20:20:25,817  [Datastore            qtp209845522-18 DEBUG]  Closing
> >> PreparedStatement
> >> "org.datanucleus.store.rdbms.ParamLoggingPreparedStatement@7fb858f5"
> >> 20:20:25,817  [Datastore            qtp209845522-18 DEBUG]  Closing
> >> PreparedStatement
> >> "org.datanucleus.store.rdbms.ParamLoggingPreparedStatement@7fb858f5"
> >> 20:20:25,825  [Datastore            qtp209845522-18 DEBUG]  Closing
> >> PreparedStatement
> >>
> "org.datanucleus.store.rdbms.datasource.dbcp.DelegatingPreparedStatement@6eb9aa9a
> >> "
> >> 20:20:25,825  [Datastore            qtp209845522-18 DEBUG]  Closing
> >> PreparedStatement
> >>
> "org.datanucleus.store.rdbms.datasource.dbcp.DelegatingPreparedStatement@6eb9aa9a
> >> "
> >> 20:20:25,826  [Native               qtp209845522-18 DEBUG]  SELECT
> >> 'au.com.scds.chats.dom.module.participant.Participation' AS
> >>
> NUCLEUS_TYPE,a0.createdby,a0.createdon,a0.lastmodifiedby,a0.lastmodifiedon,a0.dropofftime,a0.oldid,a0.pickuptime,a0.roleid,a0.transportnotes,a0.participation_id
> >> FROM participation a0 WHERE a0.activity_activity_id = <1>
> >> 20:20:25,831  [Datastore            qtp209845522-18 DEBUG]  Closing
> >> PreparedStatement
> >> "org.datanucleus.store.rdbms.ParamLoggingPreparedStatement@34a88772"
> >> 20:20:25,831  [Datastore            qtp209845522-18 DEBUG]  Closing
> >> PreparedStatement
> >> "org.datanucleus.store.rdbms.ParamLoggingPreparedStatement@34a88772"
> >> 20:20:25,832  [Datastore            qtp209845522-18 DEBUG]  Closing
> >> PreparedStatement
> >>
> "org.datanucleus.store.rdbms.datasource.dbcp.DelegatingPreparedStatement@5578fea9
> >> "
> >> 20:20:25,832  [Datastore            qtp209845522-18 DEBUG]  Closing
> >> PreparedStatement
> >>
> "org.datanucleus.store.rdbms.datasource.dbcp.DelegatingPreparedStatement@5578fea9
> >> "
> >> 20:20:25,832  [Native               qtp209845522-18 DEBUG]  SELECT
> >>
> b0.createdby,b0.createdon,b0.lastmodifiedby,b0.lastmodifiedon,b0.approximateenddatetime,b0.copiedfromactivityid,b0.costforparticipant,b0.description,b0.isrestricted,b0.`name`,b0.oldid,b0.scheduleid,b0.startdatetime,b0.activity_id,b0.classifier
> >> FROM participation a0 INNER JOIN activity b0 ON a0.activity_activity_id
> =
> >> b0.activity_id WHERE a0.participation_id = <3>
> >> 20:20:25,835  [Datastore            qtp209845522-18 DEBUG]  Closing
> >> PreparedStatement
> >> "org.datanucleus.store.rdbms.ParamLoggingPreparedStatement@456274da"
> >> 20:20:25,835  [Datastore            qtp209845522-18 DEBUG]  Closing
> >> PreparedStatement
> >> "org.datanucleus.store.rdbms.ParamLoggingPreparedStatement@456274da"
> >> 20:20:25,836  [Datastore            qtp209845522-18 DEBUG]  Closing
> >> PreparedStatement
> >>
> "org.datanucleus.store.rdbms.datasource.dbcp.DelegatingPreparedStatement@57f25c32
> >> "
> >> 20:20:25,836  [Datastore            qtp209845522-18 DEBUG]  Closing
> >> PreparedStatement
> >>
> "org.datanucleus.store.rdbms.datasource.dbcp.DelegatingPreparedStatement@57f25c32
> >> "
> >> 20:20:25,837  [Native               qtp209845522-18 DEBUG]  SELECT
> >>
> b0.createdby,b0.createdon,b0.lastmodifiedby,b0.lastmodifiedon,b0.status,b0.participant_id
> >> FROM participation a0 INNER JOIN participant b0 ON
> >> a0.participant_participant_id = b0.participant_id WHERE
> a0.participation_id
> >> = <3>
> >> 20:20:25,839  [Datastore            qtp209845522-18 DEBUG]  Closing
> >> PreparedStatement
> >> "org.datanucleus.store.rdbms.ParamLoggingPreparedStatement@1554ed8e"
> >> 20:20:25,839  [Datastore            qtp209845522-18 DEBUG]  Closing
> >> PreparedStatement
> >> "org.datanucleus.store.rdbms.ParamLoggingPreparedStatement@1554ed8e"
> >> 20:20:25,840  [Datastore            qtp209845522-18 DEBUG]  Closing
> >> PreparedStatement
> >>
> "org.datanucleus.store.rdbms.datasource.dbcp.DelegatingPreparedStatement@76978806
> >> "
> >> 20:20:25,840  [Datastore            qtp209845522-18 DEBUG]  Closing
> >> PreparedStatement
> >>
> "org.datanucleus.store.rdbms.datasource.dbcp.DelegatingPreparedStatement@76978806
> >> "
> >> 20:20:25,840  [Native               qtp209845522-18 DEBUG]  SELECT
> >>
> b0.createdby,b0.createdon,b0.lastmodifiedby,b0.lastmodifiedon,b0.birthdate,b0.email,b0.emailaddress,b0.firstname,b0.homephonenumber,b0.middlename,b0.mobilephonenumber,b0.oldid,b0.preferredname,b0.surname,b0.person_id
> >> FROM participant a0 INNER JOIN person b0 ON a0.person_person_id =
> >> b0.person_id WHERE a0.participant_id = <3>
> >> 20:20:25,843  [Datastore            qtp209845522-18 DEBUG]  Closing
> >> PreparedStatement
> >> "org.datanucleus.store.rdbms.ParamLoggingPreparedStatement@66f47ad4"
> >> 20:20:25,843  [Datastore            qtp209845522-18 DEBUG]  Closing
> >> PreparedStatement
> >> "org.datanucleus.store.rdbms.ParamLoggingPreparedStatement@66f47ad4"
> >> 20:20:25,844  [Datastore            qtp209845522-18 DEBUG]  Closing
> >> PreparedStatement
> >>
> "org.datanucleus.store.rdbms.datasource.dbcp.DelegatingPreparedStatement@64779748
> >> "
> >> 20:20:25,844  [Datastore            qtp209845522-18 DEBUG]  Closing
> >> PreparedStatement
> >>
> "org.datanucleus.store.rdbms.datasource.dbcp.DelegatingPreparedStatement@64779748
> >> "
> >> 20:20:25,844  [Native               qtp209845522-18 DEBUG]  SELECT
> >>
> b0.createdby,b0.createdon,b0.lastmodifiedby,b0.lastmodifiedon,b0.approximateenddatetime,b0.copiedfromactivityid,b0.costforparticipant,b0.description,b0.isrestricted,b0.`name`,b0.oldid,b0.scheduleid,b0.startdatetime,b0.activity_id,b0.classifier
> >> FROM participation a0 INNER JOIN activity b0 ON a0.activity_activity_id
> =
> >> b0.activity_id WHERE a0.participation_id = <6>
> >> 20:20:25,845  [Datastore            qtp209845522-18 DEBUG]  Closing
> >> PreparedStatement
> >> "org.datanucleus.store.rdbms.ParamLoggingPreparedStatement@e5ed16d"
> >> 20:20:25,845  [Datastore            qtp209845522-18 DEBUG]  Closing
> >> PreparedStatement
> >> "org.datanucleus.store.rdbms.ParamLoggingPreparedStatement@e5ed16d"
> >> 20:20:25,846  [Datastore            qtp209845522-18 DEBUG]  Closing
> >> PreparedStatement
> >>
> "org.datanucleus.store.rdbms.datasource.dbcp.DelegatingPreparedStatement@328b4a67
> >> "
> >> 20:20:25,846  [Datastore            qtp209845522-18 DEBUG]  Closing
> >> PreparedStatement
> >>
> "org.datanucleus.store.rdbms.datasource.dbcp.DelegatingPreparedStatement@328b4a67
> >> "
> >> 20:20:25,846  [Native               qtp209845522-18 DEBUG]  SELECT
> >>
> b0.createdby,b0.createdon,b0.lastmodifiedby,b0.lastmodifiedon,b0.status,b0.participant_id
> >> FROM participation a0 INNER JOIN participant b0 ON
> >> a0.participant_participant_id = b0.participant_id WHERE
> a0.participation_id
> >> = <6>
> >> 20:20:25,848  [Datastore            qtp209845522-18 DEBUG]  Closing
> >> PreparedStatement
> >> "org.datanucleus.store.rdbms.ParamLoggingPreparedStatement@507670dd"
> >> 20:20:25,848  [Datastore            qtp209845522-18 DEBUG]  Closing
> >> PreparedStatement
> >> "org.datanucleus.store.rdbms.ParamLoggingPreparedStatement@507670dd"
> >> 20:20:25,849  [Datastore            qtp209845522-18 DEBUG]  Closing
> >> PreparedStatement
> >>
> "org.datanucleus.store.rdbms.datasource.dbcp.DelegatingPreparedStatement@fec3f19
> >> "
> >> 20:20:25,849  [Datastore            qtp209845522-18 DEBUG]  Closing
> >> PreparedStatement
> >>
> "org.datanucleus.store.rdbms.datasource.dbcp.DelegatingPreparedStatement@fec3f19
> >> "
> >> 20:20:25,849  [Native               qtp209845522-18 DEBUG]  SELECT
> >>
> b0.createdby,b0.createdon,b0.lastmodifiedby,b0.lastmodifiedon,b0.birthdate,b0.email,b0.emailaddress,b0.firstname,b0.homephonenumber,b0.middlename,b0.mobilephonenumber,b0.oldid,b0.preferredname,b0.surname,b0.person_id
> >> FROM participant a0 INNER JOIN person b0 ON a0.person_person_id =
> >> b0.person_id WHERE a0.participant_id = <6>
> >> 20:20:25,852  [Datastore            qtp209845522-18 DEBUG]  Closing
> >> PreparedStatement
> >> "org.datanucleus.store.rdbms.ParamLoggingPreparedStatement@46f3839a"
> >> 20:20:25,852  [Datastore            qtp209845522-18 DEBUG]  Closing
> >> PreparedStatement
> >> "org.datanucleus.store.rdbms.ParamLoggingPreparedStatement@46f3839a"
> >> 20:20:25,853  [Datastore            qtp209845522-18 DEBUG]  Closing
> >> PreparedStatement
> >>
> "org.datanucleus.store.rdbms.datasource.dbcp.DelegatingPreparedStatement@7546f02f
> >> "
> >> 20:20:25,853  [Datastore            qtp209845522-18 DEBUG]  Closing
> >> PreparedStatement
> >>
> "org.datanucleus.store.rdbms.datasource.dbcp.DelegatingPreparedStatement@7546f02f
> >> "
> >> 20:20:25,854  [Native               qtp209845522-18 DEBUG]  SELECT
> >>
> b0.createdby,b0.createdon,b0.lastmodifiedby,b0.lastmodifiedon,b0.approximateenddatetime,b0.copiedfromactivityid,b0.costforparticipant,b0.description,b0.isrestricted,b0.`name`,b0.oldid,b0.scheduleid,b0.startdatetime,b0.activity_id,b0.classifier
> >> FROM participation a0 INNER JOIN activity b0 ON a0.activity_activity_id
> =
> >> b0.activity_id WHERE a0.participation_id = <7>
> >> 20:20:25,855  [Datastore            qtp209845522-18 DEBUG]  Closing
> >> PreparedStatement
> >> "org.datanucleus.store.rdbms.ParamLoggingPreparedStatement@a3e5286"
> >> 20:20:25,855  [Datastore            qtp209845522-18 DEBUG]  Closing
> >> PreparedStatement
> >> "org.datanucleus.store.rdbms.ParamLoggingPreparedStatement@a3e5286"
> >> 20:20:25,856  [Datastore            qtp209845522-18 DEBUG]  Closing
> >> PreparedStatement
> >>
> "org.datanucleus.store.rdbms.datasource.dbcp.DelegatingPreparedStatement@2b9465d6
> >> "
> >> 20:20:25,856  [Datastore            qtp209845522-18 DEBUG]  Closing
> >> PreparedStatement
> >>
> "org.datanucleus.store.rdbms.datasource.dbcp.DelegatingPreparedStatement@2b9465d6
> >> "
> >> 20:20:25,856  [Native               qtp209845522-18 DEBUG]  SELECT
> >>
> b0.createdby,b0.createdon,b0.lastmodifiedby,b0.lastmodifiedon,b0.status,b0.participant_id
> >> FROM participation a0 INNER JOIN participant b0 ON
> >> a0.participant_participant_id = b0.participant_id WHERE
> a0.participation_id
> >> = <7>
> >> 20:20:25,858  [Datastore            qtp209845522-18 DEBUG]  Closing
> >> PreparedStatement
> >> "org.datanucleus.store.rdbms.ParamLoggingPreparedStatement@3c2b0e6c"
> >> 20:20:25,858  [Datastore            qtp209845522-18 DEBUG]  Closing
> >> PreparedStatement
> >> "org.datanucleus.store.rdbms.ParamLoggingPreparedStatement@3c2b0e6c"
> >> 20:20:25,859  [Datastore            qtp209845522-18 DEBUG]  Closing
> >> PreparedStatement
> >>
> "org.datanucleus.store.rdbms.datasource.dbcp.DelegatingPreparedStatement@676002a
> >> "
> >> 20:20:25,859  [Datastore            qtp209845522-18 DEBUG]  Closing
> >> PreparedStatement
> >>
> "org.datanucleus.store.rdbms.datasource.dbcp.DelegatingPreparedStatement@676002a
> >> "
> >> 20:20:25,859  [Native               qtp209845522-18 DEBUG]  SELECT
> >>
> b0.createdby,b0.createdon,b0.lastmodifiedby,b0.lastmodifiedon,b0.birthdate,b0.email,b0.emailaddress,b0.firstname,b0.homephonenumber,b0.middlename,b0.mobilephonenumber,b0.oldid,b0.preferredname,b0.surname,b0.person_id
> >> FROM participant a0 INNER JOIN person b0 ON a0.person_person_id =
> >> b0.person_id WHERE a0.participant_id = <7>
> >> 20:20:25,863  [Datastore            qtp209845522-18 DEBUG]  Closing
> >> PreparedStatement
> >> "org.datanucleus.store.rdbms.ParamLoggingPreparedStatement@41ab2f40"
> >> 20:20:25,863  [Datastore            qtp209845522-18 DEBUG]  Closing
> >> PreparedStatement
> >> "org.datanucleus.store.rdbms.ParamLoggingPreparedStatement@41ab2f40"
> >> >>>updatedBy: sven
> >> >>>repositoryExists
> >> 20:20:25,871  [Datastore            qtp209845522-18 DEBUG]  Closing
> >> PreparedStatement
> >>
> "org.datanucleus.store.rdbms.datasource.dbcp.DelegatingPreparedStatement@65dc18d2
> >> "
> >> 20:20:25,871  [Datastore            qtp209845522-18 DEBUG]  Closing
> >> PreparedStatement
> >>
> "org.datanucleus.store.rdbms.datasource.dbcp.DelegatingPreparedStatement@65dc18d2
> >> "
> >> 20:20:25,871  [Native               qtp209845522-18 DEBUG]  SELECT
> >> 'org.isisaddons.module.security.dom.user.ApplicationUser' AS
> >>
> NUCLEUS_TYPE,a0.accounttype,a0.emailaddress,a0.encryptedpassword,a0.familyname,a0.faxnumber,a0.givenname,a0.knownas,a0.phonenumber,a0.status,a0.username,
> >> a0.id,a0.version FROM applicationuser a0 WHERE a0.username = <'sven'>
> >> >>>setting Region for name: GLOBAL
> >> 20:20:25,875  [Datastore            qtp209845522-18 DEBUG]  Closing
> >> PreparedStatement
> >>
> "org.datanucleus.store.rdbms.datasource.dbcp.DelegatingPreparedStatement@7a2183e6
> >> "
> >> 20:20:25,875  [Datastore            qtp209845522-18 DEBUG]  Closing
> >> PreparedStatement
> >>
> "org.datanucleus.store.rdbms.datasource.dbcp.DelegatingPreparedStatement@7a2183e6
> >> "
> >> 20:20:25,881  [Native               qtp209845522-18 DEBUG]  SELECT
> >> 'au.com.scds.chats.dom.module.general.names.Region' AS
> >> NUCLEUS_TYPE,a0.`name` FROM region a0 WHERE a0.`name` = <'GLOBAL'>
> >> 20:20:25,885  [Datastore            qtp209845522-18 DEBUG]  Using
> >> PreparedStatement
> >> "org.datanucleus.store.rdbms.ParamLoggingPreparedStatement@63c44673"
> for
> >> connection
> >>
> "org.datanucleus.store.rdbms.datasource.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@15e2c48d
> >> "
> >> 20:20:25,885  [Datastore            qtp209845522-18 DEBUG]  Using
> >> PreparedStatement
> >> "org.datanucleus.store.rdbms.ParamLoggingPreparedStatement@63c44673"
> for
> >> connection
> >>
> "org.datanucleus.store.rdbms.datasource.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@15e2c48d
> >> "
> >> 20:20:25,886  [Native               qtp209845522-18 DEBUG]  INSERT INTO
> >> participation
> >>
> (activity_activity_id,arrivingtransporttype_name,departingtransporttype_name,dropofftime,oldid,participant_participant_id,pickuptime,roleid,transportnotes,createdby,createdon,lastmodifiedby,lastmodifiedon,region_name)
> >> VALUES
> >>
> (<1>,<null>,<null>,<null>,<null>,<8>,<null>,<null>,<null>,<'sven'>,<2015-11-26
> >> 20:20:25.883>,<null>,<null>,<'GLOBAL'>)
> >>
> >>
> >> On Thu, Nov 26, 2015 at 8:11 PM, Dan Haywood <
> >> d...@haywood-associates.co.uk> wrote:
> >>
> >>> If you just new them up:
> >>>
> >>> Customer cust = new Customer();
> >>>
> >>> then the framework doesn't know about it and any services will be null.
> >>>
> >>> You can then use:
> >>>
> >>> domainObjectContainer.injectServicesInto(cust);
> >>>
> >>> ~~~
> >>>
> >>> Alternatively, use:
> >>>
> >>> Customer cust = container.newTransientInstance(Customer.class);
> >>>
> >>> to do both steps in one.
> >>>
> >>> HTH
> >>> Dan
> >>>
> >>>
> >>> On 26 November 2015 at 09:09, Stephen Cameron <
> >>> steve.cameron...@gmail.com>
> >>> wrote:
> >>>
> >>> > Hi,
> >>> >
> >>> > I think I've read somewhere that domain services aren't always
> injected
> >>> > into entities by default and you sometimes have to trigger this
> >>> yourself?
> >>> >
> >>> > Is this a correct?
> >>> >
> >>> > Thank
> >>> >
> >>> >
> >>> > On Thu, Nov 26, 2015 at 10:00 AM, Stephen Cameron <
> >>> > steve.cameron...@gmail.com> wrote:
> >>> >
> >>> > > I cannot try alternatives till later this evening, will let you
> know
> >>> > > of results. If I cannot get tenancies working for tomorrow its not
> >>> the
> >>> > end
> >>> > > of the world. I was getting "record not found" errors last night
> due
> >>> to
> >>> > > making region allowsNull="false", so a bit of a panic, given its
> >>> > > mostly been working very smoothly now for a while.
> >>> > >
> >>> > > On Thu, Nov 26, 2015 at 9:40 AM, Dan Haywood <
> >>> > d...@haywood-associates.co.uk
> >>> > > > wrote:
> >>> > >
> >>> > >> On 25 November 2015 at 22:26, Stephen Cameron <
> >>> > steve.cameron...@gmail.com
> >>> > >> >
> >>> > >> wrote:
> >>> > >>
> >>> > >> > Hi Dan,
> >>> > >> >
> >>> > >> > I did not explain it that well sorry.
> >>> > >> >
> >>> > >> > I want to get rid of nulls completely, the fact that I do handle
> >>> them
> >>> > is
> >>> > >> > just a work-around for the fact that they are still being
> >>> created, but
> >>> > >> only
> >>> > >> > for People. That is, if a new Participant is registered it looks
> >>> to
> >>> > see
> >>> > >> if
> >>> > >> > there is an existing Person with the same details then adds a
> new
> >>> one
> >>> > if
> >>> > >> > not present (a single Person can be a Participant and/or a
> >>> Volunteer).
> >>> > >> The
> >>> > >> > Participant is getting its region set in setUpdatedBy() but the
> >>> Person
> >>> > >> is
> >>> > >> > not, I need to debug this.
> >>> > >> >
> >>> > >> >
> >>> > >> In 1.10.0, a better approach is probably to add a subscriber to
> the
> >>> > >> lifecycle events:
> >>> > >>
> >>> > >> @DomainService(nature=NatureOfService.DOMAIN)
> >>> > >> public class RegionSubscriber extends AbstractSubscriber {
> >>> > >>
> >>> > >>     @Subscribe
> >>> > >>     public void on(ObjectPersistingEvent ev) {
> >>> > >>         Object domainObject = ev.getSource();
> >>> > >>     }
> >>> > >>
> >>> > >>     @Subscribe
> >>> > >>     public void on(ObjectUpdatingEvent ev) {
> >>> > >>         Object domainObject = ev.getSource();
> >>> > >>     }
> >>> > >> }
> >>> > >>
> >>> > >>
> >>> > >>
> >>> > >>
> >>> > >> > As general interest is handling such things via such a service
> >>> better,
> >>> > >> that
> >>> > >> > is to avoid injecting services into entities if possible?
> >>> > >> >
> >>> > >> >
> >>> > >> There's nothing wrong with injecting services into entities; it
> >>> allows
> >>> > >> them
> >>> > >> to perform their responsibilities without leaking details of how
> >>> they do
> >>> > >> it
> >>> > >> (their implementation) to the caller.  I don't hold by this "pass
> >>> in the
> >>> > >> services" and "double dispatch"... I see that as a code smell.
> >>> > >>
> >>> > >> On the other hand, we now have a very rich set of domain events;
> in
> >>> AOP
> >>> > >> terms these are jointpoints (or is it pointcuts? see [1]), anyway
> >>> they
> >>> > are
> >>> > >> a different way to cause "stuff to happen".
> >>> > >>
> >>> > >> Should one have the entity call a services, or rely on subscribers
> >>> to
> >>> > >> domain events?  With the latter, the entity is very clean and the
> >>> > >> responsibility kept completely separate.  On the other hand, with
> >>> events
> >>> > >> the order in which the subscribers fire is non-deterministic.
> >>> > >>
> >>> > >>
> >>> > >>
> >>> > >>
> >>> > >>
> >>> > >>
> >>> > >> > Last minute tweeks aren't the best idea, but the tests that I do
> >>> have
> >>> > >> are
> >>> > >> > proving their value. These particular issues are probably a
> >>> result of
> >>> > no
> >>> > >> > integration tests yet.
> >>> > >> >
> >>> > >> >
> >>> > >> It's not clear to me if my suggestion to use the TenancyEvaluator
> >>> SPI
> >>> > >> helped ?  Or, indeed, whether you have a reasonable workaround in
> >>> your
> >>> > >> current handling of the nulls?
> >>> > >>
> >>> > >>
> >>> > >>
> >>> > >>
> >>> > >> > Thanks
> >>> > >> >
> >>> > >> >
> >>> > >>
> >>> > >> [1]
> >>> > >>
> >>> > >>
> >>> >
> >>>
> http://stackoverflow.com/questions/15447397/spring-aop-whats-the-difference-between-joinpoint-and-pointcut
> >>> > >>
> >>> > >>
> >>> > >> > On Thu, Nov 26, 2015 at 8:09 AM, Dan Haywood <
> >>> > >> d...@haywood-associates.co.uk
> >>> > >> > >
> >>> > >> > wrote:
> >>> > >> >
> >>> > >> > > Hi Steve,
> >>> > >> > >
> >>> > >> > > Not sure I follow quite all the ins-and-outs of this, but what
> >>> could
> >>> > >> well
> >>> > >> > > be of use is the optional ApplicationTenancyPathEvaluator
> domain
> >>> > >> > > service[1].  If an implementation is registered (on the
> >>> classpath),
> >>> > >> then
> >>> > >> > > the security module will delegate to this [2] in order to
> >>> determine
> >>> > >> who
> >>> > >> > > gets to see/edit what.
> >>> > >> > >
> >>> > >> > > From what I did follow, it sounds like you need to treat
> objects
> >>> > with
> >>> > >> a
> >>> > >> > > null region in a particular way? If so, then hopefully you can
> >>> put
> >>> > >> this
> >>> > >> > > "special case" logic in an implementation of said service.
> >>> > >> > >
> >>> > >> > > HTH
> >>> > >> > > Dan
> >>> > >> > >
> >>> > >> > >
> >>> > >> > >
> >>> > >> > > [1]
> >>> > >> > >
> >>> > >> > >
> >>> > >> >
> >>> > >>
> >>> >
> >>>
> https://github.com/isisaddons/isis-module-security/blob/master/dom/src/main/java/org/isisaddons/module/security/dom/tenancy/ApplicationTenancyPathEvaluator.java
> >>> > >> > > [2]
> >>> > >> > >
> >>> > >> > >
> >>> > >> >
> >>> > >>
> >>> >
> >>>
> https://github.com/isisaddons/isis-module-security/blob/master/dom/src/main/java/org/isisaddons/module/security/facets/TenantedAuthorizationFacetFactory.java#L72
> >>> > >> > >
> >>> > >> > >
> >>> > >> > > On 25 November 2015 at 20:25, Stephen Cameron <
> >>> > >> > steve.cameron...@gmail.com>
> >>> > >> > > wrote:
> >>> > >> > >
> >>> > >> > > > Hi,
> >>> > >> > > >
> >>> > >> > > > I have a problem with Application Tenancies not working the
> >>> way I
> >>> > >> > want, I
> >>> > >> > > > want to drive it off a field 'region', such that a person is
> >>> > >> assigned a
> >>> > >> > > > tenancy of GLOBAL, NORTH, SOUTH, NORTH-WEST and these are
> >>> also the
> >>> > >> > > regions
> >>> > >> > > > that they are working in too, so when they create a record
> >>> their
> >>> > >> region
> >>> > >> > > > gets assigned to the new record and that controls who else
> >>> can see
> >>> > >> the
> >>> > >> > > > record.
> >>> > >> > > >
> >>> > >> > > > This mostly works, but there is one small glitch. The main
> >>> > problem I
> >>> > >> > have
> >>> > >> > > > is setting it up so that region is non-null and any records
> >>> > created
> >>> > >> by
> >>> > >> > a
> >>> > >> > > > GLOBAL tenancy user are seen by all users, while those
> >>> created by
> >>> > a
> >>> > >> > > NORTH,
> >>> > >> > > > SOUTH or NORTH-WEST user are seen only by users with the
> same
> >>> > >> tenancy.
> >>> > >> > By
> >>> > >> > > > changing the region of a record it can change tenancy.
> >>> > >> > > >
> >>> > >> > > > Presently this is broken, or at least it I think it was
> >>> working
> >>> > >> > correctly
> >>> > >> > > > when I allowed a record with a region of null to be the
> GLOBAL
> >>> > >> ones. I
> >>> > >> > > need
> >>> > >> > > > to have this working for a demo tomorrow, so advice is
> >>> welcomed on
> >>> > >> how
> >>> > >> > > best
> >>> > >> > > > to set this up properly.
> >>> > >> > > >
> >>> > >> > > > My base class that controls all this here:
> >>> > >> > > >
> >>> > >> > > >
> >>> > >> > >
> >>> > >> >
> >>> > >>
> >>> >
> >>>
> https://github.com/Stephen-Cameron-Data-Services/isis-chats/blob/master/dom/src/main/java/au/com/scds/chats/dom/AbstractChatsDomainEntity.java
> >>> > >> > > >
> >>> > >> > > > The other small glitch is that a person record created in
> the
> >>> > >> process
> >>> > >> > of
> >>> > >> > > > creating a participant doesn't get assigned a region
> >>> > automatically.
> >>> > >> I
> >>> > >> > > have
> >>> > >> > > > a work-around for that in place at present, anything that
> has
> >>> a
> >>> > null
> >>> > >> > > region
> >>> > >> > > > gets presented as having a global tenancy.
> >>> > >> > > >
> >>> > >> > > >
> >>> > >> > > > Thanks
> >>> > >> > > >
> >>> > >> > > > Steve Cameron
> >>> > >> > > >
> >>> > >> > >
> >>> > >> >
> >>> > >>
> >>> > >
> >>> > >
> >>> >
> >>>
> >>
> >>
> >
>

Reply via email to