📄 lockingdaotest.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 + -