openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Marc Prud'hommeaux (JIRA)" <j...@apache.org>
Subject [jira] Commented: (OPENJPA-34) Problem detecting parent's access type with runtime enhancement.
Date Wed, 04 Oct 2006 17:49:19 GMT
    [ 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

        

Mime
View raw message