Christian Schneider created ARIES-1412:
------------------------------------------

             Summary: EmProxy needs to unwrap InvocationTargetException
                 Key: ARIES-1412
                 URL: https://issues.apache.org/jira/browse/ARIES-1412
             Project: Aries
          Issue Type: Bug
          Components: JPA
    Affects Versions: jpa-2.1.0
            Reporter: Christian Schneider
            Assignee: Christian Schneider
             Fix For: jpa-2.2.0


Currently EmProxy simply throws the exception from the invocation. If a 
PersistenceException is thrown inside the persistence provider it will surface 
as an InvocationtargetException on the InvocationHandller. In the log it will 
look like below. 

It should be the real PersistenceException though. This works by unwrapping the 
InvocationtargetException.

----
2015-09-20 11:37:51,197 | WARN  | pool-39-thread-1 | InitHelper                 
      | 63 - net.lr.tasklist.cdi.tasklist-persistence - 1.0.0.SNAPSHOT | 
java.lang.reflect.UndeclaredThrowableException
        at com.sun.proxy.$Proxy33.flush(Unknown 
Source)[58:javax.persistence:2.1.0.v201304241213]
        at Proxy4d1c1d44_8813_413d_8045_ba268a99b2c0.flush(Unknown Source)[:]
        at 
net.lr.tasklist.persistence.impl.TaskServiceImpl.addTask(TaskServiceImpl.java:39)[63:net.lr.tasklist.cdi.tasklist-persistence:1.0.0.SNAPSHOT]
        at Proxy3316312c_9444_405a_90e5_af21ec088f0b.addTask(Unknown Source)[:]
        at 
net.lr.tasklist.persistence.impl.InitHelper.addSampleTask(InitHelper.java:38)[63:net.lr.tasklist.cdi.tasklist-persistence:1.0.0.SNAPSHOT]
        at 
net.lr.tasklist.persistence.impl.InitHelper.access$0(InitHelper.java:36)[63:net.lr.tasklist.cdi.tasklist-persistence:1.0.0.SNAPSHOT]
        at 
net.lr.tasklist.persistence.impl.InitHelper$1.run(InitHelper.java:27)[63:net.lr.tasklist.cdi.tasklist-persistence:1.0.0.SNAPSHOT]
        at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)[:1.7.0_60]
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)[:1.7.0_60]
        at java.lang.Thread.run(Thread.java:745)[:1.7.0_60]
Caused by: java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native 
Method)[:1.7.0_60]
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)[:1.7.0_60]
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)[:1.7.0_60]
        at java.lang.reflect.Method.invoke(Method.java:606)[:1.7.0_60]
        at 
org.apache.aries.jpa.support.osgi.impl.EmProxy.invoke(EmProxy.java:41)[74:org.apache.aries.jpa.support:2.2.0.SNAPSHOT]
        ... 10 more
Caused by: javax.persistence.PersistenceException: 
org.hibernate.exception.ConstraintViolationException: could not execute 
statement
        at 
org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1763)
        at 
org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1677)
        at 
org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1683)
        at 
org.hibernate.jpa.spi.AbstractEntityManagerImpl.flush(AbstractEntityManagerImpl.java:1338)
        ... 15 more
Caused by: org.hibernate.exception.ConstraintViolationException: could not 
execute statement
        at 
org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:129)
        at 
org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49)
        at 
org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:126)
        at 
org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:112)
        at 
org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:211)
        at 
org.hibernate.engine.jdbc.batch.internal.NonBatchingBatch.addToBatch(NonBatchingBatch.java:62)
        at 
org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3124)
        at 
org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3581)
        at 
org.hibernate.action.internal.EntityInsertAction.execute(EntityInsertAction.java:104)
        at 
org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:463)
        at 
org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:349)
        at 
org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:350)
        at 
org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:56)
        at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1222)
        at 
org.hibernate.jpa.spi.AbstractEntityManagerImpl.flush(AbstractEntityManagerImpl.java:1335)
        ... 15 more
Caused by: org.h2.jdbc.JdbcSQLException: Unique index or primary key violation: 
"PRIMARY_KEY_2 ON PUBLIC.TASK(ID)"; SQL statement:
insert into Task (description, dueDate, finished, title, id) values (?, ?, ?, 
?, ?) [23505-172]
        at org.h2.message.DbException.getJdbcSQLException(DbException.java:329)
        at org.h2.message.DbException.get(DbException.java:169)
        at org.h2.message.DbException.get(DbException.java:146)
        at org.h2.index.BaseIndex.getDuplicateKeyException(BaseIndex.java:83)
        at org.h2.index.TreeIndex.add(TreeIndex.java:65)
        at org.h2.table.RegularTable.addRow(RegularTable.java:124)
        at org.h2.command.dml.Insert.insertRows(Insert.java:126)
        at org.h2.command.dml.Insert.update(Insert.java:86)
        at org.h2.command.CommandContainer.update(CommandContainer.java:79)
        at org.h2.command.Command.executeUpdate(Command.java:235)
        at 
org.h2.jdbc.JdbcPreparedStatement.executeUpdateInternal(JdbcPreparedStatement.java:154)
        at 
org.h2.jdbc.JdbcPreparedStatement.executeUpdate(JdbcPreparedStatement.java:140)
        at 
org.apache.commons.dbcp2.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:98)
        at 
org.apache.commons.dbcp2.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:98)
        at 
org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:208)
        ... 25 more




--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to