You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by "Marc Prud'hommeaux (JIRA)" <ji...@apache.org> on 2007/08/24 22:59:30 UTC

[jira] Created: (OPENJPA-335) Logic in getters for entities with property access causes the PCEnhancer to hang

Logic in getters for entities with property access causes the PCEnhancer to hang
--------------------------------------------------------------------------------

                 Key: OPENJPA-335
                 URL: https://issues.apache.org/jira/browse/OPENJPA-335
             Project: OpenJPA
          Issue Type: Bug
          Components: kernel
    Affects Versions: 1.0.0
            Reporter: Marc Prud'hommeaux


If a getter had any logic in it (i.e., does not simply return the entity's member), the PCEnhancer will hang when trying to enhance it (both with build-time and run-time enhancement). This can be easily reproduced by changing /examples/hellojpa/Message.java in the OpenJPA distribution to using property access, and changing getMessage() to look like the following:

    @Basic
    public String getMessage() {
        if (Math.abs(1) == 1)
            return message;
        else
            return message;
    }

One thread dump of the hang looks like:

     [java] "main" prio=5 tid=0x00501830 nid=0x1804c00 runnable [0xb07fe000..0xb08000dc]
     [java]     at java.lang.Class.forName0(Native Method)
     [java]     at java.lang.Class.forName(Class.java:242)
     [java]     at serp.util.Strings.toClass(Strings.java:162)
     [java]     at serp.util.Strings.toClass(Strings.java:108)
     [java]     at serp.bytecode.TypedInstruction.getType(TypedInstruction.java:76)
     [java]     at serp.bytecode.LoadInstruction.isThis(LoadInstruction.java:164)
     [java]     at org.apache.openjpa.enhance.PCEnhancer.findField(PCEnhancer.java:718)
     [java]     at org.apache.openjpa.enhance.PCEnhancer.getReturnedField(PCEnhancer.java:665)
     [java]     at org.apache.openjpa.enhance.PCEnhancer.validateProperties(PCEnhancer.java:566)
     [java]     at org.apache.openjpa.enhance.PCEnhancer.run(PCEnhancer.java:444)
     [java]     at org.apache.openjpa.enhance.PCClassFileTransformer.transform(PCClassFileTransformer.java:134)
     [java]     at sun.instrument.TransformerManager.transform(TransformerManager.java:122)
     [java]     at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:155)
     [java]     at java.lang.ClassLoader.defineClass1(Native Method)
     [java]     at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
     [java]     at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
     [java]     at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
     [java]     at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
     [java]     at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
     [java]     at java.security.AccessController.doPrivileged(Native Method)
     [java]     at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
     [java]     at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
     [java]     - locked <0x06a75a30> (a sun.misc.Launcher$AppClassLoader)
     [java]     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
     [java]     - locked <0x06a75a30> (a sun.misc.Launcher$AppClassLoader)
     [java]     at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
     [java]     at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
     [java]     - locked <0x06a75a30> (a sun.misc.Launcher$AppClassLoader)
     [java]     at java.lang.Class.forName0(Native Method)
     [java]     at java.lang.Class.forName(Class.java:242)
     [java]     at org.apache.openjpa.meta.MetaDataRepository.classForName(MetaDataRepository.java:1253)
     [java]     at org.apache.openjpa.meta.MetaDataRepository.loadPersistentTypes(MetaDataRepository.java:1241)
     [java]     - locked <0x06b14900> (a org.apache.openjpa.jdbc.meta.MappingRepository)
     [java]     at org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory.synchronizeMappings(JDBCBrokerFactory.java:148)
     [java]     at org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory.newBrokerImpl(JDBCBrokerFactory.java:130)
     [java]     at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:186)
     [java]     at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:142)
     [java]     at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:192)
     [java]     at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:145)
     [java]     at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:56)
     [java]     at hellojpa.Main.main(Main.java:43)

The bug appears to have been introduced in svn revision 560016 with the following change to PCEnhancer.findField:

-            code.next();
-            code.next();
-            code.next();
+            while (backupCount > 0) {
+                code.next();
+                backupCount--;
+            }

Reverting back to the three subsequent code.next() calls appears to fix the problem.

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


[jira] Resolved: (OPENJPA-335) Logic in getters for entities with property access causes the PCEnhancer to hang

