You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by "Fay Wang (JIRA)" <ji...@apache.org> on 2009/10/15 09:13:31 UTC

[jira] Updated: (OPENJPA-1352) Merge fails if an entity has an element collection which is contructed using Arrays.asList

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

Fay Wang updated OPENJPA-1352:
------------------------------

    Attachment: OPENJPA-1352.patch

Although Arrays.asList returns a List object, its class is Arrays.ArrayList. This is a static private inner class and can only be constructed from within Arrays. During merge/persist, openjpa needs to construct a proxyCollection by instantiating a new List object based on the class type of the original collection. This attempt fails because Arrays.ArrayList can not be loaded/constructed from outside Arrays.

The attached patch is to return null value if the class can not be loaded instead of throwing the exception. A test case will be attached later. 

> Merge fails if an entity has an element collection which is contructed using Arrays.asList
> ------------------------------------------------------------------------------------------
>
>                 Key: OPENJPA-1352
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-1352
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: kernel
>            Reporter: Fay Wang
>            Assignee: Fay Wang
>         Attachments: OPENJPA-1352.patch
>
>
> When an entity has an element collection, which is constructed using Arrays.asList, the following exception is thrown:
> java.lang.IllegalAccessError:java.util.Arrays$ArrayList
> 	at java.lang.ClassLoader.defineClassImpl(Native Method)
> 	at java.lang.ClassLoader.defineClass(ClassLoader.java:265)
> 	at java.lang.ClassLoader.defineClass(ClassLoader.java:202)
> 	at serp.bytecode.BCClassLoader.findClass(BCClassLoader.java:50)
> 	at java.lang.ClassLoader.loadClass(ClassLoader.java:643)
> 	at java.lang.ClassLoader.loadClass(ClassLoader.java:609)
> 	at java.lang.Class.forNameImpl(Native Method)
> 	at java.lang.Class.forName(Class.java:169)
> 	at org.apache.openjpa.util.GeneratedClasses.loadBCClass(GeneratedClasses.java:67)
> 	at org.apache.openjpa.util.ProxyManagerImpl.getFactoryProxyCollection(ProxyManagerImpl.java:363)
> 	at org.apache.openjpa.util.ProxyManagerImpl.copyCollection(ProxyManagerImpl.java:182)
> 	at org.apache.openjpa.kernel.AttachStrategy.copyCollection(AttachStrategy.java:344)
> 	at org.apache.openjpa.kernel.AttachStrategy.attachCollection(AttachStrategy.java:321)
> 	at org.apache.openjpa.kernel.AttachStrategy.attachField(AttachStrategy.java:218)
> 	at org.apache.openjpa.kernel.VersionAttachStrategy.attach(VersionAttachStrategy.java:153)
> 	at org.apache.openjpa.kernel.AttachManager.attach(AttachManager.java:251)
> 	at org.apache.openjpa.kernel.AttachStrategy.attachField(AttachStrategy.java:202)
> 	at org.apache.openjpa.kernel.VersionAttachStrategy.attach(VersionAttachStrategy.java:153)
> 	at org.apache.openjpa.kernel.AttachManager.attach(AttachManager.java:251)
> 	at org.apache.openjpa.kernel.AttachManager.attach(AttachManager.java:104)
> 	at org.apache.openjpa.kernel.BrokerImpl.attach(BrokerImpl.java:3322)
> 	at org.apache.openjpa.kernel.DelegatingBroker.attach(DelegatingBroker.java:1176)
> 	at org.apache.openjpa.persistence.EntityManagerImpl.merge(EntityManagerImpl.java:858)

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