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

Pinaki Poddar resolved OPENJPA-458.
-----------------------------------

    Resolution: Fixed

> OpenJPA doesn't throw standard JPA exceptions
> ---------------------------------------------
>
>                 Key: OPENJPA-458
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-458
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: jpa
>    Affects Versions: 1.0.1
>         Environment: OpenJPA 1.0.0
> Windows
>            Reporter: Gul Onural
>            Assignee: Pinaki Poddar
>            Priority: Critical
>
> OpenJPA doesn't throw standard JPA exceptions in the case of failure to 
> persist or commit. 
> For example, the JPA spec states that the EntityExistsException is thrown by 
> the persistence provider when EntityManager.persist(Object) is called and the 
> entity already exists. 
> However, the OpenJPA never raises the EntityExistsException, instead raises 
> RollbackException.
> In order to produce the issue, just take the hellojpa example comes with the 
> OpenJPA distro. and modify Message.java to make 
> variable message an ID (original Message class uses timestamp as ID, just 
> change the ID to be message variable for the purpose of  reproducing the 
> issue explained here) : 
>    @Id
>     private String message;
> Then run the hellojpa after this very simple modification, twice. Second 
> execution fails because of duplicate key. The stack trace is captured below 
> and notice that there is no  EntityExistsException in the stack trace at all. 
> Because of this, the caller of the jpa objects cannot differenciate 
> EntityExistsException from any other exception and for example the GUI 
> cleints cannot display meaningful error code to reflect exactly what happend. 
> Here is the stack trace :
> Buildfile: D:\apache-openjpa-1.0.0\examples\hellojpa\build.xml
> pre-compile:
> compile:
> run:
>      [java] 3063  hellojpa  TRACE  [main] openjpa.jdbc.SQL - <t 26760685, 
> conn 3238031> executing prepstmnt 28409161 INSERT INTO Message (message, 
> created, id) VALUES (?, ?, ?) [params=(String) Hello Persistence!, 
> (Timestamp) 2007-12-03 15:59:24.663, (long) 1196715564663]
>      [java] 3157  hellojpa  TRACE  [main] openjpa.jdbc.SQL - <t 26760685, 
> conn 3238031> [94 ms] spent
>      [java] Exception in thread "main" <openjpa-1.0.0-r420667:568756 fatal 
> store error> org.apache.openjpa.persistence.RollbackException: The 
> transaction has been rolled back.  See the nested exceptions for details on 
> the errors that occurred.
>      [java]   at 
> org.apache.openjpa.persistence.EntityManagerImpl.commit(EntityManagerImpl.java:419)
>      [java]   at hellojpa.Main.main(Main.java:53)
>      [java] Caused by: <openjpa-1.0.0-r420667:568756 fatal general error> 
> org.apache.openjpa.persistence.PersistenceException: The transaction has been 
> rolled back.  See the nested exceptions for details on the errors that 
> occurred.
>      [java]   at 
> org.apache.openjpa.kernel.BrokerImpl.newFlushException(BrokerImpl.java:2099)
>      [java]   at 
> org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1946)
>      [java]   at 
> org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:1844)
>      [java]   at 
> org.apache.openjpa.kernel.BrokerImpl.beforeCompletion(BrokerImpl.java:1762)
>      [java]   at 
> org.apache.openjpa.kernel.LocalManagedRuntime.commit(LocalManagedRuntime.java:81)
>      [java]   at 
> org.apache.openjpa.kernel.BrokerImpl.commit(BrokerImpl.java:1292)
>      [java]   at 
> org.apache.openjpa.kernel.DelegatingBroker.commit(DelegatingBroker.java:861)
>      [java]   at 
> org.apache.openjpa.persistence.EntityManagerImpl.commit(EntityManagerImpl.java:408)
>      [java]   ... 1 more
>      [java] Caused by: <openjpa-1.0.0-r420667:568756 nonfatal general error> 
> org.apache.openjpa.persistence.PersistenceException: The statement was 
> aborted because it would have caused a duplicate key value in a unique or 
> primary key constraint or unique index identified by 'SQL071203035857400' 
> defined on 'MESSAGE'. {prepstmnt 28409161 INSERT INTO Message (message, 
> created, id) VALUES (?, ?, ?) [params=(String) Hello Persistence!, 
> (Timestamp) 2007-12-03 15:59:24.663, (long) 1196715564663]} [code=20000, 
> state=23505]
>      [java] FailedObject: [EMAIL PROTECTED]
>      [java]   at 
> org.apache.openjpa.jdbc.sql.DBDictionary.newStoreException(DBDictionary.java:3849)
>      [java]   at 
> org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:97)
>      [java]   at 
> org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:67)
>      [java]   at 
> org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flushInternal(PreparedStatementManagerImpl.java:108)
>      [java]   at 
> org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flush(PreparedStatementManagerImpl.java:73)
>      [java]   at 
> org.apache.openjpa.jdbc.kernel.ConstraintUpdateManager.flush(ConstraintUpdateManager.java:543)
>      [java]   at 
> org.apache.openjpa.jdbc.kernel.ConstraintUpdateManager.flush(ConstraintUpdateManager.java:105)
>      [java]   at 
> org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:89)
>      [java]   at 
> org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:72)
>      [java]   at 
> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.flush(JDBCStoreManager.java:514)
>      [java]   at 
> org.apache.openjpa.kernel.DelegatingStoreManager.flush(DelegatingStoreManager.java:130)
>      [java]   ... 8 more
>      [java] Caused by: org.apache.openjpa.lib.jdbc.ReportingSQLException: The 
> statement was aborted because it would have caused a duplicate key value in a 
> unique or primary key constraint or unique index identified by 
> 'SQL071203035857400' defined on 'MESSAGE'. {prepstmnt 28409161 INSERT INTO 
> Message (message, created, id) VALUES (?, ?, ?) [params=(String) Hello 
> Persistence!, (Timestamp) 2007-12-03 15:59:24.663, (long) 1196715564663]} 
> [code=20000, state=23505]
>      [java]   at 
> org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:192)
>      [java]   at 
> org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.access$800(LoggingConnectionDecorator.java:57)
>      [java]   at 
> org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator$LoggingConnection$LoggingPreparedStatement.executeUpdate(LoggingConnectionDecorator.java:858)
>      [java]   at 
> org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:269)
>      [java]   at 
> org.apache.openjpa.jdbc.kernel.JDBCStoreManager$CancelPreparedStatement.executeUpdate(JDBCStoreManager.java:1363)
>      [java]   at 
> org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flushInternal(PreparedStatementManagerImpl.java:97)
>      [java]   ... 15 more
> BUILD FAILED
> D:\apache-openjpa-1.0.0\examples\build.xml:84: Java returned: 1
> Total time: 6 seconds

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

Reply via email to