You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by "Michael Dick (JIRA)" <ji...@apache.org> on 2006/08/25 17:59:22 UTC

[jira] Created: (OPENJPA-34) Problem detecting parent's access type with runtime enhancement.

Problem detecting parent's access type with runtime enhancement. 
-----------------------------------------------------------------

                 Key: OPENJPA-34
                 URL: http://issues.apache.org/jira/browse/OPENJPA-34
             Project: OpenJPA
          Issue Type: Bug
            Reporter: Michael Dick
            Priority: Minor
         Attachments: employee-project.zip

I have a small hierarchy of entities specified in an xml descriptor (orm.xml), Employee, PartTimeEmployee and FullTimeEmployee. PartTimeEmployee and FullTimeEmployee extend Employee which is a MappedSuperclass. 

If I don't explicitly set the access type for either PartTimeEmployee or FullTimeEmployee in orm.xml and I use the static enhancer (org.apache.openjpa.enhance.PCEnhancer) everything works fine.  If I use runtime enhancement I get a warning like this : 

184  INFO   [main] openjpa.MetaData - Found 3 classes with metadata in 7 milliseconds.
88  INFO   [main] openjpa.Runtime - Starting OpenJPA 0.0.0
180  INFO   [main] openjpa.jdbc.JDBC - Using dictionary class "org.apache.openjpa.jdbc.sql.DerbyDictionary".
277  INFO   [main] openjpa.MetaData - Found 4 classes with metadata in 1 milliseconds.
985  INFO   [main] openjpa.MetaData - Parsing resource "file:/home/mikedd/workspaces/openjpa/mdd/target/classes/META-INF/orm.xml".
1307  INFO   [main] openjpa.MetaData - Parsing class "mdd.entities.descriptor.Employee".
1356  INFO   [main] openjpa.MetaData - Parsing class "mdd.entities.descriptor.Employee".
1356  INFO   [main] openjpa.MetaData - Parsing package "mdd.entities.descriptor.Employee".
1385  INFO   [main] openjpa.MetaData - Parsing class "mdd.entities.descriptor.PartTimeEmployee".
1385  INFO   [main] openjpa.MetaData - Parsing class "mdd.entities.descriptor.PartTimeEmployee".
1389  INFO   [main] openjpa.MetaData - Parsing class "mdd.entities.descriptor.FullTimeEmployee".
1390  INFO   [main] openjpa.MetaData - Parsing class "mdd.entities.descriptor.FullTimeEmployee".
1394  INFO   [main] openjpa.MetaData - Parsing class "mdd.entities.descriptor.AbstractPersonnel".
1422  WARN   [main] openjpa.Enhance - An exception was thrown while attempting to perform class file transformation on "mdd/entities/descriptor/FullTimeEmployee":
<4|false|0.0.0> org.apache.openjpa.util.UserException: Detected the following possible violations of the restrictions placed on property access persistent types:
The member for for persistent property "mdd.entities.descriptor.FullTimeEmployee.salary" was not a method: "private float mdd.entities.descriptor.FullTimeEmployee.salary".
	at org.apache.openjpa.enhance.PCEnhancer.processViolations(PCEnhancer.java:520)
	at org.apache.openjpa.enhance.PCEnhancer.run(PCEnhancer.java:287)
	at org.apache.openjpa.enhance.PCClassFileTransformer.transform(PCClassFileTransformer.java:122)
	at sun.instrument.TransformerManager.transform(TransformerManager.java:141)
	at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:174)
	at java.lang.ClassLoader.defineClassImpl(Native Method)


>From what I can tell after running the debugger the error occurs because the runtime enhancer isn't able to find the parent's metadata (and from that the access type). 

