package com.taobao.tddl.common.model.lifecycle;
import com.taobao.tddl.common.exception.TddlException;
/**
* @author jianghang 2013-10-23 下午5:19:38
* @since 5.0.0
*/
public class AbstractLifecycle implements Lifecycle {
private final Object lock = new Object();
protected volatile boolean isInited = false;
public void init() throws TddlException {
synchronized (lock) {
if (isInited()) {
return;
}
try {
doInit();
isInited = true;
} catch (Exception e) {
// 出现异常调用destory方法,释放
try {
doDestory();
} catch (Exception e1) {
// ignore
}
throw new TddlException(e);
}
}
}
public void destory() throws TddlException {
synchronized (lock) {
if (!isInited()) {
return;
}
doDestory();
isInited = false;
}
}
public boolean isInited() {
return isInited;
}
protected void doInit() throws TddlException {
}
protected void doDestory() throws TddlException {
}
}