|
@@ -38,6 +38,47 @@ public class AnnotationLockAopAdvice {
|
|
|
@Autowired(required = false)
|
|
|
private Map<String, ExpressionScopeBean> expressionScopeBeanMap;
|
|
|
|
|
|
+ @Around("@annotation(unLock)")
|
|
|
+ public Object unWriteLock(ProceedingJoinPoint pjp,
|
|
|
+ org.hsweb.concurrent.lock.annotation.UnWriteLock unLock) throws Throwable {
|
|
|
+ String name = getLockName(pjp);
|
|
|
+ ReadWriteLock lock = readWriteLockMap.get(name);
|
|
|
+ try {
|
|
|
+ return pjp.proceed();
|
|
|
+ } finally {
|
|
|
+ logger.debug("unlock :{}", name);
|
|
|
+ if (lock != null)
|
|
|
+ unlock(lock.writeLock());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Around("@annotation(unLock)")
|
|
|
+ public Object unReadLock(ProceedingJoinPoint pjp,
|
|
|
+ org.hsweb.concurrent.lock.annotation.UnReadLock unLock) throws Throwable {
|
|
|
+ String name = getLockName(pjp);
|
|
|
+ ReadWriteLock lock = readWriteLockMap.get(name);
|
|
|
+ try {
|
|
|
+ return pjp.proceed();
|
|
|
+ } finally {
|
|
|
+ logger.debug("unlock :{}", name);
|
|
|
+ if (lock != null)
|
|
|
+ unlock(lock.readLock());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Around("@annotation(unLock)")
|
|
|
+ public Object unlock(ProceedingJoinPoint pjp,
|
|
|
+ org.hsweb.concurrent.lock.annotation.UnLock unLock) throws Throwable {
|
|
|
+ String name = getLockName(pjp);
|
|
|
+ Lock lock = lockMap.get(name);
|
|
|
+ try {
|
|
|
+ return pjp.proceed();
|
|
|
+ } finally {
|
|
|
+ logger.debug("unlock :{}", name);
|
|
|
+ unlock(lock);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
@Around("@annotation(lock)")
|
|
|
public Object lock(ProceedingJoinPoint pjp,
|
|
|
org.hsweb.concurrent.lock.annotation.Lock lock) throws Throwable {
|
|
@@ -54,8 +95,10 @@ public class AnnotationLockAopAdvice {
|
|
|
if (!locked) throw new LockException(name + "error");
|
|
|
return pjp.proceed();
|
|
|
} finally {
|
|
|
- logger.debug("unlock :{}", name);
|
|
|
- unlock(_lock);
|
|
|
+ if (lock.autoUnLock()) {
|
|
|
+ logger.debug("unlock :{}", name);
|
|
|
+ unlock(_lock);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -76,8 +119,10 @@ public class AnnotationLockAopAdvice {
|
|
|
if (!locked) throw new LockException(name + "error");
|
|
|
return pjp.proceed();
|
|
|
} finally {
|
|
|
- logger.debug("unlock readLock :{} ", name);
|
|
|
- unlock(readLock);
|
|
|
+ if (lock.autoUnLock()) {
|
|
|
+ logger.debug("unlock readLock :{} ", name);
|
|
|
+ unlock(readLock);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -98,8 +143,10 @@ public class AnnotationLockAopAdvice {
|
|
|
if (!locked) throw new LockException(name + "error");
|
|
|
return pjp.proceed();
|
|
|
} finally {
|
|
|
- logger.debug("unlock writeLock:{} ", name);
|
|
|
- unlock(writeLock);
|
|
|
+ if (lock.autoUnLock()) {
|
|
|
+ logger.debug("unlock writeLock:{} ", name);
|
|
|
+ unlock(writeLock);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -142,7 +189,7 @@ public class AnnotationLockAopAdvice {
|
|
|
try {
|
|
|
lock.unlock();
|
|
|
} catch (Throwable e) {
|
|
|
- logger.error("unlock error",e);
|
|
|
+ logger.error("unlock error", e);
|
|
|
}
|
|
|
}
|
|
|
}
|