public class LockManager extends Object
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().
| Modifier and Type | Class and Description |
|---|---|
static class |
LockManager.ManagerType
Define se o gerenciador aceita reentrância de pedidos de lock ou não
|
| Modifier and Type | Field and Description |
|---|---|
static int |
INFINITE_TIMEOUT
Constante que representa a espera, sem timeout, por um lock de um objeto.
|
| Constructor and Description |
|---|
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
|
| Modifier and Type | Method and Description |
|---|---|
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.
|
public static final int INFINITE_TIMEOUT
public LockManager()
public LockManager(LockManager.ManagerType managerType)
managerType - o tipo do gerenciadorpublic LockManager(Logger logger)
logger - logger utilizado para mensagens do gerenciador de lockpublic LockManager(LockManager.ManagerType managerType, Logger logger)
managerType - o tipo do gerenciadorlogger - logger utilizado para mensagens do gerenciador de lockpublic LockManager.ManagerType getManagerType()
public void close()
public Logger getLogger()
public void setLogger(Logger theLogger)
theLogger - o logger a ser utilizadopublic 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 solicitadopublic 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 solicitadopublic 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 lockpublic 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áriopublic LockPolicy hasLock(SharedAccessObject object, Object ownerKey)
object - o objeto a ser verificadoownerKey - a identificação do usuáriopublic Map<LockPolicy,Set<Object>> getLockOwnersKeys(SharedAccessObject objectToVerify, LockPolicy... policies)
objectToVerify - objeto a ser verificadopolicies - políticas de lockpublic void addLockListener(LockListener listener)
listener - observador utilizado para receber eventospublic void addLockListener(Class<?> theClass, LockListener listener)
theClass - o tipo do objeto a ser observadolistener - observador utilizado para receber eventospublic 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 eventosCopyright © 2016 Tecgraf/PUC-Rio. All rights reserved.