[ 
https://issues.apache.org/jira/browse/OPENJPA-367?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12526849
 ] 

Albert Lee commented on OPENJPA-367:
------------------------------------

>From initial investigation, here is the call stack that shows the call path to 
>CFMetaDataParser.classForName()

  CFMetaDataParser.classForName(String, String, boolean, ClassLoader) line: 307
  XMLPersistenceMetaDataParser(CFMetaDataParser).classForName(String, boolean) 
line: 285        
  XMLPersistenceMetaDataParser.classForName(String) line: 1679  
  XMLPersistenceMetaDataParser.startClass(String, Attributes) line: 727 
  XMLPersistenceMetaDataParser(CFMetaDataParser).startElement(String, 
Attributes) line: 108     
  XMLPersistenceMetaDataParser(XMLMetaDataParser).startElement(String, String, 
String, Attributes) line: 432    
  SAXParserImpl$JAXPSAXParser(AbstractSAXParser).startElement(QName, 
XMLAttributes, Augmentations) line: not available  
  XMLSchemaValidator.startElement(QName, XMLAttributes, Augmentations) line: 
not available      
  XMLNSDocumentScannerImpl.scanStartElement() line: not available       
  
XMLNSDocumentScannerImpl$NSContentDispatcher(XMLDocumentFragmentScannerImpl$FragmentContentDispatcher).dispatch(boolean)
 line: not available  
  
XMLNSDocumentScannerImpl(XMLDocumentFragmentScannerImpl).scanDocument(boolean) 
line: not available    
  XIncludeAwareParserConfiguration(XML11Configuration).parse(boolean) line: not 
available       
  XIncludeAwareParserConfiguration(XML11Configuration).parse(XMLInputSource) 
line: not available        
  SAXParserImpl$JAXPSAXParser(XMLParser).parse(XMLInputSource) line: not 
available      
  SAXParserImpl$JAXPSAXParser(AbstractSAXParser).parse(InputSource) line: not 
available 
  SAXParserImpl.parse(InputSource, DefaultHandler) line: not available  
  XMLPersistenceMetaDataParser(XMLMetaDataParser).parseNewResource(Reader, 
String) line: 376    
  XMLPersistenceMetaDataParser(XMLMetaDataParser).parse(MetaDataIterator, 
boolean) line: 318    
  XMLPersistenceMetaDataParser(XMLMetaDataParser).parse(MetaDataIterator) line: 
295     
  XMLPersistenceMetaDataParser(XMLMetaDataParser).parse(URL) line: 268  
  PersistenceMetaDataFactory.parseXML(URL, Class, int, ClassLoader) line: 247   
  PersistenceMetaDataFactory.load(Class, int, ClassLoader) line: 198    
  MetaDataRepository.getMetaDataInternal(Class, ClassLoader) line: 470  
  MetaDataRepository.getMetaData(Class, ClassLoader, boolean) line: 290 
  PCEnhancer.<init>(OpenJPAConfiguration, BCClass, MetaDataRepository, 
ClassLoader) line: 242   
  PCEnhancer.run(OpenJPAConfiguration, String[], PCEnhancer$Flags, 
MetaDataRepository, BytecodeWriter, ClassLoader) line: 4349  
  PCEnhancer.run(OpenJPAConfiguration, String[], Options) line: 4296    
  PCEnhancer.main(String[]) line: 4268  

In the failing case, serp.Strings.toClass() method returns a different Class 
object from the Class object used by the MetaDataRepository, as a result, the 
look up of the meta data from the MetaDataRepository._meta map will not find 
the meta data, even there is one in the _meta map with a different Class object 
key.

If a target is passed to the enhencer, serp.Strings.toClass() returns the same 
Class object, hence the look up in the MetaDataRepository succeeded. 

This implies serp returns a entity Class object using a different classloader.  
From what I notice, both calls (pass & fail cases) to the 
serp.Strings.toClass() method uses the same TemporaryClassLoader.

Since I have no access to the Serp code, I don't know what Serp does and what 
is the difference that cause the failure.

I am looking for someone who can shred some light into this problem.

Thanks.
Albert Lee.

