Hi Craig,
> It looks like the DN enhancer recognizes the annotation as a
> persistence-capable class because it is annotated with PersistenceCapable
> but doesn't recognize it as an annotation that should not be enhanced.
Quite probably. I've only been enhancing through a persistence.xml file
recently, which explicitly specifies the classes to be enhanced so never hit
that one.
> I looked at the code and think that perhaps a patch like this would fix it.
> org.datanucleus.enhancer.ClassEnhancerImpl around line 298 after the cls
> object is obtained:
>
> if (cls.isAnnotation())
> {
> return false;
> }
>
> Other possible solutions: move the composite annotations out of the package
> into a sibling package. This probably works but is awkward.
No, let's just fix the code rather than imposing the user has to do something.
Instead of doing your proposed fix, I put a couple of checks in further
upstream, where it reads annotations for a class to check if it is has
metadata.
See https://github.com/datanucleus/datanucleus-core/commit/
f048a37494066b46545a1849d536104dc149950d
A simple test with that fix, explicitly adding the meta-annotation class to
persistence.xml results in a log message that the class has no metadata and is
ignored.
That should be in current DN nightly builds, so give it a try and see if it
catches your situation.
Regards
--
Andy
DataNucleus (Web: http://www.datanucleus.org Twitter: @datanucleus)