ex8_23.txt
来自「j2ee core design patterns」· 文本 代码 · 共 92 行
TXT
92 行
Example 8.23 PersistenceManager Class
import javax.transaction.*;
import java.util.HashSet;
import java.util.Iterator;
public class PersistenceManager {
HashSet stateManagers = new HashSet();
TransactionManager tm;
Transaction txn;
public PersistenceManager() {
tm = TransactionManager.getInstance();
tm.register(this);
}
public Persistable persistNew(Persistable o) {
if (o instanceof Employee) {
return setupEmployee(
new EmployeeStateDelegate((Employee)o), true);
}
return o;
}
public Persistable persist(Persistable o) {
// Must already be an EmployeeStateDelegate
if (o instanceof Employee) {
EmployeeStateDelegate esd =
(EmployeeStateDelegate) o;
return esd;
}
return o;
}
public void commit()
throws SystemException, NotSupportedException,
HeuristicRollbackException, RollbackException,
HeuristicMixedException {
if (txn == null) {
throw new SystemException(
"Must call Transaction.begin() before" +
" Transaction.commit()");
}
Iterator i = stateManagers.iterator();
while (i.hasNext()) {
Object o = i.next();
StateManager stateManager = (StateManager) o;
stateManager.flush();
}
txn.commit();
txn = null;
}
public void begin()
throws SystemException, NotSupportedException {
txn = tm.getTransaction();
txn.begin();
}
public Employee getEmployee(String employeeId) {
EmployeeStateDelegate esd =
new EmployeeStateDelegate(employeeId);
setupEmployee(esd, false);
return esd;
}
private EmployeeStateDelegate setupEmployee(
EmployeeStateDelegate esd, boolean isNew) {
EmployeeStateManager stateManager =
new EmployeeStateManager(this, esd, isNew);
stateManagers.add(stateManager);
esd.setStateManager(stateManager);
return esd;
}
public void setDirty(Persistable o) {
// set dirty marker to true
}
public void resetDirty(Persistable o) {
// reset dirty marker to false
}
public boolean isDirty(Persistable o) {
// check if object is dirty
return true;
}
public boolean needLoading(Persistable o) {
// check if needs to be loaded
return true;
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?