Expand my Community achievements bar.

How to store/hold the original exception thru DataServiceException

Avatar

Level 1
I want to provide some useful information to my user as to
what went wrong in the dataservice (DM) logic. This is exception
trace I see in the logging:



Caused by: java.sql.SQLIntegrityConstraintViolationException:
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 'SQL070814105731220'

defined on 'EMPLOYEE'.

at
org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(Unknown
Source)

at
org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown
Source)

at
org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(Unknown
Source)

at
org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(Unknown
Source)

at
org.apache.derby.impl.jdbc.EmbedConnection.handleException(Unknown
Source)

at
org.apache.derby.impl.jdbc.ConnectionChild.handleException(Unknown
Source)

at
org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(Unknown
Source)

at
org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeStatement(Unknown
Source)

at
org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeUpdate(Unknown
Source)

at
org.hibernate.jdbc.NonBatchingBatcher.addToBatch(NonBatchingBatcher.java:23)

at
org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2247)

... 25 more



Caused by: java.sql.SQLException: 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 'SQL070814105731220' defined on 'EMPLOYEE'.

at
org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown
Source)

at
org.apache.derby.impl.jdbc.SQLExceptionFactory40.wrapArgsForTransportAcrossDRDA(Unknown
Source)

... 36 more



07/08/14 11:02:48 [Flex] Error while completing transaction:
flex.data.DataServiceException: Error occurred

completing a transaction
stacktrace=flex.data.DataServiceException: Error occurred
completing a transaction

at
flex.data.DataServiceTransaction.doCommit(DataServiceTransaction.java:938)

at
flex.data.DataServiceTransaction.complete(DataServiceTransaction.java:979)

at
flex.data.DataService.serviceTransactedMessage(DataService.java:807)

at
flex.data.DataService.serviceMessage(DataService.java:418)

at
flex.messaging.MessageBroker.routeMessageToService(MessageBroker.java:1165)

at
flex.messaging.endpoints.AbstractEndpoint.serviceMessage(AbstractEndpoint.java:727)

at
flex.messaging.endpoints.rtmp.AbstractRTMPServer.dispatchMessage(AbstractRTMPServer.java:816)

at
flex.messaging.endpoints.rtmp.NIORTMPConnection$RTMPReader.run(NIORTMPConnection.java:424)

at
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)

at
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)

at java.lang.Thread.run(Thread.java:619)



Clearly the "Error occurred completing a transaction..." bit
isn't that interesting to our user, whereas "The statement was
aborted because it would have caused a duplicate key value in a
unique or primary..." would mean more - or at least we could use
that info to create a proper user fault message.



My question is: how can we save/store the original exception
and passed it on to the Flex?
1 Reply

Avatar

Level 1
I've gotten around this problem - basically by calling
'flush' more appropriately in my assembler.



On a different note - I find it rather strange that traffic
is fairly low on Flex related forums. In some cases this is a sign
of low uptake of a technology...