|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
java.lang.Objecttecgraf.javautils.concurrent.locks.LockManager
public class LockManager
Classe responsável por gerenciar os locks sobre objetos compartilhados.
Os locks podem ser obtidos de duas formas:
LockManager tenta adquirir o
lock no momento em que a chamada é feita e, nesse caso, retorna o
identificador do lock. Ver
acquireLock(LockPolicy, Object, SharedAccessObject, LockDependency...)
LockManager tenta adquirir o
lock no momento da chamada mas, no caso de não conseguir, coloca a requisição
em uma lista de espera. As requisições estabelecem um tempo de espera limite
pelo lock. Dessa forma, o consumidor não fica bloqueado enquanto o lock não é
concedido. A sincronização ocorre com o uso de um objeto de callback
implementado como um LockFuture. Ver
tryAcquireLock(LockPolicy, Object, SharedAccessObject, LockFuture, long, LockDependency...)
Os pedidos de lock são adquiridos ou não de acordo com a política de acesso requisitada. As políticas atualmente aceitas são:
Exclusive. Consumidores
nesse modo aceitam ler um recurso mesmo sabendo que ele pode estar sendo
alterado por um escritor PW.
PW e com o E. Corresponde o modo
shared tradicional ou ao leitor tradicional na política leitor/escritor.
CR. Se aplica bem ao caso onde o consumidor precisa
exclusividade na escrita de um recurso em relação a outros escritores, mas
não aos leitores CR.
Opcionalmente, os pedidos de lock podem definir uma cadeia de dependência de
locks sobre outros objetos da aplicação. Um lock sobre um determinado objeto
somente pode ser obtido se os locks dependentes também o forem. Ver
LockDependency.
Utiliza duas threads: uma para gerenciar as requisições de lock por timeout e
uma outra para enviar os eventos aos listeners desse LockManager
. As threads são iniciadas no momento da instanciação do
LockManager e são finalizadas com a chamada ao método
close().
| Nested Class Summary | |
|---|---|
static class |
LockManager.ManagerType
Define se o gerenciador aceita reentrância de pedidos de lock ou não |
| Field Summary | |
|---|---|
static int |
INFINITE_TIMEOUT
Constante que representa a espera, sem timeout, por um lock de um objeto. |
| Constructor Summary | |
|---|---|
LockManager()
Constrói o gerenciador de locks do tipo não reentrante |
|
LockManager(LockManager.ManagerType managerType)
Constrói o gerenciador de locks informando o tipo do gerenciador |
|
LockManager(LockManager.ManagerType managerType,
Logger logger)
Constrói o gerenciador de locks que informa o tipo do gerenciador |
|
LockManager(Logger logger)
Constrói o gerenciador de locks do tipo não reentrante |
|
| Method Summary | |
|---|---|
LockId |
acquireLock(LockPolicy lockPolicy,
Object ownerKey,
SharedAccessObject object,
LockDependency... lockDependencies)
Tentativa de aquisição do lock de um objeto passando as dependências que devem ser obtidas para que o lock seja obtido com sucesso. |
LockResult |
acquireLockWithResult(LockPolicy lockPolicy,
Object ownerKey,
SharedAccessObject object,
LockDependency... lockDependencies)
Tentativa de aquisição do lock de um objeto passando as dependências que devem ser obtidas para que o lock seja obtido com sucesso. |
void |
addLockListener(Class<?> theClass,
LockListener listener)
Listener para observar o estado de todos os locks de um determinado tipo de objeto |
void |
addLockListener(LockListener listener)
Listener para observar o estado de todos os locks obtidos e liberados |
void |
addLockListener(Object object,
LockListener listener)
Listener para observar o estado de todos os locks de um determinado objeto |
void |
close()
Método para fechar o gerenciador de locks |
void |
forceReleaseLock(SharedAccessObject objectLocked)
Força a remoção dos locks de um objeto. |
Map<LockPolicy,Set<Object>> |
getLockOwnersKeys(SharedAccessObject objectToVerify,
LockPolicy... policies)
Retorna o conjunto de chaves de usuários detentores dos determinados tipos de locks sobre o objeto passados como parâmetro |
Logger |
getLogger()
Recupera o logger utilizado |
LockManager.ManagerType |
getManagerType()
Retorna o tipo de gerenciador |
boolean |
hasLock(LockPolicy policy,
SharedAccessObject object,
Object ownerKey)
Verifica se usuário possui determinado tipo de lock de um objeto. |
LockPolicy |
hasLock(SharedAccessObject object,
Object ownerKey)
Retorna a política de lock mais alta que o usuário obtém sobre o objeto, se houver |
int |
releaseLock(LockId lockId)
Remove o lock de um objeto. |
void |
removeLockListener(LockListener listener)
Remove o listener de observação do estado de locks |
void |
setLogger(Logger theLogger)
Determina o logger a ser utilizado |
void |
tryAcquireLock(LockPolicy lockPolicy,
Object ownerKey,
SharedAccessObject object,
LockFuture future,
long timeout,
LockDependency... lockDependencies)
Tenta obter um lock exclusivo para um objeto compartilhado. |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Field Detail |
|---|
public static final int INFINITE_TIMEOUT
| Constructor Detail |
|---|
public LockManager()
public LockManager(LockManager.ManagerType managerType)
managerType - o tipo do gerenciadorpublic LockManager(Logger logger)
logger - logger utilizado para mensagens do gerenciador de lock
public LockManager(LockManager.ManagerType managerType,
Logger logger)
managerType - o tipo do gerenciadorlogger - logger utilizado para mensagens do gerenciador de lock| Method Detail |
|---|
public LockManager.ManagerType getManagerType()
public void close()
public Logger getLogger()
public void setLogger(Logger theLogger)
theLogger - o logger a ser utilizado
public LockId acquireLock(LockPolicy lockPolicy,
Object ownerKey,
SharedAccessObject object,
LockDependency... lockDependencies)
lockPolicy - política de lockownerKey - identificador do requisitante do lockobject - objeto referente à requisição de locklockDependencies - dependência do objeto solicitado
public LockResult acquireLockWithResult(LockPolicy lockPolicy,
Object ownerKey,
SharedAccessObject object,
LockDependency... lockDependencies)
lockPolicy - política de lockownerKey - identificador do requisitante do lockobject - objeto referente à requisição de locklockDependencies - dependência do objeto solicitado
public void tryAcquireLock(LockPolicy lockPolicy,
Object ownerKey,
SharedAccessObject object,
LockFuture future,
long timeout,
LockDependency... lockDependencies)
lockPolicy - política do lock solicitadoownerKey - identificador do usuárioobject - objeto referente à requisição do lockfuture - observador a ser notificado quando o lock é obtido ou o
timeout atingidotimeout - tempo de espera pelo locklockDependencies - dependências do lock requisitadopublic int releaseLock(LockId lockId)
O lock só é removido se objeto estiver contido na lista de objetos com
locks, e o identificador do lock é igual ao parâmetro lockId.
lockId -
public void forceReleaseLock(SharedAccessObject objectLocked)
objectLocked - objeto sobre o qual se deseja remover o lock
public boolean hasLock(LockPolicy policy,
SharedAccessObject object,
Object ownerKey)
policy - a política a ser verificadaobject - o objeto a ser verificadoownerKey - a identificação do usuário
public LockPolicy hasLock(SharedAccessObject object,
Object ownerKey)
object - o objeto a ser verificadoownerKey - a identificação do usuário
public Map<LockPolicy,Set<Object>> getLockOwnersKeys(SharedAccessObject objectToVerify,
LockPolicy... policies)
objectToVerify - objeto a ser verificadopolicies - políticas de lock
public void addLockListener(LockListener listener)
listener - observador utilizado para receber eventos
public void addLockListener(Class<?> theClass,
LockListener listener)
theClass - o tipo do objeto a ser observadolistener - observador utilizado para receber eventos
public void addLockListener(Object object,
LockListener listener)
object - o objeto a ser observadolistener - observador utilizado para receber eventospublic void removeLockListener(LockListener listener)
listener - observador utilizado para receber eventos
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||