@Test public void determineTransactionManagerWithNoBeanFactoryAndNoTransactionAttribute() { PlatformTransactionManager transactionManager = mock(PlatformTransactionManager.class); TransactionInterceptor ti = transactionInterceptorWithTransactionManager(transactionManager, null); assertSame(transactionManager, ti.determineTransactionManager(null)); }
@Test public void determineTransactionManagerWithNoTransactionAttribute() { BeanFactory beanFactory = mock(BeanFactory.class); TransactionInterceptor ti = simpleTransactionInterceptor(beanFactory); assertNull(ti.determineTransactionManager(null)); }
@Test public void determineTransactionManagerWithBeanNameSeveralTimes() { BeanFactory beanFactory = mock(BeanFactory.class); TransactionInterceptor ti = transactionInterceptorWithTransactionManagerName( "fooTransactionManager", beanFactory); PlatformTransactionManager txManager = associateTransactionManager(beanFactory, "fooTransactionManager"); DefaultTransactionAttribute attribute = new DefaultTransactionAttribute(); PlatformTransactionManager actual = ti.determineTransactionManager(attribute); assertSame(txManager, actual); // Call again, should be cached PlatformTransactionManager actual2 = ti.determineTransactionManager(attribute); assertSame(txManager, actual2); verify(beanFactory, times(1)).getBean("fooTransactionManager", PlatformTransactionManager.class); }
@Test public void determineTransactionManagerDefaultSeveralTimes() { BeanFactory beanFactory = mock(BeanFactory.class); TransactionInterceptor ti = simpleTransactionInterceptor(beanFactory); PlatformTransactionManager txManager = mock(PlatformTransactionManager.class); given(beanFactory.getBean(PlatformTransactionManager.class)).willReturn(txManager); DefaultTransactionAttribute attribute = new DefaultTransactionAttribute(); PlatformTransactionManager actual = ti.determineTransactionManager(attribute); assertSame(txManager, actual); // Call again, should be cached PlatformTransactionManager actual2 = ti.determineTransactionManager(attribute); assertSame(txManager, actual2); verify(beanFactory, times(1)).getBean(PlatformTransactionManager.class); }
@Test public void determineTransactionManagerWithNoBeanFactory() { PlatformTransactionManager transactionManager = mock(PlatformTransactionManager.class); TransactionInterceptor ti = transactionInterceptorWithTransactionManager(transactionManager, null); assertSame(transactionManager, ti.determineTransactionManager(new DefaultTransactionAttribute())); }
@Test public void determineTransactionManagerWithQualifierSeveralTimes() { BeanFactory beanFactory = mock(BeanFactory.class); TransactionInterceptor ti = simpleTransactionInterceptor(beanFactory); PlatformTransactionManager txManager = associateTransactionManager(beanFactory, "fooTransactionManager"); DefaultTransactionAttribute attribute = new DefaultTransactionAttribute(); attribute.setQualifier("fooTransactionManager"); PlatformTransactionManager actual = ti.determineTransactionManager(attribute); assertSame(txManager, actual); // Call again, should be cached PlatformTransactionManager actual2 = ti.determineTransactionManager(attribute); assertSame(txManager, actual2); verify(beanFactory, times(1)).containsBean("fooTransactionManager"); verify(beanFactory, times(1)).getBean("fooTransactionManager", PlatformTransactionManager.class); }
@Test public void determineTransactionManagerWithQualifierUnknown() { BeanFactory beanFactory = mock(BeanFactory.class); TransactionInterceptor ti = simpleTransactionInterceptor(beanFactory); DefaultTransactionAttribute attribute = new DefaultTransactionAttribute(); attribute.setQualifier("fooTransactionManager"); thrown.expect(NoSuchBeanDefinitionException.class); thrown.expectMessage("'fooTransactionManager'"); ti.determineTransactionManager(attribute); }
@Test public void determineTransactionManagerWithEmptyQualifierAndDefaultName() { BeanFactory beanFactory = mock(BeanFactory.class); PlatformTransactionManager defaultTransactionManager = associateTransactionManager(beanFactory, "defaultTransactionManager"); TransactionInterceptor ti = transactionInterceptorWithTransactionManagerName( "defaultTransactionManager", beanFactory); DefaultTransactionAttribute attribute = new DefaultTransactionAttribute(); attribute.setQualifier(""); assertSame(defaultTransactionManager, ti.determineTransactionManager(attribute)); }
@Test public void determineTransactionManagerWithQualifierAndDefaultName() { BeanFactory beanFactory = mock(BeanFactory.class); associateTransactionManager(beanFactory, "defaultTransactionManager"); TransactionInterceptor ti = transactionInterceptorWithTransactionManagerName( "defaultTransactionManager", beanFactory); PlatformTransactionManager fooTransactionManager = associateTransactionManager(beanFactory, "fooTransactionManager"); DefaultTransactionAttribute attribute = new DefaultTransactionAttribute(); attribute.setQualifier("fooTransactionManager"); assertSame(fooTransactionManager, ti.determineTransactionManager(attribute)); }
@Test public void determineTransactionManagerWithQualifierAndDefault() { BeanFactory beanFactory = mock(BeanFactory.class); PlatformTransactionManager transactionManager = mock(PlatformTransactionManager.class); TransactionInterceptor ti = transactionInterceptorWithTransactionManager(transactionManager, beanFactory); PlatformTransactionManager fooTransactionManager = associateTransactionManager(beanFactory, "fooTransactionManager"); DefaultTransactionAttribute attribute = new DefaultTransactionAttribute(); attribute.setQualifier("fooTransactionManager"); assertSame(fooTransactionManager, ti.determineTransactionManager(attribute)); }
@Override protected PlatformTransactionManager determineTransactionManager(TransactionAttribute txAttr) { if (txAttr == null) { return super.determineTransactionManager(txAttr); } final String qualifier = txAttr.getQualifier(); if (StringUtils.hasLength(qualifier)) { PlatformTransactionManager platformTransactionManager = platformTransactionManagerCache.get(qualifier); if (platformTransactionManager == null) { platformTransactionManager = super.determineTransactionManager(txAttr); platformTransactionManagerCache.put(qualifier, platformTransactionManager); } return platformTransactionManager; } return super.determineTransactionManager(txAttr); } }