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

📄 datasourcejtatransactiontests.java

📁 struts+spring 源码 希望能给大家带来帮助
💻 JAVA
📖 第 1 页 / 共 2 页
字号:

		JtaTransactionManager ptm = new JtaTransactionManager(ut, tm);
		final TransactionTemplate tt = new TransactionTemplate(ptm);
		tt.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
		assertTrue("Hasn't thread connection", !TransactionSynchronizationManager.hasResource(dsToUse));
		assertTrue("JTA synchronizations not active", !TransactionSynchronizationManager.isSynchronizationActive());

		tt.execute(new TransactionCallbackWithoutResult() {
			protected void doInTransactionWithoutResult(TransactionStatus status) throws RuntimeException {
				assertTrue("Hasn't thread connection", !TransactionSynchronizationManager.hasResource(dsToUse));
				assertTrue("JTA synchronizations active", TransactionSynchronizationManager.isSynchronizationActive());
				assertTrue("Is new transaction", status.isNewTransaction());

				Connection c = DataSourceUtils.getConnection(dsToUse);
				assertTrue("Has thread connection", TransactionSynchronizationManager.hasResource(dsToUse));
				DataSourceUtils.releaseConnection(c, dsToUse);

				c = DataSourceUtils.getConnection(dsToUse);
				assertTrue("Has thread connection", TransactionSynchronizationManager.hasResource(dsToUse));
				if (!openOuterConnection) {
					DataSourceUtils.releaseConnection(c, dsToUse);
				}

				for (int i = 0; i < 5; i++) {

					tt.execute(new TransactionCallbackWithoutResult() {
						protected void doInTransactionWithoutResult(TransactionStatus status) throws RuntimeException {
							assertTrue("Hasn't thread connection", !TransactionSynchronizationManager.hasResource(dsToUse));
							assertTrue("JTA synchronizations active", TransactionSynchronizationManager.isSynchronizationActive());
							assertTrue("Is new transaction", status.isNewTransaction());

							try {
								dsControl.verify();
								conControl.verify();
								dsControl.reset();
								conControl.reset();
								ds.getConnection();
								dsControl.setReturnValue(con, 1);
								con.close();
								conControl.setVoidCallable(1);
								dsControl.replay();
								conControl.replay();
							}
							catch (SQLException ex) {
							}

							Connection c = DataSourceUtils.getConnection(dsToUse);
							assertTrue("Has thread connection", TransactionSynchronizationManager.hasResource(dsToUse));
							DataSourceUtils.releaseConnection(c, dsToUse);

							c = DataSourceUtils.getConnection(dsToUse);
							assertTrue("Has thread connection", TransactionSynchronizationManager.hasResource(dsToUse));
							DataSourceUtils.releaseConnection(c, dsToUse);
						}
					});

				}

				if (rollback) {
					status.setRollbackOnly();
				}

				if (accessAfterResume) {
					try {
						if (!openOuterConnection) {
							dsControl.verify();
							dsControl.reset();
							ds.getConnection();
							dsControl.setReturnValue(con, 1);
							dsControl.replay();
						}
						conControl.verify();
						conControl.reset();
						con.close();
						conControl.setVoidCallable(1);
						conControl.replay();
					}
					catch (SQLException ex) {
					}

					if (!openOuterConnection) {
						c = DataSourceUtils.getConnection(dsToUse);
					}
					assertTrue("Has thread connection", TransactionSynchronizationManager.hasResource(dsToUse));
					DataSourceUtils.releaseConnection(c, dsToUse);

					c = DataSourceUtils.getConnection(dsToUse);
					assertTrue("Has thread connection", TransactionSynchronizationManager.hasResource(dsToUse));
					DataSourceUtils.releaseConnection(c, dsToUse);
				}

				else {
					if (openOuterConnection) {
						try {
							conControl.verify();
							conControl.reset();
							con.close();
							conControl.setVoidCallable(1);
							conControl.replay();
						}
						catch (SQLException ex) {
						}
						DataSourceUtils.releaseConnection(c, dsToUse);
					}
				}
			}
		});

		assertTrue("Hasn't thread connection", !TransactionSynchronizationManager.hasResource(dsToUse));
		assertTrue("JTA synchronizations not active", !TransactionSynchronizationManager.isSynchronizationActive());
		dsControl.verify();
		conControl.verify();
		utControl.verify();
		tmControl.verify();
	}

	public void testJtaTransactionWithConnectionHolderStillBound() throws Exception {
		MockControl utControl = MockControl.createControl(UserTransaction.class);
		UserTransaction ut = (UserTransaction) utControl.getMock();

		MockControl dsControl = MockControl.createControl(DataSource.class);
		final DataSource ds = (DataSource) dsControl.getMock();
		MockControl conControl = MockControl.createControl(Connection.class);
		Connection con = (Connection) conControl.getMock();

		JtaTransactionManager ptm = new JtaTransactionManager(ut) {
			protected void doRegisterAfterCompletionWithJtaTransaction(
					JtaTransactionObject txObject, final List synchronizations) {
				Thread async = new Thread() {
					public void run() {
						invokeAfterCompletion(synchronizations, TransactionSynchronization.STATUS_COMMITTED);
					}
				};
				async.start();
				try {
					async.join();
				}
				catch (InterruptedException ex) {
					ex.printStackTrace();
				}
			}
		};
		TransactionTemplate tt = new TransactionTemplate(ptm);
		assertTrue("Hasn't thread connection", !TransactionSynchronizationManager.hasResource(ds));
		assertTrue("JTA synchronizations not active", !TransactionSynchronizationManager.isSynchronizationActive());

		for (int i = 0; i < 3; i++) {
			utControl.reset();
			ut.getStatus();
			utControl.setReturnValue(Status.STATUS_ACTIVE, 1);
			utControl.replay();

			dsControl.reset();
			conControl.reset();
			ds.getConnection();
			dsControl.setReturnValue(con, 1);
			con.close();
			conControl.setVoidCallable(1);
			dsControl.replay();
			conControl.replay();

			final boolean releaseCon = (i != 1);

			tt.execute(new TransactionCallbackWithoutResult() {
				protected void doInTransactionWithoutResult(TransactionStatus status) throws RuntimeException {
					assertTrue("JTA synchronizations active", TransactionSynchronizationManager.isSynchronizationActive());
					assertTrue("Is existing transaction", !status.isNewTransaction());

					Connection c = DataSourceUtils.getConnection(ds);
					assertTrue("Has thread connection", TransactionSynchronizationManager.hasResource(ds));
					DataSourceUtils.releaseConnection(c, ds);

					c = DataSourceUtils.getConnection(ds);
					assertTrue("Has thread connection", TransactionSynchronizationManager.hasResource(ds));
					if (releaseCon) {
						DataSourceUtils.releaseConnection(c, ds);
					}
				}
			});

			if (!releaseCon) {
				assertTrue("Still has connection holder", TransactionSynchronizationManager.hasResource(ds));
			}
			else {
				assertTrue("Hasn't thread connection", !TransactionSynchronizationManager.hasResource(ds));
			}
			assertTrue("JTA synchronizations not active", !TransactionSynchronizationManager.isSynchronizationActive());

			conControl.verify();
			dsControl.verify();
			utControl.verify();
		}
	}

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

}

⌨️ 快捷键说明

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