diff options
Diffstat (limited to 'test/Transaction/Transaction.java')
-rw-r--r-- | test/Transaction/Transaction.java | 52 |
1 files changed, 48 insertions, 4 deletions
diff --git a/test/Transaction/Transaction.java b/test/Transaction/Transaction.java index 9ca7fbfb33..00e1fbb2c1 100644 --- a/test/Transaction/Transaction.java +++ b/test/Transaction/Transaction.java @@ -25,13 +25,57 @@ public class Transaction { } } - static class BlacklistedClass { + static class FinalizableAbortClass { + public static AbortHelperClass finalizableObject; static { - NativeSupport.native_call(); + finalizableObject = new AbortHelperClass(); } } - static class NativeSupport { - public static native void native_call(); + static class NativeCallAbortClass { + static { + AbortHelperClass.nativeMethod(); + } + } + + static class SynchronizedNativeCallAbortClass { + static { + synchronized (SynchronizedNativeCallAbortClass.class) { + AbortHelperClass.nativeMethod(); + } + } + } + + static class CatchNativeCallAbortClass { + static { + try { + AbortHelperClass.nativeMethod(); + } catch (Throwable e) { + // ignore exception. + } + } + } + + static class MultipleNativeCallAbortClass { + static { + // Call native method but catch the transaction exception. + try { + AbortHelperClass.nativeMethod(); + } catch (Throwable e) { + // ignore exception. + } + + // Call another native method. + AbortHelperClass.nativeMethod2(); + } + } + + // Helper class to abort transaction: finalizable class with natve methods. + static class AbortHelperClass { + public void finalize() throws Throwable { + super.finalize(); + } + public static native void nativeMethod(); + public static native void nativeMethod2(); } } |