TransactionAttributeEditorTests.java
上传用户:jiancairen
上传日期:2007-08-27
资源大小:26458k
文件大小:7k
源码类别:

Java编程

开发平台:

Java

  1. /*
  2.  * Copyright 2002-2004 the original author or authors.
  3.  * 
  4.  * Licensed under the Apache License, Version 2.0 (the "License");
  5.  * you may not use this file except in compliance with the License.
  6.  * You may obtain a copy of the License at
  7.  * 
  8.  *      http://www.apache.org/licenses/LICENSE-2.0
  9.  * 
  10.  * Unless required by applicable law or agreed to in writing, software
  11.  * distributed under the License is distributed on an "AS IS" BASIS,
  12.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13.  * See the License for the specific language governing permissions and
  14.  * limitations under the License.
  15.  */ 
  16. package org.springframework.transaction.interceptor;
  17. import javax.ejb.EJBException;
  18. import javax.servlet.ServletException;
  19. import junit.framework.TestCase;
  20. import org.springframework.transaction.TransactionDefinition;
  21. /**
  22.  * Tests to check conversion from String to TransactionAttribute.
  23.  * @author Rod Johnson
  24.  * @author Juergen Hoeller
  25.  * @since 26-Apr-2003
  26.  */
  27. public class TransactionAttributeEditorTests extends TestCase {
  28. public void testNull() {
  29. TransactionAttributeEditor pe = new TransactionAttributeEditor();
  30. pe.setAsText(null);
  31. TransactionAttribute ta = (TransactionAttribute) pe.getValue();
  32. assertTrue(ta == null);
  33. }
  34. public void testEmptyString() {
  35. TransactionAttributeEditor pe = new TransactionAttributeEditor();
  36. pe.setAsText("");
  37. TransactionAttribute ta = (TransactionAttribute) pe.getValue();
  38. assertTrue(ta == null);
  39. }
  40. public void testValidPropagationCodeOnly() {
  41. TransactionAttributeEditor pe = new TransactionAttributeEditor();
  42. pe.setAsText("PROPAGATION_REQUIRED");
  43. TransactionAttribute ta = (TransactionAttribute) pe.getValue();
  44. assertTrue(ta != null);
  45. assertTrue(ta.getPropagationBehavior() == TransactionDefinition.PROPAGATION_REQUIRED);
  46. assertTrue(ta.getIsolationLevel() == TransactionDefinition.ISOLATION_DEFAULT);
  47. assertTrue(!ta.isReadOnly());
  48. }
  49. public void testInvalidPropagationCodeOnly() {
  50. TransactionAttributeEditor pe = new TransactionAttributeEditor();
  51. try {
  52. pe.setAsText("XXPROPAGATION_REQUIRED");
  53. fail("Should have failed with bogus propagation code");
  54. }
  55. catch (IllegalArgumentException ex) {
  56. // Ok
  57. }
  58. }
  59. public void testValidPropagationCodeAndIsolationCode() {
  60. TransactionAttributeEditor pe = new TransactionAttributeEditor();
  61. pe.setAsText("PROPAGATION_REQUIRED, ISOLATION_READ_UNCOMMITTED");
  62. TransactionAttribute ta = (TransactionAttribute) pe.getValue();
  63. assertTrue(ta != null);
  64. assertTrue(ta.getPropagationBehavior() == TransactionDefinition.PROPAGATION_REQUIRED);
  65. assertTrue(ta.getIsolationLevel() == TransactionDefinition.ISOLATION_READ_UNCOMMITTED);
  66. }
  67. public void testValidPropagationAndIsolationCodesAndInvalidRollbackRule() {
  68. TransactionAttributeEditor pe = new TransactionAttributeEditor();
  69. try {
  70. pe.setAsText("PROPAGATION_REQUIRED,ISOLATION_READ_UNCOMMITTED,XXX");
  71. fail("Should have failed with bogus rollback rule");
  72. }
  73. catch (IllegalArgumentException ex) {
  74. // Ok
  75. }
  76. }
  77. public void testValidPropagationCodeAndIsolationCodeAndRollbackRules1() {
  78. TransactionAttributeEditor pe = new TransactionAttributeEditor();
  79. pe.setAsText("PROPAGATION_MANDATORY,ISOLATION_REPEATABLE_READ,timeout_10,-ServletException,+EJBException");
  80. TransactionAttribute ta = (TransactionAttribute) pe.getValue();
  81. assertNotNull(ta);
  82. assertEquals(ta.getPropagationBehavior(), TransactionDefinition.PROPAGATION_MANDATORY);
  83. assertEquals(ta.getIsolationLevel(), TransactionDefinition.ISOLATION_REPEATABLE_READ);
  84. assertEquals(ta.getTimeout(), 10);
  85. assertFalse(ta.isReadOnly());
  86. assertTrue(ta.rollbackOn(new RuntimeException()));
  87. assertFalse(ta.rollbackOn(new Exception()));
  88. // Check for our bizarre customized rollback rules
  89. assertTrue(ta.rollbackOn(new ServletException()));
  90. assertTrue(!ta.rollbackOn(new EJBException()));
  91. }
  92. public void testValidPropagationCodeAndIsolationCodeAndRollbackRules2() {
  93. TransactionAttributeEditor pe = new TransactionAttributeEditor();
  94. pe.setAsText("+ServletException,readOnly,ISOLATION_READ_COMMITTED,-EJBException,PROPAGATION_SUPPORTS");
  95. TransactionAttribute ta = (TransactionAttribute) pe.getValue();
  96. assertNotNull(ta);
  97. assertEquals(ta.getPropagationBehavior(), TransactionDefinition.PROPAGATION_SUPPORTS);
  98. assertEquals(ta.getIsolationLevel(), TransactionDefinition.ISOLATION_READ_COMMITTED);
  99. assertEquals(ta.getTimeout(), TransactionDefinition.TIMEOUT_DEFAULT);
  100. assertTrue(ta.isReadOnly());
  101. assertTrue(ta.rollbackOn(new RuntimeException()));
  102. assertFalse(ta.rollbackOn(new Exception()));
  103. // Check for our bizarre customized rollback rules
  104. assertFalse(ta.rollbackOn(new ServletException()));
  105. assertTrue(ta.rollbackOn(new EJBException()));
  106. }
  107. public void testDefaultTransactionAttributeToString() {
  108. DefaultTransactionAttribute source = new DefaultTransactionAttribute();
  109. source.setPropagationBehavior(TransactionDefinition.PROPAGATION_SUPPORTS);
  110. source.setIsolationLevel(TransactionDefinition.ISOLATION_REPEATABLE_READ);
  111. source.setTimeout(10);
  112. source.setReadOnly(true);
  113. TransactionAttributeEditor pe = new TransactionAttributeEditor();
  114. pe.setAsText(source.toString());
  115. TransactionAttribute ta = (TransactionAttribute) pe.getValue();
  116. assertEquals(ta, source);
  117. assertEquals(ta.getPropagationBehavior(), TransactionDefinition.PROPAGATION_SUPPORTS);
  118. assertEquals(ta.getIsolationLevel(), TransactionDefinition.ISOLATION_REPEATABLE_READ);
  119. assertEquals(ta.getTimeout(), 10);
  120. assertTrue(ta.isReadOnly());
  121. assertTrue(ta.rollbackOn(new RuntimeException()));
  122. assertFalse(ta.rollbackOn(new Exception()));
  123. source.setTimeout(9);
  124. assertNotSame(ta, source);
  125. source.setTimeout(10);
  126. assertEquals(ta, source);
  127. }
  128. public void testRuleBasedTransactionAttributeToString() {
  129. RuleBasedTransactionAttribute source = new RuleBasedTransactionAttribute();
  130. source.setPropagationBehavior(TransactionDefinition.PROPAGATION_SUPPORTS);
  131. source.setIsolationLevel(TransactionDefinition.ISOLATION_REPEATABLE_READ);
  132. source.setTimeout(10);
  133. source.setReadOnly(true);
  134. source.getRollbackRules().add(new RollbackRuleAttribute("IllegalArgumentException"));
  135. source.getRollbackRules().add(new NoRollbackRuleAttribute("IllegalStateException"));
  136. TransactionAttributeEditor pe = new TransactionAttributeEditor();
  137. pe.setAsText(source.toString());
  138. TransactionAttribute ta = (TransactionAttribute) pe.getValue();
  139. assertEquals(ta, source);
  140. assertEquals(ta.getPropagationBehavior(), TransactionDefinition.PROPAGATION_SUPPORTS);
  141. assertEquals(ta.getIsolationLevel(), TransactionDefinition.ISOLATION_REPEATABLE_READ);
  142. assertEquals(ta.getTimeout(), 10);
  143. assertTrue(ta.isReadOnly());
  144. assertTrue(ta.rollbackOn(new IllegalArgumentException()));
  145. assertFalse(ta.rollbackOn(new IllegalStateException()));
  146. source.getRollbackRules().clear();
  147. assertNotSame(ta, source);
  148. source.getRollbackRules().add(new RollbackRuleAttribute("IllegalArgumentException"));
  149. source.getRollbackRules().add(new NoRollbackRuleAttribute("IllegalStateException"));
  150. assertEquals(ta, source);
  151. }
  152. }