Desde que eu comecei a minha carrieer Eu sempre odiei perder tempo configurando meu dev ambiente. Acontece que tive que instalar um servidor Oracle inteiro no meu (ruim) computador, só porque quem montou aquele projeto não sabia que para ambiente dev também o mysql vai servir bem. Lentamente meu computador, tendo problemas durante as instalações, configurando um sistema SSO na minha máquina, ou pior sem instalar o banco de dados, usando um em um servidor para todos os desenvolvedores, que quando alguém quebra alguma coisa, ou há algum problema de rede, Eu não posso fazer meu trabalho!
E no final, instalar coisas e resolver problemas relacionados, leva muito tempo ( sou um programador que quero codificar! ) E é sempre tedioso!
Acabei com esta solução que (por enquanto e para pequenos projetos) me agrada , usando Maven , Jetty e HSQLDB é possível iniciar uma aplicação sem ter que instalar o banco de dados e o servidor de aplicação, tendo um código que funcionará Indipendentemente do ambiente (ou use algum truque para hackear pequenos pedaços de código), e você pode preparar um computador limpo instalando nele apenas o VCS (SVN, git, etc.) e Maven .
Os únicos requisitos instalados na máquina são:
- Java 1.7+ (o cais exige)
- Maven 3+
Configuração Maven
Então, vamos começar a configurar o Maven para nos ajudar a implantar e iniciar nosso aplicativo.
Em primeiro lugar, temos que configurar jetty-maven-plugin
:
Por que Jetty?
Por ter o mínimo necessário para o meu projeto, se precisar de algo mais complexo também pode usar o plugin do Tomcat para Maven, mas não tenho um guia para isso!
Em nosso adicione o seguinte plugin:pom.xml
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.0.5.v20130815</version>
<configuration>
<scanIntervalSeconds>0</scanIntervalSeconds>
<jettyXml>jetty/jetty.xml</jettyXml>
<webApp>
<extraClasspath>${basedir}/jetty/classpath</extraClasspath>
</webApp>
</configuration>
<dependencies>
<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<version>2.2.9</version>
<scope>runtime</scope>
</dependency>
</dependencies>
</plugin>
Com este fragmento estamos configurando uma instância Jetty, com o arquivo de configuração ( ), e uma pasta classpath onde colocamos os recursos externalizados (eu a utilizo para o arquivo de propriedades do projeto). jetty.xml
Configuração Jetty
Continue criando o arquivo em seu projeto em . Agora podemos usar nosso para configurar a fonte de dados JNDI:jetty.xml
${projectHome}/jetty/jetty.xml
jetty.xml
<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">
<Configure id="Server" class="org.eclipse.jetty.server.Server">
<New id="myApplicationDs" class="org.eclipse.jetty.plus.jndi.Resource">
<Arg></arg>
<Arg>jdbc/myAppDataSource</Arg>
<Arg>
<New class="org.hsqldb.jdbc.JDBCDataSource">
<Set name="DatabaseName">file:database/application</Set>
<Set name="User">user</Set>
<Set name="Password">user</Set>
</New>
</Arg>
</New>
</Configure>
Com isso, estamos configurando uma fonte de dados JNDI que se conecta a um HSQLDB .
Por que HSQLDB?
Ele pode criar o banco de dados na memória e em um arquivo. Desta forma, não precisamos instalar nada mais do que o Maven.
Você notou o dependency
na configuração do plugin Maven? Graças a ele, não precisamos fazer nada com o HSQLDB para que funcione!
Usando a url jdbc , estamos dizendo ao HSQLDB para usar um arquivo para armazenar o banco de dados (na configuração do teste de integração, também podemos usá-lo para iniciar um banco de dados na memória para usar apenas para os testes).file:database/{dbname}
Usando o banco de dados
Então agora?
Agora que o ambiente está pronto, temos o container do servlet e o banco de dados gratuitamente, o que falta é recuperar o banco de dados em nossa aplicação.
A internet está cheia de artigos sobre como recuperar um do JNDI.javax.sql.DataSource
O que eu gosto é a primavera, então coloque em um contexto rápido :
<jee:jndi-lookup jndi-name="jdbc/myAppDataSource" id="dataSource" />
No final, para iniciar nosso servidor de aplicativos com o aplicativo, vamos executar:
mvn jetty:run
Espere … onde está o banco de dados?
Uma vez que o aplicativo é iniciado, o db é criado dentro , então, não esqueça de fazer seu VCS (SVN, git, etc.) para ignorá-lo!
${projectHome}/database
GUI HSQLDB
Se você quiser ver o banco de dados HSQLDB oferecer uma GUI para fazer isso, inicie o comando:
java -cp hsqldb-2.2.9.jar org.hsqldb.util.DatabaseManager
Você pode encontrar o jar em sua pasta de repositório maven ( ).$USER_HOME/.m2/repository
Quando for solicitado o caminho do banco de dados, coloque:
jdbc:hsqldb:file:${projectHome}/database/${dbname};lock_file=false;readonly=true
Usando lock_file
e readonly
você pode se conectar ao seu banco de dados também se o aplicativo estiver usando.
Pouca consideração
Tudo isso pode ser muito bom se você usar algum ORM (JPA, Hibernate, etc.) que cria o banco de dados para você no início da aplicação, caso contrário você terá que configurar um script, ou criá-lo manualmente.
O fim
Espero que você tenha gostado!