> PCEnhancer does not find meta data for entities using pure XML annotation
> -------------------------------------------------------------------------
>
>                 Key: OPENJPA-367
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-367
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: kernel
>    Affects Versions: 1.0.0
>         Environment: All platforms
>            Reporter: Albert Lee
>         Attachments: OPENJPA-367.test.jar
>
>
> When an entity is defined using pure XML (i.e. no annotation in the entity 
> class), the enhancer does not recognized the meta data and no enhancing will 
> take place: E.g.
> -----------------------------------------
> C:\temp\test>runPcEnhancer.bat
> C:\temp\test>java -cp 
> C:\temp\test\;C:\temp\test\openjpa-1.1.0-SNAPSHOT.jar;C:\temp\test\utils.jar;C:\temp\test\geronimo-jpa_3.0_spec-1.0.jar;C:\temp\test\geronimo-jta_1.1_spec-1.1.jar
>  org.apache.openjpa.enhance.PCEnhancer
> 15  EntityUnit_JSE  TRACE  [main] openjpa.Runtime - Setting the following 
> properties from "file:/C:/temp/test/META-INF/persistence.xml" into 
> configuration: {openjpa.Id=EntityUnit_JSE, openjpa.Log=DefaultLevel=TRACE, 
> openjpa.MetaDataFactory=jpa(Resources=META-INF/jpamappings.xml, 
> Types=test.XMLDatatypeSupportTestEntity)}
> 31  EntityUnit_JSE  TRACE  [main] openjpa.Runtime - No cache marshaller found 
> for id org.apache.openjpa.conf.MetaDataCacheMaintenance.
> 47  EntityUnit_JSE  INFO   [main] openjpa.Tool - No targets were given.  
> Running on all classes in your persistent classes list, or all metadata files 
> in classpath directories if you have not listed your persistent classes.  Use 
> -help to display tool usage information.
> 62  EntityUnit_JSE  TRACE  [main] openjpa.MetaData - Scanning resource 
> "META-INF/jpamappings.xml" for persistent types.
> 62  EntityUnit_JSE  TRACE  [main] openjpa.MetaData - Scan of 
> "META-INF/jpamappings.xml" found persistent types 
> [Ljava.lang.String;@3a183a18.
> 62  EntityUnit_JSE  TRACE  [main] openjpa.MetaData - Mapping resource 
> location "file:/C:/temp/test/META-INF/jpamappings.xml" to persistent types 
> "[test.XMLDatatypeSupportTestEntity]".
> 62  EntityUnit_JSE  TRACE  [main] openjpa.MetaData - Scanning resource 
> "META-INF/orm.xml" for persistent types.
> 62  EntityUnit_JSE  TRACE  [main] openjpa.MetaData - 
> parsePersistentTypeNames() found [test.XMLDatatypeSupportTestEntity].
> 62  EntityUnit_JSE  TRACE  [main] openjpa.MetaData - Found 1 classes with 
> metadata in 15 milliseconds.
> 62  EntityUnit_JSE  TRACE  [main] openjpa.Tool - Enhancer running on type 
> "test.XMLDatatypeSupportTestEntity".
> 93  EntityUnit_JSE  TRACE  [main] openjpa.MetaData - Loading metadata for 
> "class test.XMLDatatypeSupportTestEntity" under mode "[META]".
> 125  EntityUnit_JSE  TRACE  [main] openjpa.MetaData - Parsing resource 
> "file:/C:/temp/test/META-INF/jpamappings.xml".
> 156  EntityUnit_JSE  TRACE  [main] openjpa.MetaData - Parsing class 
> "test.XMLDatatypeSupportTestEntity".
> 172  EntityUnit_JSE  TRACE  [main] openjpa.MetaData - Generating default 
> metadata for type "test.XMLDatatypeSupportTestEntity".
> 172  EntityUnit_JSE  TRACE  [main] openjpa.MetaData - Using reflection for 
> metadata generation.
> 187  EntityUnit_JSE  TRACE  [main] openjpa.MetaData - Parsing class 
> "test.XMLDatatypeSupportTestEntity".
> 187  EntityUnit_JSE  TRACE  [main] openjpa.MetaData - Parsing package 
> "test.XMLDatatypeSupportTestEntity".
> 187  EntityUnit_JSE  TRACE  [main] openjpa.MetaData - Finished parsing 
> metadata resource "file:/C:/temp/test/META-INF/jpamappings.xml".
> 187  EntityUnit_JSE  TRACE  [main] openjpa.MetaData - Parsing class 
> "test.XMLDatatypeSupportTestEntity".
> 187  EntityUnit_JSE  TRACE  [main] openjpa.Enhance - Enhancing type "class 
> test.XMLDatatypeSupportTestEntity".
> 203  EntityUnit_JSE  WARN   [main] openjpa.Enhance - Type "class 
> test.XMLDatatypeSupportTestEntity" has no metadata; enhancing as persistence 
> aware. If you intended for "class test.XMLDatatypeSupportTestEntity" to be 
> persistence-capable, then this means that OpenJPA could not find any metadata 
> for "class test.XMLDatatypeSupportTestEntity". 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.
> 203  EntityUnit_JSE  TRACE  [main] openjpa.Tool - The class does not have 
> metadata - enhanced as persistence-aware.
> -----------------------------------------
> However if the target is specified, the enhancement will occur, E.g.
> -----------------------------------------
> C:\temp\test>runPcEnhancer.bat test.XMLDatatypeSupportTestEntity
> C:\temp\test>java -cp 
> C:\temp\test\;C:\temp\test\openjpa-1.1.0-SNAPSHOT.jar;C:\temp\test\utils.jar;C:\temp\test\geronimo-jpa_3.0_spec-1.0.jar;C:\temp\test\geronimo-jta_1.1_spec-1.1.jar
>  org.apache.openjpa.enhance.PCEnhancer test.XMLDatatypeSupportTestEntity
> 15  EntityUnit_JSE  TRACE  [main] openjpa.Runtime - Setting the following 
> properties from "file:/C:/temp/test/META-INF/persistence.xml" into 
> configuration: {openjpa.Id=EntityUnit_JSE, openjpa.Log=DefaultLevel=TRACE, 
> openjpa.MetaDataFactory=jpa(Resources=META-INF/jpamappings.xml, 
> Types=test.XMLDatatypeSupportTestEntity)}
> 47  EntityUnit_JSE  TRACE  [main] openjpa.Runtime - No cache marshaller found 
> for id org.apache.openjpa.conf.MetaDataCacheMaintenance.
> 78  EntityUnit_JSE  TRACE  [main] openjpa.Runtime - No cache marshaller found 
> for id org.apache.openjpa.conf.MetaDataCacheMaintenance.
> 94  EntityUnit_JSE  TRACE  [main] openjpa.Tool - Enhancer running on type 
> "class test.XMLDatatypeSupportTestEntity".
> 125  EntityUnit_JSE  TRACE  [main] openjpa.MetaData - Loading metadata for 
> "class test.XMLDatatypeSupportTestEntity" under mode "[META]".
> 125  EntityUnit_JSE  TRACE  [main] openjpa.MetaData - Scanning resource 
> "META-INF/jpamappings.xml" for persistent types.
> 125  EntityUnit_JSE  TRACE  [main] openjpa.MetaData - Scan of 
> "META-INF/jpamappings.xml" found persistent types 
> [Ljava.lang.String;@20962096.
> 140  EntityUnit_JSE  TRACE  [main] openjpa.MetaData - Mapping resource 
> location "file:/C:/temp/test/META-INF/jpamappings.xml" to persistent types 
> "[test.XMLDatatypeSupportTestEntity]".
> 140  EntityUnit_JSE  TRACE  [main] openjpa.MetaData - Scanning resource 
> "META-INF/orm.xml" for persistent types.
> 140  EntityUnit_JSE  TRACE  [main] openjpa.MetaData - 
> parsePersistentTypeNames() found [test.XMLDatatypeSupportTestEntity].
> 140  EntityUnit_JSE  TRACE  [main] openjpa.MetaData - Found 1 classes with 
> metadata in 15 milliseconds.
> 156  EntityUnit_JSE  TRACE  [main] openjpa.MetaData - Parsing resource 
> "file:/C:/temp/test/META-INF/jpamappings.xml".
> 187  EntityUnit_JSE  TRACE  [main] openjpa.MetaData - Parsing class 
> "test.XMLDatatypeSupportTestEntity".
> 187  EntityUnit_JSE  TRACE  [main] openjpa.MetaData - Generating default 
> metadata for type "test.XMLDatatypeSupportTestEntity".
> 187  EntityUnit_JSE  TRACE  [main] openjpa.MetaData - Using reflection for 
> metadata generation.
> 203  EntityUnit_JSE  TRACE  [main] openjpa.MetaData - Parsing class 
> "test.XMLDatatypeSupportTestEntity".
> 219  EntityUnit_JSE  TRACE  [main] openjpa.MetaData - Finished parsing 
> metadata resource "file:/C:/temp/test/META-INF/jpamappings.xml".
> 219  EntityUnit_JSE  TRACE  [main] openjpa.MetaData - Set persistence-capable 
> superclass of "test.XMLDatatypeSupportTestEntity" to "null".
> 219  EntityUnit_JSE  TRACE  [main] openjpa.MetaData - Resolving metadata for 
> "[EMAIL PROTECTED]".
> 219  EntityUnit_JSE  TRACE  [main] openjpa.MetaData -   Resolving field 
> "[EMAIL PROTECTED]".
> 219  EntityUnit_JSE  TRACE  [main] openjpa.MetaData -   Resolving field 
> "[EMAIL PROTECTED]".
> 250  EntityUnit_JSE  TRACE  [main] openjpa.MetaData - Preparing mapping for 
> "test.XMLDatatypeSupportTestEntity".
> 250  EntityUnit_JSE  TRACE  [main] openjpa.MetaData - Resolving mapping for 
> "[EMAIL PROTECTED]".
> 250  EntityUnit_JSE  TRACE  [main] openjpa.Enhance - Enhancing type "class 
> test.XMLDatatypeSupportTestEntity".
> 312  EntityUnit_JSE  TRACE  [main] openjpa.MetaData - Clearing metadata 
> repository "[EMAIL PROTECTED]".
> -----------------------------------------

-- 
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