A atualização do JDBC 4.3 chegou com o Java 9 2017-10. Entre suas poucas mudanças está o novo recurso sobre Connection
onde os métodos beginRequest
e sinalizam…endRequest
Indica ao motorista que uma solicitação, uma unidade de trabalho independente, está começando nessa conexão. Cada solicitação é independente de todas as outras solicitações em relação ao estado local da conexão no cliente ou no servidor. O trabalho realizado entre os pares beginRequest e endRequest não depende de nenhum outro trabalho realizado na conexão, seja como parte de outra solicitação ou fora de qualquer solicitação. Uma solicitação pode incluir várias transações. Pode haver dependências no estado do banco de dados confirmado, pois isso não é local para a conexão.
…e…
… é opcional, específico do fornecedor e deve ser amplamente transparente.
➠ Explique o objetivo deste recurso.
Parece ser sobre algo maior do que transações, mas não é sobre commits de duas fases. Está relacionado ao sharding , o principal novo recurso do JDBC 4.3?
- É algum tipo de escopo que envolve várias transações?
- Quais bancos de dados fazem uso desse recurso?
- Em particular, Postgres , H2 ou Microsoft SQL Server tem esse recurso?
Não estou perguntando se esses bancos de dados já têm drivers JDBC atualizados para JDBC 4.3. Estou perguntando sobre o quadro geral, qual é o significado e o propósito de uma "solicitação" no contexto de uma conexão de banco de dados entre conexões.
Estranhamente, a especificação JDBC 4.3 faz apenas uma menção, sem explicação:
Alterações na API JDBC
As seguintes alterações foram feitas nas interfaces JDBC existentes.
java.sql.Connection
Adicionados os métodos
beginRequest
,endRequest
,setShardingKey
,setShardingKeyIfValid
.
Essas novas APIs JDBC4.3
beginRequest
eendRequest
têm a ver com gerenciamento de conexão. É realmente uma dica fornecida pelo pool de conexões ao driver de que uma conexão foi retirada do pool (beginRequest
) ou verificada novamente no pool (endRequest
). Sem essas APIs, o driver realmente não tem idéia sobre os limites da solicitação. O driver pode então usar essas demarcações de solicitação para lavar roupa suja, como pingar o banco de dados, substituir a conexão sem outra para balanceamento de carga, limpar estados sujos etc.Essas APIs foram definidas como APIs específicas do Oracle no driver thin Oracle JDBC antes do JDBC4.3. O UCP (Universal Connection Pool) da Oracle já chama essas APIs. Agora que eles fazem parte do padrão, outros pools de conexão podem começar a usá-los (e outros drivers os implementarão).