Hi Andy,

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.

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.

We could try to remove the annotation classes from the list of classes to 
enhance, but this would really slow things down by needing to get the class 
object from the class names even though it isn't really needed for anything 
else.

Thanks,

Craig

> On Jul 19, 2017, at 5:46 PM, Craig Russell <apache....@gmail.com> wrote:
> 
> Hi,
> 
> I'm trying to run the tck including this composite annotation:
> 
> @Target(ElementType.TYPE)
> @Retention(RetentionPolicy.RUNTIME)
> @javax.jdo.annotations.PersistenceCapable(detachable="true", 
> identityType=IdentityType.DATASTORE)
> @javax.jdo.annotations.DatastoreIdentity(strategy=IdGeneratorStrategy.IDENTITY,
>  column="DATASTORE_IDENTITY")
> @javax.jdo.annotations.Discriminator(strategy=DiscriminatorStrategy.CLASS_NAME,
>  column="DISCRIMINATOR", indexed="true")
> @javax.jdo.annotations.Inheritance(strategy=InheritanceStrategy.SUPERCLASS_TABLE)
> 
> public @interface DatastoreIdDiscriminatorClassNameInheritanceSuperclass { }
> 
> When I run the enhancement step, it complains:
> 
> Failed to execute goal org.apache.jdo:jdo-exectck:3.2-SNAPSHOT:enhance 
> (default) on project jdo-tck: Execution default of goal 
> org.apache.jdo:jdo-exectck:3.2-SNAPSHOT:enhance failed: Class 
> "org.apache.jdo.tck.pc.companyAnnotatedFC.DatastoreIdDiscriminatorClassNameInheritanceSuperclass"
>  has been specified with an inheritance strategy of "superclass-table", yet 
> no superclass exists or none exists with its own table! -> [Help 1]
> 
> It looks like the enhancer is trying to enhance this class, but it should 
> not. An annotation cannot be persistent so it should not be enhanced.
> 
> Any ideas?
> 
> Thanks,
> 
> Craig
> 
> Craig L Russell
> c...@apache.org
> 

Craig L Russell
Secretary, Apache Software Foundation
c...@apache.org http://db.apache.org/jdo

Reply via email to