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

Heath Thomann closed OPENJPA-2095.
----------------------------------

    
> Unhandled exception thrown from within an Externalizer method causes 
> incorrect/incomplete SQL to be generated/executed.
> -----------------------------------------------------------------------------------------------------------------------
>
>                 Key: OPENJPA-2095
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-2095
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: sql
>    Affects Versions: 1.2.3, 2.0.2, 2.1.2, 2.2.0
>            Reporter: Heath Thomann
>            Assignee: Heath Thomann
>             Fix For: 1.2.3, 2.0.2, 2.1.2, 2.3.0, 2.2.1
>
>         Attachments: ExternalizerTest.zip
>
>
> I've re-created an issue with Externalizers.  That is, when the Externalizer 
> method (i.e. the method listed in the @Externalizer) causes/throws an 
> exception, OpenJPA generates, and executes, incorrect/incomplete SQL.  To 
> better explain, let me describe some test code snippets which are from the 
> test I'll provide.  First, take this entity:
> @Entity
> public class TestItem implements Serializable {
> .....
>       @org.apache.openjpa.persistence.Persistent
>       @org.apache.openjpa.persistence.Externalizer("check")
>       private TestExternal ext;
> And take the following class TestExternal:
> public static class TestExternal {
> .....
>       public String check() throws Exception {
>               throw new PersistenceException("test exception externalizer");
> With this code, lets look at the case where we persist a new TestItem, and 
> the case where we update an existing one.  When we create a new TestItem and 
> persist it, OpenJPA generates and executes the following SQL:
> INSERT INTO TESTITEM (data) VALUES (?)
> However, this SQL should be generated:
> INSERT INTO TESTITEM (iref, data, ext, name) VALUES (?, ?, ?, ?)
> When we update an existing TestItem, OpenJPA generates, and executes, the 
> following SQL:
> UPDATE TESTITEM SET data = ?
> However, this SQL should be generated:
> UPDATE TESTITEM SET data = ? WHERE iref = ?
> Because an unhandled exception is thrown by the Externalizer method, the 
> transaction will be rolled back.  However, if the SQL were to actually 
> commit, every row in TestItem would be updated with the value in 'data'.  
> Furthermore, in the case where there are hundreds/thousands of rows in the 
> DB, the execution of the SQL may take a long time to complete and will 
> maintain a lock on the TestItem table during the execution, possibly locking 
> out other clients.
> I've included a simple test, named ExternalizerTest.zip, which demonstrates 
> the issue.
> Thanks,
> Heath

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to