⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 persistencebrokertransactionmanagertests.java

📁 Java/J2EE application framework based on [Expert One-on-One J2EE Design and Development] by Rod John
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
				});
			}
		});
		assertTrue("Hasn't thread broker", !TransactionSynchronizationManager.hasResource(tm.getPbKey()));

		pbControl.verify();
		cmControl.verify();
		conControl.verify();
	}

	public void testParticipatingTransactionWithRollback() throws LookupException, SQLException {
		MockControl pbControl = MockControl.createControl(PersistenceBroker.class);
		final PersistenceBroker pb = (PersistenceBroker) pbControl.getMock();
		MockControl cmControl = MockControl.createControl(ConnectionManagerIF.class);
		final ConnectionManagerIF cm = (ConnectionManagerIF) cmControl.getMock();
		final Object entity = new Object();
		MockControl conControl = MockControl.createControl(Connection.class);
		Connection con = (Connection) conControl.getMock();

		pb.serviceConnectionManager();
		pbControl.setReturnValue(cm, 2);
		cm.getConnection();
		cmControl.setReturnValue(con, 2);
		con.isReadOnly();
		conControl.setReturnValue(false, 1);
		pb.beginTransaction();
		pbControl.setVoidCallable(1);
		pb.delete(entity);
		pbControl.setVoidCallable(1);
		pb.abortTransaction();
		pbControl.setVoidCallable(1);
		pb.close();
		pbControl.setReturnValue(true, 1);

		pbControl.replay();
		cmControl.replay();
		conControl.replay();

		final PersistenceBrokerTransactionManager tm = new PersistenceBrokerTransactionManager() {
			protected PersistenceBroker getPersistenceBroker() {
				return pb;
			}
		};

		assertTrue("Hasn't thread broker", !TransactionSynchronizationManager.hasResource(tm.getPbKey()));
		final TransactionTemplate tt = new TransactionTemplate(tm);
		tt.execute(new TransactionCallbackWithoutResult() {
			protected void doInTransactionWithoutResult(TransactionStatus status) {
				assertTrue("Has thread broker", TransactionSynchronizationManager.hasResource(tm.getPbKey()));
				tt.execute(new TransactionCallbackWithoutResult() {
					protected void doInTransactionWithoutResult(TransactionStatus status) {
						assertTrue("Has thread broker", TransactionSynchronizationManager.hasResource(tm.getPbKey()));
						PersistenceBrokerTemplate pbt = new PersistenceBrokerTemplate();
						pbt.delete(entity);
						status.setRollbackOnly();
					}
				});
			}
		});
		assertTrue("Hasn't thread broker", !TransactionSynchronizationManager.hasResource(tm.getPbKey()));

		pbControl.verify();
		cmControl.verify();
		conControl.verify();
	}

	public void testParticipatingTransactionWithRequiresNew() throws LookupException, SQLException {
		MockControl pb1Control = MockControl.createControl(PersistenceBroker.class);
		final PersistenceBroker pb1 = (PersistenceBroker) pb1Control.getMock();
		MockControl pb2Control = MockControl.createControl(PersistenceBroker.class);
		final PersistenceBroker pb2 = (PersistenceBroker) pb2Control.getMock();
		MockControl cmControl = MockControl.createControl(ConnectionManagerIF.class);
		final ConnectionManagerIF cm = (ConnectionManagerIF) cmControl.getMock();
		MockControl conControl = MockControl.createControl(Connection.class);
		Connection con = (Connection) conControl.getMock();

		pb1.serviceConnectionManager();
		pb1Control.setReturnValue(cm, 2);
		cm.getConnection();
		cmControl.setReturnValue(con, 4);
		con.isReadOnly();
		conControl.setReturnValue(false, 2);
		pb1.beginTransaction();
		pb1Control.setVoidCallable(1);
		pb2.serviceConnectionManager();
		pb2Control.setReturnValue(cm, 2);
		pb2.beginTransaction();
		pb2Control.setVoidCallable(1);
		pb2.commitTransaction();
		pb2Control.setVoidCallable(1);
		pb2.close();
		pb2Control.setReturnValue(true, 1);
		pb1.commitTransaction();
		pb1Control.setVoidCallable(1);
		pb1.close();
		pb1Control.setReturnValue(true, 1);

		pb1Control.replay();
		pb2Control.replay();
		cmControl.replay();
		conControl.replay();

		final PersistenceBrokerTransactionManager tm = new PersistenceBrokerTransactionManager() {
			int counter = 0;
			protected PersistenceBroker getPersistenceBroker() {
				counter++;
				return (counter > 1 ? pb2 : pb1);
			}
		};

		assertTrue("Hasn't thread broker", !TransactionSynchronizationManager.hasResource(tm.getPbKey()));
		final TransactionTemplate tt = new TransactionTemplate(tm);
		tt.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
		tt.execute(new TransactionCallbackWithoutResult() {
			protected void doInTransactionWithoutResult(TransactionStatus status) {
				assertTrue("Has thread broker", TransactionSynchronizationManager.hasResource(tm.getPbKey()));
				assertEquals(pb1, OjbFactoryUtils.getPersistenceBroker(tm.getPbKey(), false));
				tt.execute(new TransactionCallbackWithoutResult() {
					protected void doInTransactionWithoutResult(TransactionStatus status) {
						assertTrue("Has thread broker", TransactionSynchronizationManager.hasResource(tm.getPbKey()));
						assertEquals(pb2, OjbFactoryUtils.getPersistenceBroker(tm.getPbKey(), false));
					}
				});
				assertEquals(pb1, OjbFactoryUtils.getPersistenceBroker(tm.getPbKey(), false));
			}
		});
		assertTrue("Hasn't thread broker", !TransactionSynchronizationManager.hasResource(tm.getPbKey()));

		pb1Control.verify();
		pb2Control.verify();
		cmControl.verify();
		conControl.verify();
	}

	public void testExposeJdbcTransaction() throws LookupException, SQLException {
		MockControl dsControl = MockControl.createControl(DataSource.class);
		final DataSource ds = (DataSource) dsControl.getMock();
		MockControl pbControl = MockControl.createControl(PersistenceBroker.class);
		final PersistenceBroker pb = (PersistenceBroker) pbControl.getMock();
		MockControl cmControl = MockControl.createControl(ConnectionManagerIF.class);
		final ConnectionManagerIF cm = (ConnectionManagerIF) cmControl.getMock();
		final Object entity = new Object();
		MockControl conControl = MockControl.createControl(Connection.class);
		Connection con = (Connection) conControl.getMock();

		pb.serviceConnectionManager();
		pbControl.setReturnValue(cm, 2);
		cm.getConnection();
		cmControl.setReturnValue(con, 2);
		con.isReadOnly();
		conControl.setReturnValue(false, 1);
		pb.beginTransaction();
		pbControl.setVoidCallable(1);
		pb.delete(entity);
		pbControl.setVoidCallable(1);
		pb.commitTransaction();
		pbControl.setVoidCallable(1);
		pb.close();
		pbControl.setReturnValue(true, 1);

		dsControl.replay();
		pbControl.replay();
		cmControl.replay();
		conControl.replay();

		final PersistenceBrokerTransactionManager tm = new PersistenceBrokerTransactionManager() {
			protected PersistenceBroker getPersistenceBroker() {
				return pb;
			}
		};
		tm.setDataSource(ds);

		TransactionTemplate tt = new TransactionTemplate(tm);
		assertTrue("Hasn't thread broker", !TransactionSynchronizationManager.hasResource(tm.getPbKey()));
		assertTrue("Hasn't thread connection", !TransactionSynchronizationManager.hasResource(ds));
		tt.execute(new TransactionCallbackWithoutResult() {
			protected void doInTransactionWithoutResult(TransactionStatus status) {
				assertTrue("Has thread broker", TransactionSynchronizationManager.hasResource(tm.getPbKey()));
				assertTrue("Has thread connection", TransactionSynchronizationManager.hasResource(ds));
				PersistenceBrokerTemplate pbt = new PersistenceBrokerTemplate();
				pbt.delete(entity);
			}
		});
		assertTrue("Hasn't thread broker", !TransactionSynchronizationManager.hasResource(tm.getPbKey()));
		assertTrue("Hasn't thread connection", !TransactionSynchronizationManager.hasResource(ds));

		dsControl.verify();
		pbControl.verify();
		cmControl.verify();
		conControl.verify();
	}

	protected void tearDown() {
		assertTrue(TransactionSynchronizationManager.getResourceMap().isEmpty());
		assertFalse(TransactionSynchronizationManager.isSynchronizationActive());
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -