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