TransactionManagerFactoryBean implements FactoryBean<TransactionManager> { @Override public TransactionManager getObject() throws Exception { if (ConfigContext.getCurrentContextConfig() != null && ConfigContext.getCurrentContextConfig().getObject(RiceConstants.SPRING_TRANSACTION_MANAGER) != null) { return null; } return (TransactionManager) Proxy.newProxyInstance(getClass().getClassLoader(), new Class<?>[]{getObjectType()}, new LazyInitializationHandler()); }  @Override TransactionManager getObject(); @Override Class<TransactionManager> getObjectType(); @Override boolean isSingleton();  }
@Test(expected = IllegalStateException.class) public void testGetObject_JtaNotInitialized() throws Exception { transactionManagerFactoryBean.getObject().getTransaction(); }
@Test public void testGetObject() throws Exception { Jta.configure(this.transactionManager, this.userTransaction); TransactionManager transactionManager = transactionManagerFactoryBean.getObject(); TargetedInvocationHandler<TransactionManager> handler = (TargetedInvocationHandler<TransactionManager>)Proxy.getInvocationHandler(transactionManager); assertNull(handler.getTarget()); transactionManager.getTransaction(); assertEquals(this.transactionManager, handler.getTarget()); }
@Test public void testGetObject_Null() throws Exception { Jta.configure(null, null); TransactionManager transactionManager = transactionManagerFactoryBean.getObject(); assertNotNull(transactionManager); assertTrue(Proxy.isProxyClass(transactionManager.getClass())); try { transactionManager.getTransaction(); fail("IllegalStateException should have been thrown"); } catch (IllegalStateException e) {} }
@Test public void testGetObject_SpringTransactionManager() throws Exception { Jta.configure(transactionManager, userTransaction); SimpleConfig config = new SimpleConfig(); config.putObject(RiceConstants.SPRING_TRANSACTION_MANAGER, new JtaTransactionManager()); ConfigContext.init(config); assertNull(transactionManagerFactoryBean.getObject()); }