[ 
https://issues.apache.org/jira/browse/OPENJPA-328?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Henry Lai updated OPENJPA-328:
------------------------------

    Attachment: ptpissue5.zip

files to reproduce bug, and patch

> PCEnhancer does not enhance classes specified in the mapping files declared 
> in the persistence xml
> --------------------------------------------------------------------------------------------------
>
>                 Key: OPENJPA-328
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-328
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: build / infrastructure
>    Affects Versions: 1.0.0
>            Reporter: Henry Lai
>         Attachments: ptpissue5.zip
>
>
> running 
> org.apache.openjpa.enhance.PCEnhancer -p ptp/test/issue5/persistence.xml
> did not do the class file enhancement, result in The class does not have 
> metadata - enhanced as persistence-aware.
> The message are
> 250  test  TRACE  [main] openjpa.MetaData - Finished parsing metadata 
> resource "file:/C:/workspace/jpatest/TestOpenJPA/bin/ptp/test/issue5/orm.xml".
> 250  test  TRACE  [main] openjpa.MetaData - Parsing class 
> "ptp.test.issue5.T5Entity".
> 250  test  TRACE  [main] openjpa.Enhance - Enhancing type "class 
> ptp.test.issue5.T5Entity".
> 250  test  WARN   [main] openjpa.Enhance - Type "class 
> ptp.test.issue5.T5Entity" has no metadata; enhancing as persistence aware. If 
> you intended for "class ptp.test.issue5.T5Entity" to be persistence-capable, 
> then this means that OpenJPA could not find any metadata for "class 
> ptp.test.issue5.T5Entity". This can happen if the directory containing your 
> metadata is not in your CLASSPATH, or if your metadata files are not named 
> properly. See the documentation on metadata placement for more information.
> 250  test  TRACE  [main] openjpa.Tool - The class does not have metadata - 
> enhanced as persistence-aware.
> modify the following method of the PCEnhancer to get it to work
>     /**
>      * Enhance the given classes.
>      */
>     public static boolean run(OpenJPAConfiguration conf, String[] args,
>         Flags flags, MetaDataRepository repos, BytecodeWriter writer,
>         ClassLoader loader)
>         throws IOException {
>         if (loader == null)
>             loader = conf.getClassResolverInstance().
>                 getClassLoader(PCEnhancer.class, null);
>         if (flags.tmpClassLoader)
>             loader = new TemporaryClassLoader(loader);
>         if (repos == null) {
>             repos = conf.newMetaDataRepositoryInstance();
>             repos.setSourceMode(MetaDataRepository.MODE_META);
>         }
>         Log log = conf.getLog(OpenJPAConfiguration.LOG_TOOL);
>         Collection classes;
>         String [] persistentTypeNames = args;
>         if (args.length == 0) {
>             log.info(_loc.get("running-all-classes"));
>             classes = repos.getPersistentTypeNames(true, loader);
>             if (classes == null) {
>               log.warn(_loc.get("no-class-to-enhance"));
>               return false;
>             }
>             persistentTypeNames = new String [ classes.size() ];
>             classes.toArray( persistentTypeNames );
>         }
>         ClassArgParser cap = conf.getMetaDataRepositoryInstance().
>             getMetaDataFactory().newClassArgParser();
>         cap.setClassLoader(loader);
>         classes = new HashSet();
>         for (int i = 0; i < persistentTypeNames.length; i++)
>             
> classes.addAll(Arrays.asList(cap.parseTypes(persistentTypeNames[i])));
>         
>         
>         Project project = new Project();
>         BCClass bc;
>         PCEnhancer enhancer;
>         int status;
>         for (Iterator itr = classes.iterator(); itr.hasNext();) {
>             Object o = itr.next();
>             if (log.isTraceEnabled())
>                 log.trace(_loc.get("enhance-running", o));
>             if (o instanceof String)
>                 bc = project.loadClass((String) o);
>             else
>                 bc = project.loadClass((Class) o);
>             enhancer = new PCEnhancer(conf, bc, repos, loader);
>             if (writer != null)
>                 enhancer.setBytecodeWriter(writer);
>             enhancer.setDirectory(flags.directory);
>             enhancer.setAddDefaultConstructor(flags.addDefaultConstructor);
>             status = enhancer.run();
>             if (status == ENHANCE_NONE) {
>                 if (log.isTraceEnabled())
>                     log.trace(_loc.get("enhance-norun"));
>             } else if (status == ENHANCE_INTERFACE) {
>                 if (log.isTraceEnabled())
>                     log.trace(_loc.get("enhance-interface"));
>             } else if (status == ENHANCE_AWARE) {
>                 if (log.isTraceEnabled())
>                     log.trace(_loc.get("enhance-aware"));
>                 enhancer.record();
>             } else
>                 enhancer.record();
>             project.clear();
>         }
>         return true;
>     }

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to