É um PostgreSQL! Não, é um MSSql! Não, é um DB2! [h2 modo compatibilidade]
by Gilberto C. Andrade on 18 maio 2012
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.
Ao conectar àquela configuração definida incialmente, teremos outra interface de administração. Aqui poderemos administrar nosso “banco PostgreSQL”
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!