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