O banco de dados H2 é uma ferramenta muito útil para desenvolvedores Java. Ele foi projetado para ser leve e pode ser incorporado diretamente em aplicativos Java. Com relação aos modos de conexão do H2, analise as afirmativas a seguir. I. No modo incorporado (embedded), um aplicativo abre um banco de dados dentro da mesma máquina virtual Java (JVM) usando JDBC. Este é o modo de conexão mais rápido e fácil. A desvantagem é que um banco de dados só pode ser aberto em uma máquina virtual por vez. Não há limite para o número de bancos de dados abertos simultaneamente ou para o número de conexões abertas. II. O modo misto (mixed) é uma combinação dos modos incorporado e servidor. O primeiro aplicativo que se conecta ao banco usando o modo incorporado, mas também inicia um servidor para que outros aplicativos (executados em diferentes processos ou JVM) possam acessar simultaneamente os mesmos dados. As conexões locais são tão rápidas quanto se o banco fosse usado apenas no modo incorporado, mas as conexões remotas são um pouco mais lentas. III. O modo em memória (in memory) é uma especialização do modo incorporado exclusivo para aplicações que usam o H2 em exclusivamente em memória. Todos os clientes que desejam se conectar (não importa se é uma conexão local ou remota) utilizam a mesmo URL do banco de dados. Além do desempenho a vantagem é o mecanismo de persistência de dados baseada em logs de transações. Está correto o que se afirma em
- A)I, apenas.
A alternativa sustenta que somente a afirmativa I estaria correta. A I realmente descreve o modo embedded do H2: o banco é aberto pela aplicação na mesma JVM via JDBC, com acesso local muito rápido e exclusividade de uma JVM por vez para aquele banco. O problema é que a II também está de acordo com o funcionamento do mixed mode, que combina acesso local e servidor TCP para permitir conexões de outros processos sem perder o desempenho das conexões internas.
- B)I e II, apenas
A alternativa reúne as afirmativas I e II, e esse é exatamente o quadro correto. A I está certa ao explicar o embedded mode, em que a aplicação acessa o banco na própria JVM, enquanto a II está certa ao descrever o mixed mode, no qual a primeira conexão local pode iniciar o servidor para permitir acesso simultâneo remoto. A III é que falha, porque banco em memória no H2 não ganha persistência por logs de transações e, quando há acesso de outro processo, ele não usa a mesma URL do acesso local.
- C)II e III, apenas
A alternativa aponta II e III como corretas. A II realmente procede, pois o mixed mode é a combinação de uso local com servidor para outros processos, mas a III distorce o modo in-memory ao tratá-lo como persistente por logs e ao dizer que local e remoto usam a mesma URL. No H2, a base em memória é volátil e, quando acessada por outro processo, depende de conexão TCP e URL específica, de modo que a I também não pode ser descartada.
- D)I e III, apenas
A alternativa considera corretas I e III. A I procede, porque no embedded mode o banco roda na mesma JVM da aplicação e fica restrito a uma JVM por vez para aquele banco. O erro está na III, já que o modo in-memory do H2 não persiste por logs de transações e, por padrão, perde os dados quando a JVM encerra, além de não admitir a ideia de que acesso local e remoto usem a mesma URL.
- E)I, II e III.
A alternativa afirma que todas as proposições estão corretas. Isso não se sustenta porque a III contém um erro conceitual importante: o modo in-memory do H2 é volátil, não persiste por logs de transações e não mantém os dados após o encerramento da JVM, salvo configurações específicas de duração da base. Já a I e a II estão compatíveis com a documentação do H2 ao descrever, respectivamente, os modos embedded e mixed.
Gabarito: B
O H2 é um banco leve e muito usado em desenvolvimento Java porque pode funcionar de formas diferentes, dependendo da necessidade: embutido, servidor, misto e em memória. A lógica da questão gira justamente em separar o que é descrição correta do que é “enfeite” demais no texto. No modo embedded, o banco roda dentro da mesma JVM do aplicativo via JDBC, com acesso simples e rápido, mas sem permitir que o mesmo arquivo/banco seja aberto por mais de uma JVM ao mesmo tempo. Isso torna a afirmativa I correta. Já o modo mixed é uma combinação de embedded com server: o primeiro aplicativo acessa localmente e, ao mesmo tempo, inicia um servidor para permitir acesso de outros processos ou JVMs. As conexões locais continuam muito rápidas, e as remotas ficam um pouco mais lentas, o que bate com a afirmativa II. Esse comportamento é típico da documentação do H2, que diferencia bem desempenho local e remoto. A afirmativa III é a armadilha. O modo in memory não é uma “especialização” com persistência baseada em logs de transações para garantir armazenamento duradouro. Em geral, banco em memória significa que os dados ficam na RAM e se perdem quando a aplicação encerra, salvo configurações específicas de backup/persistência fora do conceito básico cobrado. Além disso, a descrição mistura ideia de conexão local e remota de forma imprecisa. Por isso, a correta é a letra B, porque somente I e II estão certas.