I don't think the spec is very clear in this regard. Access isn't a required attribute for entities, but the spec doesn't indicate what should happen if it isn't present (or if it does I didn't find it). 

I don't know whether this is a limitation of runtime enhancement (again I didn't see it documented anywhere, but maybe I didn't look hard enough). There are also plenty of solutions, specifying a default access type in orm.xml, or just adding access="PROPERTY" to the entity will work. 

If it's not an architectural limitation though, I think we should try to get runtime enhancement to work in the same manner as static enhancement. 

In case it helps here's my javaagent setting : 
-javaagent:/home/mikedd/.m2/repository/org/apache/openjpa/openjpa-kernel-5/0.9.0-SNAPSHOT/openjpa-kernel-5-0.9.0-SNAPSHOT.jar=scanDevPath=true,MetaDataFactory=jpa

I've attached the source that I've used to produce the problem, include the eclipse .project and .classpath files (you'll probably have to update these). There's also a pom.xml which can be used to compile or at least set up the classpath in eclipse. I don't know how to toggle between runtime and static enhancement with maven so I haven't used it to run the tests. 

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

[jira] Resolved: (OPENJPA-34) Problem detecting parent's access type with runtime enhancement.

Posted by "Michael Dick (JIRA)" <ji...@apache.org>.
     [ http://issues.apache.org/jira/browse/OPENJPA-34?page=all ]

Michael Dick resolved OPENJPA-34.
---------------------------------

    Resolution: Fixed

Appears to be resolved (not sure which change fixed it though). 

> Problem detecting parent's access type with runtime enhancement.
> ----------------------------------------------------------------
>
>                 Key: OPENJPA-34
>                 URL: http://issues.apache.org/jira/browse/OPENJPA-34
>             Project: OpenJPA
>          Issue Type: Bug
>            Reporter: Michael Dick
>            Priority: Minor
>         Attachments: employee-project.zip
>
>
> I have a small hierarchy of entities specified in an xml descriptor (orm.xml), Employee, PartTimeEmployee and FullTimeEmployee. PartTimeEmployee and FullTimeEmployee extend Employee which is a MappedSuperclass. 
> If I don't explicitly set the access type for either PartTimeEmployee or FullTimeEmployee in orm.xml and I use the static enhancer (org.apache.openjpa.enhance.PCEnhancer) everything works fine.  If I use runtime enhancement I get a warning like this : 
> 184  INFO   [main] openjpa.MetaData - Found 3 classes with metadata in 7 milliseconds.
> 88  INFO   [main] openjpa.Runtime - Starting OpenJPA 0.0.0
> 180  INFO   [main] openjpa.jdbc.JDBC - Using dictionary class "org.apache.openjpa.jdbc.sql.DerbyDictionary".
> 277  INFO   [main] openjpa.MetaData - Found 4 classes with metadata in 1 milliseconds.
> 985  INFO   [main] openjpa.MetaData - Parsing resource "file:/home/mikedd/workspaces/openjpa/mdd/target/classes/META-INF/orm.xml".
> 1307  INFO   [main] openjpa.MetaData - Parsing class "mdd.entities.descriptor.Employee".
> 1356  INFO   [main] openjpa.MetaData - Parsing class "mdd.entities.descriptor.Employee".
> 1356  INFO   [main] openjpa.MetaData - Parsing package "mdd.entities.descriptor.Employee".
> 1385  INFO   [main] openjpa.MetaData - Parsing class "mdd.entities.descriptor.PartTimeEmployee".
> 1385  INFO   [main] openjpa.MetaData - Parsing class "mdd.entities.descriptor.PartTimeEmployee".
> 1389  INFO   [main] openjpa.MetaData - Parsing class "mdd.entities.descriptor.FullTimeEmployee".
> 1390  INFO   [main] openjpa.MetaData - Parsing class "mdd.entities.descriptor.FullTimeEmployee".
> 1394  INFO   [main] openjpa.MetaData - Parsing class "mdd.entities.descriptor.AbstractPersonnel".
> 1422  WARN   [main] openjpa.Enhance - An exception was thrown while attempting to perform class file transformation on "mdd/entities/descriptor/FullTimeEmployee":
> <4|false|0.0.0> org.apache.openjpa.util.UserException: Detected the following possible violations of the restrictions placed on property access persistent types:
> The member for for persistent property "mdd.entities.descriptor.FullTimeEmployee.salary" was not a method: "private float mdd.entities.descriptor.FullTimeEmployee.salary".
> 	at org.apache.openjpa.enhance.PCEnhancer.processViolations(PCEnhancer.java:520)
> 	at org.apache.openjpa.enhance.PCEnhancer.run(PCEnhancer.java:287)
> 	at org.apache.openjpa.enhance.PCClassFileTransformer.transform(PCClassFileTransformer.java:122)
> 	at sun.instrument.TransformerManager.transform(TransformerManager.java:141)
> 	at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:174)
> 	at java.lang.ClassLoader.defineClassImpl(Native Method)
> From what I can tell after running the debugger the error occurs because the runtime enhancer isn't able to find the parent's metadata (and from that the access type). 
> I don't think the spec is very clear in this regard. Access isn't a required attribute for entities, but the spec doesn't indicate what should happen if it isn't present (or if it does I didn't find it). 
> I don't know whether this is a limitation of runtime enhancement (again I didn't see it documented anywhere, but maybe I didn't look hard enough). There are also plenty of solutions, specifying a default access type in orm.xml, or just adding access="PROPERTY" to the entity will work. 
> If it's not an architectural limitation though, I think we should try to get runtime enhancement to work in the same manner as static enhancement. 
> In case it helps here's my javaagent setting : 
> -javaagent:/home/mikedd/.m2/repository/org/apache/openjpa/openjpa-kernel-5/0.9.0-SNAPSHOT/openjpa-kernel-5-0.9.0-SNAPSHOT.jar=scanDevPath=true,MetaDataFactory=jpa
> I've attached the source that I've used to produce the problem, include the eclipse .project and .classpath files (you'll probably have to update these). There's also a pom.xml which can be used to compile or at least set up the classpath in eclipse. I don't know how to toggle between runtime and static enhancement with maven so I haven't used it to run the tests. 

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

[jira] Commented: (OPENJPA-34) Problem detecting parent's access type with runtime enhancement.

Posted by "Marc Prud'hommeaux (JIRA)" <ji...@apache.org>.
    [ http://issues.apache.org/jira/browse/OPENJPA-34?page=comments#action_12439916 ] 
            
Marc Prud'hommeaux commented on OPENJPA-34:
-------------------------------------------

I suspect the fixes for OPENJPA-41 and OPENJPA-42 also addressed this problem.

> Problem detecting parent's access type with runtime enhancement.
> ----------------------------------------------------------------
>
>                 Key: OPENJPA-34
>                 URL: http://issues.apache.org/jira/browse/OPENJPA-34
>             Project: OpenJPA
>          Issue Type: Bug
>            Reporter: Michael Dick
>            Priority: Minor
>         Attachments: employee-project.zip
>
>
> I have a small hierarchy of entities specified in an xml descriptor (orm.xml), Employee, PartTimeEmployee and FullTimeEmployee. PartTimeEmployee and FullTimeEmployee extend Employee which is a MappedSuperclass. 
> If I don't explicitly set the access type for either PartTimeEmployee or FullTimeEmployee in orm.xml and I use the static enhancer (org.apache.openjpa.enhance.PCEnhancer) everything works fine.  If I use runtime enhancement I get a warning like this : 
> 184  INFO   [main] openjpa.MetaData - Found 3 classes with metadata in 7 milliseconds.
> 88  INFO   [main] openjpa.Runtime - Starting OpenJPA 0.0.0
> 180  INFO   [main] openjpa.jdbc.JDBC - Using dictionary class "org.apache.openjpa.jdbc.sql.DerbyDictionary".
> 277  INFO   [main] openjpa.MetaData - Found 4 classes with metadata in 1 milliseconds.
> 985  INFO   [main] openjpa.MetaData - Parsing resource "file:/home/mikedd/workspaces/openjpa/mdd/target/classes/META-INF/orm.xml".
> 1307  INFO   [main] openjpa.MetaData - Parsing class "mdd.entities.descriptor.Employee".
> 1356  INFO   [main] openjpa.MetaData - Parsing class "mdd.entities.descriptor.Employee".
> 1356  INFO   [main] openjpa.MetaData - Parsing package "mdd.entities.descriptor.Employee".
> 1385  INFO   [main] openjpa.MetaData - Parsing class "mdd.entities.descriptor.PartTimeEmployee".
> 1385  INFO   [main] openjpa.MetaData - Parsing class "mdd.entities.descriptor.PartTimeEmployee".
> 1389  INFO   [main] openjpa.MetaData - Parsing class "mdd.entities.descriptor.FullTimeEmployee".
> 1390  INFO   [main] openjpa.MetaData - Parsing class "mdd.entities.descriptor.FullTimeEmployee".
> 1394  INFO   [main] openjpa.MetaData - Parsing class "mdd.entities.descriptor.AbstractPersonnel".
> 1422  WARN   [main] openjpa.Enhance - An exception was thrown while attempting to perform class file transformation on "mdd/entities/descriptor/FullTimeEmployee":
> <4|false|0.0.0> org.apache.openjpa.util.UserException: Detected the following possible violations of the restrictions placed on property access persistent types:
> The member for for persistent property "mdd.entities.descriptor.FullTimeEmployee.salary" was not a method: "private float mdd.entities.descriptor.FullTimeEmployee.salary".
> 	at org.apache.openjpa.enhance.PCEnhancer.processViolations(PCEnhancer.java:520)
> 	at org.apache.openjpa.enhance.PCEnhancer.run(PCEnhancer.java:287)
> 	at org.apache.openjpa.enhance.PCClassFileTransformer.transform(PCClassFileTransformer.java:122)
> 	at sun.instrument.TransformerManager.transform(TransformerManager.java:141)
> 	at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:174)
> 	at java.lang.ClassLoader.defineClassImpl(Native Method)
> From what I can tell after running the debugger the error occurs because the runtime enhancer isn't able to find the parent's metadata (and from that the access type). 
> I don't think the spec is very clear in this regard. Access isn't a required attribute for entities, but the spec doesn't indicate what should happen if it isn't present (or if it does I didn't find it). 
> I don't know whether this is a limitation of runtime enhancement (again I didn't see it documented anywhere, but maybe I didn't look hard enough). There are also plenty of solutions, specifying a default access type in orm.xml, or just adding access="PROPERTY" to the entity will work. 
> If it's not an architectural limitation though, I think we should try to get runtime enhancement to work in the same manner as static enhancement. 
> In case it helps here's my javaagent setting : 
> -javaagent:/home/mikedd/.m2/repository/org/apache/openjpa/openjpa-kernel-5/0.9.0-SNAPSHOT/openjpa-kernel-5-0.9.0-SNAPSHOT.jar=scanDevPath=true,MetaDataFactory=jpa
> I've attached the source that I've used to produce the problem, include the eclipse .project and .classpath files (you'll probably have to update these). There's also a pom.xml which can be used to compile or at least set up the classpath in eclipse. I don't know how to toggle between runtime and static enhancement with maven so I haven't used it to run the tests. 

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira