Com mapas confiáveis, é possível fornecer um valor de tempo limite de nova tentativa em milissegundos para o WebSphere eXtreme
Scale para solicitações de transação.
Sobre Esta Tarefa
É possível configurar o valor de tempo limite no arquivo
de propriedades do cliente ou em uma sessão. O valor de sessão substitui a configuração de propriedades
do cliente. Se o valor estiver configurado como maior que zero, a solicitação será tentada até que a condição de tempo limite seja atendida ou até ocorrer uma falha permanente. Uma falha permanente pode ser uma exceção DuplicateKeyException.
Um valor de zero indica a configuração do modo fail-fast e o eXtreme Scale não tenta a transação novamente após qualquer tipo de transação.
Durante o tempo de execução, o valor de tempo limite da transação é usado com o valor de tempo limite de nova tentativa, garantindo que o tempo limite de nova tentativa não exceda o tempo limite da transação.
Há dois tipos de transações: Transações de confirmação automática e as transações que usam os métodos
begin e
commit explícitos.
As exceções válidas para nova tentativa diferem entre estes dois tipos de transações:
- Para transações que são chamadas dentro de uma sessão, as transações são tentadas novamente para as exceçõesSystemException CORBA e TargetNotAvailable do eXtreme Scale.
- Para transações de confirmação automática, as transações são tentadas novamente
para SystemException CORBA e exceções de disponibilidade do eXtreme Scale.
Essas exceções incluem as exceções ReplicationVotedToRollbackTransactionException, TargetNotAvailable e AvailabilityException.
As falhas do aplicativo ou outras falhas permanentes são retornadas imediatamente
e o cliente não tenta a transação novamente.
Essas falhas permanentes incluem as exceções DuplicateKeyException
e KeyNotFoundException. Use a configuração fail-fast para retornar todas as exceções sem tentar as transações novamente depois de quaisquer exceções.
As exceções nas quais o cliente tenta a transação novamente são:- ReplicationVotedToRollbackTransactionException (somente na auto-consolidação)
- TargetNotAvailable
- org.omg.CORBA.SystemException
- AvailabilityException (somente na auto-consolidação)
- LockTimeoutException (somente na auto-consolidação)
- UnavailableServiceException (somente na auto-consolidação)
Exceções permanentes, onde a transação não será tentada novamente:- DuplicateKeyException
- KeyNotFoundException
- LoaderException
- TransactionAffinityException
- LockDeadlockException
- OptimisticCollisionException
- Configure o valor de tempo limite em um arquivo de propriedades do cliente.
Para configurar o valor requestRetryTimeout em um cliente, inclua ou modifique a propriedade requestRetryTimeout no Arquivo de Propriedades do Cliente. As propriedades do cliente estão no arquivo objectGridClient.properties pelo padrão. A propriedade requestRetryTimeout é configurada em milissegundos.
Configure o valor maior que zero para que o pedido seja tentado novamente em exceções para as quais uma nova tentativa está disponível. Configure o valor como 0 para
falhar sem as novas tentativas em exceções. Para usar o comportamento padrão, remova a propriedade ou configure o valor como -1. Um exemplo do valor no arquivo objectGridClient.properties é o seguinte:
requestRetryTimeout = 30000
O valor requestRetryTimeout
é especificado em milissegundos. No exemplo, se o valor for usado em uma instância de ObjectGrid, o valor de requestRetryTimeout será de 30 segundos.
- Configure o valor de tempo limite programaticamente.
Para configurar as propriedades do cliente programaticamente,
primeiro crie um arquivo de propriedades do cliente em um
<local> apropriado para seu aplicativo. No
exemplo a seguir, o arquivo de propriedades do cliente refere-se ao
fragmento de objectGridClient.properties na
seção anterior. Depois de se conectar à instância ObjectGridManager, configure as propriedades do cliente, conforme descrito. Em seguida, quando possuir uma instância do ObjectGrid, a instância possuirá as propriedades do cliente que foram definidas no arquivo. Se você alterar
o arquivo de propriedades do cliente, será necessário toda vez obter
explicitamente uma nova instância de ObjectGrid.
ObjectGridManager manager= ObjectGridManagerFactory.getObjectGridManager();
String objectGridName = “testObjectGrid”;
URL clientXML = null;
ClientClusterContext ccc = manager.connect("localhost:2809", null,
clientXML);
File file = new File("<location>/objectGridClient.properties");
URL url = file.toURI().toURL();
ccc.setClientProperties(objectGridName, url);
ObjectGrid objectGrid = ogManager.getObjectGrid(ccc, objectGridName);
- Configure o arquivo de substituição durante uma confirmação de sessão.
Para configurar o tempo limite de nova tentativa de solicitação em uma sessão ou para substituir a propriedade do cliente requestRetryTimeout, chame o método setRequestRetryTimeout(long) na interface Session.
Session sessionA = objectGrid.getSession();
sessionA.setRequestRetryTimeout(30000);
ObjectMap mapA = sessionA.getMap("payroll");
String key = "key:" + j;
mapA.insert(key, "valueA");
Esta sessão agora usa
um valor de requestRetryTimeout igual a 30000 ms ou 30 segundos, independentemente
do valor que está configurado no arquivo de propriedades do cliente. Para obter informações adicionais sobre
a interface da sessão, consulte Uso de Sessões para Acessar Dados na Grade.