É 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!