Skip to Content
author's profile photo Former Member
Former Member

HowTo use the JDO Enhancer ??

Hello,

how can i make the JDO Enhancer aware of the fact, that a class to be made persistent is a derived class from another class being made persistent by JDO ?

The classpath used for the enhancer currently contains everything from the JDO sample plus the path so it can pick up the base classes. I think it is missing the .jdo file for the Base class.

regards, udo

Add a comment
10|10000 characters needed characters exceeded

Related questions

4 Answers

  • author's profile photo Former Member
    Former Member
    Posted on Jun 23, 2004 at 05:55 PM

    Hi Udo,

    please have a look here: http://help.sap.com/saphelp_nw04/helpdata/en/6a/a6c9ff024843b3abeded4a530ad29c/content.htm

    Snippet:

    "For classes that have persistence capable superclasses, you must also add the persistence-capable-superclass attribute, which declares the fully qualified name of the persistence capable superclass."

    Hope that helps.

    Regards

    Stefan

    Add a comment
    10|10000 characters needed characters exceeded

  • author's profile photo Former Member
    Former Member
    Posted on Jun 24, 2004 at 09:04 AM

    Hello Stefan,

    i do have my superclass declared as persistence-capable and provide a reference to the superclass in the derived class' .jdo.

    Nevertheless the enhancer Task gives a:

    enhance.MySample:

    [java] com.sap.jdo.enhancer.meta.EnhancerMetaDataUserException: nested exception: com.sap.jdo.model.jdo.JDOModelException: Superclass 'com.vw.tpb.core.model.BasePersistent' of persistence-capable class 'com.vw.tpb.node.model.MySample' is not persistence-capable.

    [java] at com.sap.jdo.enhancer.meta.model.EnhancerMetaDataJDOModelImpl.getJDOClass(EnhancerMetaDataJDOModelImpl.java:167)

    [java] at com.sap.jdo.enhancer.meta.model.EnhancerMetaDataJDOModelImpl.isPersistenceCapableClass(EnhancerMetaDataJDOModelImpl.java:323)

    [java] at com.sap.jdo.enhancer.core.Analyzer.initPersistenceType(Analyzer.java:595)

    [java] at com.sap.jdo.enhancer.core.Analyzer.scan(Analyzer.java:517)

    [java] at com.sap.jdo.enhancer.core.Controller.scan(Controller.java:169)

    [java] at com.sap.jdo.enhancer.core.Controller.enhanceClass(Controller.java:124)

    [java] at com.sap.jdo.enhancer.filter.Enhancer.enhanceClassFile1(Enhancer.java:185)

    [java] at com.sap.jdo.enhancer.filter.Enhancer.enhanceClassFile(Enhancer.java:232)

    [java] at com.sap.jdo.enhancer.Main.enhanceClassFile(Main.java:583)

    [java] at com.sap.jdo.enhancer.Main.enhanceInputFiles(Main.java:539)

    [java] at com.sap.jdo.enhancer.Main.process(Main.java:157)

    [java] at com.sap.jdo.enhancer.Main.main(Main.java:117)

    [java] Fatal error while enhancing: JDO ENHANCER: An internal error occurred while enhancing input class; detailed message: nested exception: com.sap.jdo.model.jdo.JDOModelException: Superclass 'com.vw.tpb.core.model.BasePersistent' of persistence-capable class 'com.vw.tpb.node.model.MySample' is not persistence-capable.

    [java] aborted with errors.

    [java] com.sap.jdo.enhancer.EnhancerFatalError: JDO ENHANCER: An internal error occurred while enhancing input class; detailed message: nested exception: com.sap.jdo.model.jdo.JDOModelException: Superclass 'com.vw.tpb.core.model.BasePersistent' of persistence-capable class 'com.vw.tpb.node.model.MySample' is not persistence-capable.

    [java] at com.sap.jdo.enhancer.filter.Enhancer.enhanceClassFile(Enhancer.java:247)

    [java] at com.sap.jdo.enhancer.Main.enhanceClassFile(Main.java:583)

    [java] at com.sap.jdo.enhancer.Main.enhanceInputFiles(Main.java:539)

    [java] at com.sap.jdo.enhancer.Main.process(Main.java:157)

    [java] at com.sap.jdo.enhancer.Main.main(Main.java:117)

    [java] BUILD FAILED: file:C:/NetWeaver/TPB-EJB/build.xml:226: Java returned: 1

    Below are some snippets of both jdo files and the build.xml.

    regards, Udo

    -- Derived Class

    <jdo>

    <package name="com.vw.tpb.node.model">

    <class name="MySample"

    identity-type="application"

    objectid-class="com.vw.tpb.node.model.MySample$Id"

    persistence-capable-superclass="com.vw.tpb.core.model.BasePersistent"

    > <!-- end class tag -->

    -- Base class

    <jdo>

    <package name="com.vw.tpb.core.model">

    <class name="BasePersistent"

    identity-type="application"

    > <!-- end class tag -->

    -- ANT Build file tag to enhance the MySample is

    <target name="enhance.MySample" depends="enhance.BasePersistent">

    <java

    fork="yes"

    failonerror="yes"

    classname="${jdo.enhancer}" classpathref="jdo.classpath">

    <arg line= "-f -d" />

    <arg value= "${bin.java.dir}" />

    <arg value= "${src.java.dir}/com/vw/tpb/node/model/MySample.jdo" />

    <arg value= "${bin.java.dir}/com/vw/tpb/node/model/MySample.class" />

    </java>

    </target>

    Add a comment
    10|10000 characters needed characters exceeded

  • author's profile photo Former Member
    Former Member
    Posted on Jun 24, 2004 at 09:57 AM

    Besides that the checker also complains about:

    check.MySample:

    [java] ... catalog path: ../TPB-DIC/gen_ddic/dbtables/

    [java] javax.jdo.JDOFatalUserException: consistency check error for com.vw.tpb.node.model.MySample

    [java] NestedThrowables:

    [java] com.vw.tpb.node.model.MySample: check for PC Class failed / consistency check error for com.vw.tpb.node.model.MySample

    [java] javax.jdo.JDOFatalUserException: no mapping metadata file found for class com.vw.tpb.core.model.AbstractPersistent

    [java] at com.sap.jdo.sql.mapping.impl.MappingClassImpl.checkConsistency(MappingClassImpl.java:314)

    [java] at com.sap.jdo.sql.mapping.impl.MappingModelImpl.getMappingClass(MappingModelImpl.java:304)

    [java] at com.sap.jdo.sql.util.JDO.checkClasses(JDO.java:201)

    [java] at com.sap.jdo.sql.util.JDO.process(JDO.java:423)

    [java] at com.sap.jdo.sql.util.JDO.main(JDO.java:406)

    Add a comment
    10|10000 characters needed characters exceeded

  • author's profile photo Former Member
    Former Member
    Posted on Jun 25, 2004 at 07:08 AM

    I've taken a look at the example. Is this discriminator really needed ?

    I'm not trying to model different business-entities (Employee<->Manager) using this approach. What i'd like to achieve is a common base class for all persistent objects containing attributes for creationdate/modificationdate/deletiondate.

    I don't like the discriminitator approach since then the datamodel would look very strange to me and is tricky for simple SQL-selects.

    regards, Udo

    Add a comment
    10|10000 characters needed characters exceeded

    • Former Member

      Hi Udo,

      the discriminator approach seems to be mandatory for inheritance mapping. If you don't like this, another option might be the usage of a bidirectional 1:1 relationship, but this depends on your further datamodel design.

      Regards

      Stefan

Before answering

You should only submit an answer when you are proposing a solution to the poster's problem. If you want the poster to clarify the question or provide more information, please leave a comment instead, requesting additional details. When answering, please include specifics, such as step-by-step instructions, context for the solution, and links to useful resources. Also, please make sure that you answer complies with our Rules of Engagement.
You must be Logged in to submit an answer.

Up to 10 attachments (including images) can be used with a maximum of 1.0 MB each and 10.5 MB total.