On Tue, Jun 13, 2017 at 5:06 PM, Denis Magda <dma...@apache.org> wrote:

> e.getCause() might return ‘null’ and you’ll get NullPointerException
> trying to execute e.getCause().getCause().
>
> Ideally, we need to throw TransactionDeadlockException like it’s done in
> .NET.
>

Agree, looks odd, but because of JSR107 we cannot throw any additional type
of exception.

Can we simplify by having one getCause() instead of double
getCause().getCause()?


> —
> Denis
>
> > On Jun 13, 2017, at 4:43 PM, Dmitriy Setrakyan <dsetrak...@apache.org>
> wrote:
> >
> > This looks a bit confusing. Why is it not enough to have this check:
> >
> > e.getCause().getCause() instanceof TransactionDeadlockException
> >
> > ?
> >
> > On Tue, Jun 13, 2017 at 4:40 PM, Denis Magda <dma...@apache.org> wrote:
> >
> >> Pardon me, copy pasted the catch block twice. This how the block looked
> >> like in Ignite 1.x
> >>
> >> catch (CacheException e) {
> >>    if (e.getCause() instanceof TransactionTimeoutException &&
> >>        e.getCause().getCause() instanceof TransactionDeadlockException)
> >>
> >>        System.out.println(e.getCause().getCause().getMessage());
> >> }
> >>
> >> and this is how it must be coded in 2.0:
> >>
> >>> catch (CacheException e) {
> >>>   if (e.getCause() instanceof IgniteCheckedException &&
> >>>       e.getCause().getCause() instanceof TransactionDeadlockException)
> >>>
> >>>       System.out.println(e.getCause().getCause().getMessage());
> >>> }
> >>
> >>
> >>
> >> —
> >> Denis
> >>
> >>> On Jun 13, 2017, at 4:24 PM, Denis Magda <dma...@apache.org> wrote:
> >>>
> >>> Andrey Gura, Igniters,
> >>>
> >>> If to refer to our documentation [1], this is how we need to catch the
> >> deadlock detection exception:
> >>>
> >>> catch (CacheException e) {
> >>>   if (e.getCause() instanceof IgniteCheckedException &&
> >>>       e.getCause().getCause() instanceof TransactionDeadlockException)
> >>>
> >>>       System.out.println(e.getCause().getCause().getMessage());
> >>> }
> >>>
> >>> However, this is no longer works in Ignite 2.0 because
> >> IgniteCheckedException has to be used instead of
> >> TransactionTimeoutException:
> >>>
> >>> catch (CacheException e) {
> >>>   if (e.getCause() instanceof IgniteCheckedException &&
> >>>       e.getCause().getCause() instanceof TransactionDeadlockException)
> >>>
> >>>       System.out.println(e.getCause().getCause().getMessage());
> >>> }
> >>>
> >>> See the example with the workaround:
> >>> https://github.com/dmagda/ignite_transactions/blob/
> >> master/src/main/java/org/apache/ignite/examples/
> >> DeadlockDetectionExample.java
> >>>
> >>>
> >>> Could we do on of the following:
> >>>
> >>> 1) Recover the previous behavior or
> >>> 2) Throw TransactionDeadlockDetection right away as it’s done in .NET
> [3]
> >>>
> >>> [1] https://apacheignite.readme.io/docs/transactions#section-
> >> deadlock-detection
> >>> [3] https://github.com/apache/ignite/blob/master/modules/
> >> platforms/dotnet/examples/Apache.Ignite.Examples/Datagrid/
> >> TransactionDeadlockDetectionExample.cs#L110
> >>>
> >>
> >>
>
>

Reply via email to