Posted by "Patrick Linskey (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/OPENJPA-335?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Patrick Linskey resolved OPENJPA-335.
-------------------------------------

       Resolution: Fixed
    Fix Version/s: 1.1.0
                   1.0.1

Resolved in 1.0.x and trunk.

> Logic in getters for entities with property access causes the PCEnhancer to hang
> --------------------------------------------------------------------------------
>
>                 Key: OPENJPA-335
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-335
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: kernel
>    Affects Versions: 1.0.0
>            Reporter: Marc Prud'hommeaux
>             Fix For: 1.0.1, 1.1.0
>
>
> If a getter had any logic in it (i.e., does not simply return the entity's member), the PCEnhancer will hang when trying to enhance it (both with build-time and run-time enhancement). This can be easily reproduced by changing /examples/hellojpa/Message.java in the OpenJPA distribution to using property access, and changing getMessage() to look like the following:
>     @Basic
>     public String getMessage() {
>         if (Math.abs(1) == 1)
>             return message;
>         else
>             return message;
>     }
> One thread dump of the hang looks like:
>      [java] "main" prio=5 tid=0x00501830 nid=0x1804c00 runnable [0xb07fe000..0xb08000dc]
>      [java]     at java.lang.Class.forName0(Native Method)
>      [java]     at java.lang.Class.forName(Class.java:242)
>      [java]     at serp.util.Strings.toClass(Strings.java:162)
>      [java]     at serp.util.Strings.toClass(Strings.java:108)
>      [java]     at serp.bytecode.TypedInstruction.getType(TypedInstruction.java:76)
>      [java]     at serp.bytecode.LoadInstruction.isThis(LoadInstruction.java:164)
>      [java]     at org.apache.openjpa.enhance.PCEnhancer.findField(PCEnhancer.java:718)
>      [java]     at org.apache.openjpa.enhance.PCEnhancer.getReturnedField(PCEnhancer.java:665)
>      [java]     at org.apache.openjpa.enhance.PCEnhancer.validateProperties(PCEnhancer.java:566)
>      [java]     at org.apache.openjpa.enhance.PCEnhancer.run(PCEnhancer.java:444)
>      [java]     at org.apache.openjpa.enhance.PCClassFileTransformer.transform(PCClassFileTransformer.java:134)
>      [java]     at sun.instrument.TransformerManager.transform(TransformerManager.java:122)
>      [java]     at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:155)
>      [java]     at java.lang.ClassLoader.defineClass1(Native Method)
>      [java]     at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
>      [java]     at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
>      [java]     at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
>      [java]     at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
>      [java]     at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
>      [java]     at java.security.AccessController.doPrivileged(Native Method)
>      [java]     at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
>      [java]     at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
>      [java]     - locked <0x06a75a30> (a sun.misc.Launcher$AppClassLoader)
>      [java]     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
>      [java]     - locked <0x06a75a30> (a sun.misc.Launcher$AppClassLoader)
>      [java]     at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
>      [java]     at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
>      [java]     - locked <0x06a75a30> (a sun.misc.Launcher$AppClassLoader)
>      [java]     at java.lang.Class.forName0(Native Method)
>      [java]     at java.lang.Class.forName(Class.java:242)
>      [java]     at org.apache.openjpa.meta.MetaDataRepository.classForName(MetaDataRepository.java:1253)
>      [java]     at org.apache.openjpa.meta.MetaDataRepository.loadPersistentTypes(MetaDataRepository.java:1241)
>      [java]     - locked <0x06b14900> (a org.apache.openjpa.jdbc.meta.MappingRepository)
>      [java]     at org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory.synchronizeMappings(JDBCBrokerFactory.java:148)
>      [java]     at org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory.newBrokerImpl(JDBCBrokerFactory.java:130)
>      [java]     at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:186)
>      [java]     at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:142)
>      [java]     at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:192)
>      [java]     at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:145)
>      [java]     at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:56)
>      [java]     at hellojpa.Main.main(Main.java:43)
> The bug appears to have been introduced in svn revision 560016 with the following change to PCEnhancer.findField:
> -            code.next();
> -            code.next();
> -            code.next();
> +            while (backupCount > 0) {
> +                code.next();
> +                backupCount--;
> +            }
> Reverting back to the three subsequent code.next() calls appears to fix the problem.

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