Vivendo e Aprendendo

Experiência prática na administração de Banco de Dados

É um PostgreSQL! Não, é um MSSql! Não, é um DB2! [h2 modo compatibilidade]

by Gilberto C. Andrade on 18 maio 2012

Tagged as: Database, Java, maven,

Calma pessoal, é apenas o banco H2 em modo compatibilidade! Imagine
que você acabou levando trabalho pra casa (Novidade!!!) mas se
esqueceu que em casa vc não possui o ambiente - banco de dados -
desenvolvimento semelhante ao do trabalho. Em meu caso um servidor de
banco de dados PostgreSQL.

O que isso tem haver com o banco de dados H2? Diferentemente de um
Postgresql, um MS Sql ou Oracle o H2 é um banco de dados leve e de
fácil instalação, podendo até executá-lo sem a necessidade de uma
instalação propriamente dita.

Mas como isso funciona?

Há dua formas de se beneficiar desta característia. A primeira é
utilizar o driver jdbc do próprio H2, utilizando o parâmetro MODE na
URL de conexão:

jdbc:h2:file:data/teste;create=true;MODE=PostgreSQL;DB_CLOSE_DELAY=-1

Assim você poderia recriar as estruturas do banco por script ou
ativando a criação das entidades no provedor de persistência - caso
utilize JPA. Veja que as estruturas - tabelas, views, sequências, etc
- não teriam que ser ajustadas por estar utilizando o H2. O banco H2
entende o dialeto, por assim dizer, do banco a ser “emulado” pelo
parâmetro MODE.

A segunda maneira, por sinal mais interessante, é não fazer nada!
Como assim? Você provavelmente se questiona! É verdade, você não
mexe em nada do seu projeto - que é um banco específico, no meu caso o
PostgreSQL. Você continua utlizando o driver, a URL do seu banco e
deixa o H2 fazer o resto. Vamos ver?
Suponha que sua forma de conexão seja a seguinte:

<dependencies>
	<dependency>
		<groupId>postgresql</groupId>
		<artifactId>postgresql</artifactId>
		<version>8.1-408.jdbc3</version>
	</dependency>
</dependencies>
<properties>
	<!-- Default Database Connection-->
	<jdbc.url>jdbc:postgresql://localhost:5435/teste</jdbc.url>
	<jdbc.driverClassName>org.postgresql.Driver</jdbc.driverClassName>
	<jdbc.username>teste</jdbc.username>
	<jdbc.password>teste</jdbc.password>
</properties>

Para funcionar precisamos ter um servidor PostreSQL rodando
localmente, certo? Pois bem, vamos iniciar e estabelecer um servidor
PostgreSQL através do H2. Para facilitar as coisas, vamos criar um
profile
que nos auxiliará nesta tarefa:

<profiles>
<profile>
	<id>h2</id>
	<activation>
		<activeByDefault>false</activeByDefault>
	</activation>
	<dependencies>
		<dependency>
			<groupId>postgresql</groupId>
			<artifactId>postgresql</artifactId>
			<version>8.1-408.jdbc3</version>
		</dependency>
		<dependency>
			<groupId>com.h2database</groupId>
			<artifactId>h2</artifactId>
			<version>1.3.166</version>
		</dependency>
	</dependencies>
</profile>
</profiles>

Agora a “grande sacada” do H2, abra dois terminais: um para rodar o
servidor e a outra para você trabalhar normalmente com o maven. Em uma
delas iremos iniciar o servidor:

mvn -P h2 exec:java -Dexec.mainClass="org.h2.tools.Server" -Dexec.args="-properties data -baseDir data"

Após este comando, você terá a sua disposição uma interface - via
navegador - a qual lhe permitirá escolher em qual MODE rodar o
servidor.

H2 Admin Interface

Ao conectar àquela configuração definida incialmente, teremos outra
interface de administração. Aqui poderemos administrar nosso “banco
PostgreSQL”

H2 Admin Console

Acesse este banco por sua aplicação ou por qualquer outro cliente
jdbc - por exemplo o squirrel. Lembre-se você estará acessando um
banco PostgreSQL!

comments powered by Disqus