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

📄 lockingdaotest.java

📁 精通EJB3源码
💻 JAVA
字号:
package junit.test;

import java.util.Properties;
import java.util.Timer;

import javax.naming.Context;
import javax.naming.InitialContext;

import org.junit.BeforeClass;
import org.junit.Test;

import com.foshanshop.ejb3.LockingDAO;
import com.foshanshop.ejb3.bean.User;

public class LockingDAOTest {
	private static LockingDAO dao;

	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
		try {
			 Properties props = new Properties();
			 props.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
			 props.setProperty(Context.PROVIDER_URL, "localhost:1099");
			 props.setProperty(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
			 InitialContext ctx = new InitialContext(props);
			 dao = (LockingDAO) ctx.lookup("LockingDAOBean/remote");
		} catch (RuntimeException e) {
			e.printStackTrace();
		}
	}

	@Test
	public void testSolveUpdateLose() {
		dao.init(new User(10000));
		//下面使用两个定时器引起事务并发
		Timer timer = new Timer();
		//为了符合时间片分配表的执行顺序,让payElectricityFee()方法先执行
		timer.schedule(new ATask(), 1);
		
		Timer timer2 = new Timer();
		timer2.schedule(new BTask(), 1000);
		try {
			Thread.sleep(15000);
		} catch (InterruptedException e) {}
		timer.cancel();
		timer2.cancel();
	}
	
	static class ATask extends java.util.TimerTask{
		@Override
		public void run() {
			System.out.println("========交电费方法开始=========");
			dao.payElectricityFee(1);
			System.out.println("========交电费方法结束=========");
		}
	}
	
	static class BTask extends java.util.TimerTask{
		@Override
		public void run() {
			System.out.println("========存工资方法开始=========");
			try {
				//此方法会抛出javax.persistence.OptimisticLockException,同时引发事务回滚
				dao.saveLaborage(1);
			} catch (Exception e) {
				e.printStackTrace();
			}
			System.out.println("========存工资方法结束=========");
		}
	}
}

⌨️ 快捷键说明

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