> On Jan 8, 2017, at 1:12 AM, Michael Gentry <blackn...@gmail.com> wrote:
> I'd forgotten I had included DB comments, but I can see the value of them.
> I suppose if you are doing a sync with the DB, if there are differences,
> query the user for which one to keep/use?

Or just always override from DB (after all you want a single source of metadata 
in your stack).

> Our use-cases never involve DB syncs, so this could be quite a blind spot for 
> me.  (We maintain Flyway
> migration scripts separately and update the Cayenne model by hand as
> needed.)

Yeah, DB-first flow wasn't feasible in 3.1. And until M3/M4 wasn't stable 
enough in 4.0 (M5 has the last few known bugs squashed). Try it now though. It 
works like a charm. 

> We had looked at overriding getters/setters for annotations, but we didn't
> want to do that 1000s of times, so we gave up.  
> I see value in the
> superclass being able to have annotations along with JavaDocs for various
> attributes and relationships, plus the class itself.  The superclass is
> essentially maintained outside of the IDE currently, anyway (you may look
> at the code, but you don't edit it), so I don't think it'll be too bad.

But how does this save us work creating annotations? If you had to override 
1000's of methods, then you will have to create 1000's of annotations in the 
Modeler as well to achieve the same effect. The only way to cut down on the 
number of (repeating) annotations is if they are are all applied to the same 
properties of different entities. Then they can be moved to a separate 
interface (or a superclass common to all entities), all outside the Modeler and 
within the IDE.


> I'm also viewing this as a separate XML file.  One that wouldn't need to be
> deployed, although it wouldn't hurt if present.  Nothing in it is required
> for runtime support, unlike the main model.  Everything is class-generation
> extensions only.

This definitely has merit. Lazy loading of all this metadata (i.e. skipping it 
in runtime) is a good idea. But we need to make sure this file is fully 
integrated in Cayenne project model and toolchain and can be loaded on-demand 
from anywhere, not just the Modeler.

Also we need to look at the bigger picture here. We want to be able to add and 
manage extra project files for many different reasons. I have this list for now:

1. cgen-related metadata - this discussion.
2. cgen custom templates - makes sense to keep them in the project and in 
version control together with Cayenne XML files.
3. cdbimport filters and settings - currently this is configured inside the 
build system (pom.xml, etc.), but I'd really like to move it to the Cayenne 
project (and make it editable in the Modeler).

So a generic mechanism for referencing and managing extra files with the 
project (lazy-loading, saving, etc.) is a prerequisite to implementing the 
above.

Andrus





Reply via email to