@Test public void testValidPropagationCodeAndIsolationCodeAndRollbackRules2() { TransactionAttributeEditor pe = new TransactionAttributeEditor(); pe.setAsText("+IOException,readOnly,ISOLATION_READ_COMMITTED,-MyRuntimeException,PROPAGATION_SUPPORTS"); TransactionAttribute ta = (TransactionAttribute) pe.getValue(); assertNotNull(ta); assertEquals(TransactionDefinition.PROPAGATION_SUPPORTS, ta.getPropagationBehavior()); assertEquals(TransactionDefinition.ISOLATION_READ_COMMITTED, ta.getIsolationLevel()); assertEquals(TransactionDefinition.TIMEOUT_DEFAULT, ta.getTimeout()); assertTrue(ta.isReadOnly()); assertTrue(ta.rollbackOn(new RuntimeException())); assertFalse(ta.rollbackOn(new Exception())); // Check for our bizarre customized rollback rules assertFalse(ta.rollbackOn(new IOException())); assertTrue(ta.rollbackOn(new MyRuntimeException(""))); }
if (transactionAttribute.getPropagationBehavior() == TransactionDefinition.PROPAGATION_NOT_SUPPORTED) { return; tm = getTransactionManager(testContext, transactionAttribute.getQualifier()); Assert.state(tm != null, () -> "Failed to retrieve PlatformTransactionManager for @Transactional test: " + testContext);
if (txAttr != null && txAttr.getName() == null) { txAttr = new DelegatingTransactionAttribute(txAttr) { @Override
private void checkTransactionProperties(TransactionAttributeSource tas, Method method, int propagationBehavior) { TransactionAttribute ta = tas.getTransactionAttribute(method, null); if (propagationBehavior >= 0) { assertNotNull(ta); assertEquals(TransactionDefinition.ISOLATION_DEFAULT, ta.getIsolationLevel()); assertEquals(propagationBehavior, ta.getPropagationBehavior()); } else { assertNull(ta); } }
@Override public boolean rollbackOn(Throwable ex) { return this.targetAttribute.rollbackOn(ex); }
if (attr.isReadOnly()) jtx.getTransaction().setReadOnly(true); final int timeout = attr.getTimeout(); if (timeout != TransactionAttribute.TIMEOUT_DEFAULT) { try { success = true; } catch (Throwable t) { if (attr.rollbackOn(t) || jtx.getTransaction().isRollbackOnly()) jtx.rollback(); else
@Test public void testValidPropagationCodeOnly() { TransactionAttributeEditor pe = new TransactionAttributeEditor(); pe.setAsText("PROPAGATION_REQUIRED"); TransactionAttribute ta = (TransactionAttribute) pe.getValue(); assertTrue(ta != null); assertTrue(ta.getPropagationBehavior() == TransactionDefinition.PROPAGATION_REQUIRED); assertTrue(ta.getIsolationLevel() == TransactionDefinition.ISOLATION_DEFAULT); assertTrue(!ta.isReadOnly()); }
@Test public void transactionAttributeDeclaredOnInterfaceWithEjb3() throws Exception { Method getAgeMethod = ITestEjb.class.getMethod("getAge"); Method getNameMethod = ITestEjb.class.getMethod("getName"); AnnotationTransactionAttributeSource atas = new AnnotationTransactionAttributeSource(); TransactionAttribute getAgeAttr = atas.getTransactionAttribute(getAgeMethod, Ejb3AnnotatedBean3.class); assertEquals(TransactionAttribute.PROPAGATION_REQUIRED, getAgeAttr.getPropagationBehavior()); TransactionAttribute getNameAttr = atas.getTransactionAttribute(getNameMethod, Ejb3AnnotatedBean3.class); assertEquals(TransactionAttribute.PROPAGATION_SUPPORTS, getNameAttr.getPropagationBehavior()); }
@SuppressWarnings("deprecation") final String joinpointIdentification = methodIdentification(invocation.getMethod(), invocation.getThis().getClass()); final int propagationBehaviour = txnAttr.getPropagationBehavior(); try txnAttr.isReadOnly(), (TransactionAttribute.PROPAGATION_REQUIRES_NEW == propagationBehaviour));
@Override @Nullable public String getQualifier() { return this.targetAttribute.getQualifier(); }
@Test public void customMethodAttributeWithReadOnlyOverrideDetected() throws Exception { Method method = TestBean8.class.getMethod("getAge"); AnnotationTransactionAttributeSource atas = new AnnotationTransactionAttributeSource(); TransactionAttribute actual = atas.getTransactionAttribute(method, TestBean8.class); RuleBasedTransactionAttribute rbta = new RuleBasedTransactionAttribute(); rbta.getRollbackRules().add(new RollbackRuleAttribute(Exception.class)); rbta.getRollbackRules().add(new NoRollbackRuleAttribute(IOException.class)); assertEquals(rbta.getRollbackRules(), ((RuleBasedTransactionAttribute) actual).getRollbackRules()); assertTrue(actual.isReadOnly()); }
public int getTimeout() { return this.targetAttribute.getTimeout(); }
public int getIsolationLevel() { return this.targetAttribute.getIsolationLevel(); }
@Override public boolean rollbackOn(Throwable ex) { return this.targetAttribute.rollbackOn(ex); }
if (attr.isReadOnly()) jtx.getTransaction().setReadOnly(true); final int timeout = attr.getTimeout(); if (timeout != TransactionAttribute.TIMEOUT_DEFAULT) { try { success = true; } catch (Throwable t) { if (attr.rollbackOn(t) || jtx.getTransaction().isRollbackOnly()) jtx.rollback(); else
@Test public void transactionAttributeDeclaredOnClassMethodWithJta() throws Exception { Method getAgeMethod = ITestBean1.class.getMethod("getAge"); Method getNameMethod = ITestBean1.class.getMethod("getName"); AnnotationTransactionAttributeSource atas = new AnnotationTransactionAttributeSource(); TransactionAttribute getAgeAttr = atas.getTransactionAttribute(getAgeMethod, JtaAnnotatedBean1.class); assertEquals(TransactionAttribute.PROPAGATION_REQUIRED, getAgeAttr.getPropagationBehavior()); TransactionAttribute getNameAttr = atas.getTransactionAttribute(getNameMethod, JtaAnnotatedBean1.class); assertEquals(TransactionAttribute.PROPAGATION_SUPPORTS, getNameAttr.getPropagationBehavior()); }
@SuppressWarnings("deprecation") final String joinpointIdentification = methodIdentification(invocation.getMethod(), invocation.getThis().getClass()); final int propagationBehaviour = txnAttr.getPropagationBehavior(); try txnAttr.isReadOnly(), (TransactionAttribute.PROPAGATION_REQUIRES_NEW == propagationBehaviour));
@Override @Nullable public String getQualifier() { return this.targetAttribute.getQualifier(); }
@Test public void customClassAttributeWithReadOnlyOverrideDetected() throws Exception { Method method = TestBean7.class.getMethod("getAge"); AnnotationTransactionAttributeSource atas = new AnnotationTransactionAttributeSource(); TransactionAttribute actual = atas.getTransactionAttribute(method, TestBean7.class); RuleBasedTransactionAttribute rbta = new RuleBasedTransactionAttribute(); rbta.getRollbackRules().add(new RollbackRuleAttribute(Exception.class)); rbta.getRollbackRules().add(new NoRollbackRuleAttribute(IOException.class)); assertEquals(rbta.getRollbackRules(), ((RuleBasedTransactionAttribute) actual).getRollbackRules()); assertTrue(actual.isReadOnly()); }
@Test public void testValidPropagationCodeAndIsolationCode() { TransactionAttributeEditor pe = new TransactionAttributeEditor(); pe.setAsText("PROPAGATION_REQUIRED, ISOLATION_READ_UNCOMMITTED"); TransactionAttribute ta = (TransactionAttribute) pe.getValue(); assertTrue(ta != null); assertTrue(ta.getPropagationBehavior() == TransactionDefinition.PROPAGATION_REQUIRED); assertTrue(ta.getIsolationLevel() == TransactionDefinition.ISOLATION_READ_UNCOMMITTED); }