Great to hear there a workaround. Object structure is a pretty fundamental issue, so I was afraid we may get stuck here.
Cheers, Andrus On Dec 11, 2011, at 8:49 PM, Kevin Meyer - KMZ wrote: > On 11 Dec 2011 at 20:28, Andrus Adamchik wrote: > >> >> On Dec 11, 2011, at 7:00 PM, Kevin Meyer - KMZ wrote: >> >>> I wish it were this simple. But the problem lies in >>> DataContext#newObject(String entityName) >>> once it has created an instance of my POJO, it type casts it to >>> Persistent: >>> object = (Persistent) descriptor.createObject(); >>> >>> This *forces* my POJO to implement Persistent. >> >> You may have to do the wrapping on your own after that I guess... If it is >> at all possible. >> >> IIRC elsewhere in this thread you said you were OK with Isis objects >> extending CayenneDataObject. CayenneDataObject implements Persistent >> of course. So maybe there was some misunderstanding earlier in this >> discussion? If your object really has to be a POJO (as in Java class >> with no special superclass and data contained in the user-defined >> fields), we need to backtrack quite a bit and reevaluate the >> problem. > > I'm learning as I go along. > > Initially, I did not realise there would be a problem with the Isis > introspector and CayenneDataObject. > > Fortunately, Isis provides a mechanism to bypass introspecting certain > classes, so I am making my POJO extend CayenneDataObject and > am on to the next stage. > > So - to recap: I have my POJO that Isis can introspect. I have > examined the fields and created: > DbEntity, ObjEntity for each POJO. > For each property, I have created: > DbAttribute, ObjAttribute > and set the appropriate setEntity() to the entities created above. > > > > I can create an instance of my POJO with newInstance(). > > I'm now getting a null pointer assignment when I try and commit! > > So far, I have tracked into: > createPermIds(descriptor, objects); > in DataDomainInsertBucket#appendQueriesInternal > >> >>> Why doesn't Cayenne support composition over inheritance? I think >>> the idea of containing the CayenneDataObject as suggested provides >>> much greater flexibility... and you generate these classes, anyway. >> >> In the Isis integration case - maybe. I don't think we've ever >> considered using a delegate to give persistent objects a semblance >> of a POJO by removing a requirement for a superclass, but still >> forcing our own internal structure. So it is probably worth a >> discussion, although I am cautiously pessimistic about it being done >> easily at Cayenne level. > > Indeed - I started putting together something in the DataContext that'll > fetch the container via a getPersistent or equivalent, and realised that > some additional wrappers will be needed to access the POJO again. > > I'll put that on the back-burner for a while. > > Regards, > Kevin > >
