Make deployments as simple as possible

Atenção, este blog foi migrado para: http://brunopereira.org

O título deste post é uma das preciosas dicas presentes no Effective Enterprise Java. Esta dica faz bastante sentido em ambientes corporativos, onde em boa parte dos casos não são os desenvolvedores que farão o deployment da aplicação, e sim uma equipe de operações. Quanto mais fácil for o processo de deployment da sua aplicação, mais chances de que a equipe de operações faça o deployment corretamente, e menos chances de eles terem problemas que você precise ajudar.Bom, quanto à validade desta dica em ambientes corporativos eu já estava ciente faz tempo, e sempre me guio por ela quando preciso montar a forma de distribuição de uma aplicação. Entretanto, há alguns meses eu fui vivenciar a validade desta dica também em ambientes não corporativos, com uma pessoa leiga tentando usar um software distribuído individualmente.

Eu estou desenvolvendo no meu tempo vago um software para advogados. O principal intuito deste software é permitir a gerência de processos, clientes, audiências, reuniões, etc. A idéia é que o software possa ser utilizado individualmente por um advogado ou de forma compartilhada em um escritório por exemplo. A aplicação é Java e possui interface web. Qualquer pessoa com acesso à máquina onde a aplicação estiver rodando pode utilizar a mesma.

A idéia de instalar um servidor de aplicações e um servidor de banco de dados em um escritório não é tão amedrontadora, embora de certa forma dificulte a distribuição em massa da aplicação. Porém, imaginem que para utilizar a aplicação individualmente em uma máquina em casa um advogado precise instalar o Java e um servidor de aplicações, instalar um servidor de banco de dados, copiar a aplicação para o servidor de aplicações e então usar o software. That’s not gonna happen, forget it!!

Qual seria uma solução mais fácil? Criar um instalador que faça estas instalações todas, crie atalhos, etc? Acho que isso resolveria sim. Mas eu não tenho muita experiência em criar instaladores, e eu também quero permitir que a aplicação seja utilizada no Linux e no Mac OS além do Windows. Prefiro uma solução ainda mais fácil que a de um instalador.

Todo mundo hoje em dia possui algum software de compactação (zip, rar, etc) em casa, e acredito que qualquer pessoa que se proponha a utilizar um software para advogados saiba descompactar arquivos. E se fosse possível fornecer um único arquivo zipado para o usuário e este precisasse apenas descompactar o arquivo para qualquer diretório de sua preferência e clicar em um atalho para utilizar o software? Isto é ainda mais fácil que um instalador, não é?

O Jira Standalone é distribuído como um zip que você precisa apenas descompactar e usar, contanto que a sua máquina possua Java instalado (e que o Jira encontre seu Java). Eu gostei bastante desta forma de distribuição, ela é muuuuito mais prática do que a instalação do Trac ou do Bugzilla por exemplo.

Entretanto, eu não quero exigir que um advogado tenha instalado previamente o Java e muito menos que ele configure qualquer variável de ambiente para utilizar meu software. Então resolvi facilitar a vida deles. A minha aplicação web utilizará o Tomcat, Wicket e o Derby como banco de dados, e eu vou distribuir tudo isso empacotado junto com JRE em um único zip para que o usuário descompacte e use.

Fazendo isto eu consigo garantir que todos os requisitos da aplicação estarão presentes e bem configurados, e de lambuja saberei sempre que as versões de todos os componentes são compatíveis, porque eu distribuirei versões previamente validadas de todos eles. Quando eu quiser atualizar a versão de tudo, sem problemas também.

A propósito, já li as licenças de cada um dos componentes e eu posso livremente distribuí-los ao usuário final sem custos, contanto que eu distribua o JRE da forma que obtive da Sun.

Open source is powerful and beautiful, isn’t it? E aí, o que acham desta forma de distribuição? Críticas são bem-vindas!

5 respostas para Make deployments as simple as possible

  1. Fabiano Izabel disse:

    A única desvantagem que vejo, em princípio, Bruno, é: ok, você garante a distribuição, mas suponha que você tenha uma mudança em um requisito qualquer da aplicação, que impacte diretamente em alteração na estrutura de algumas tabelas do banco de dados da aplicação? Dentro da sua aplicação, pelo que vejo, você precisará construir um módulo de gestão de mudanças, caso você não consiga realizar estas mudanças remotamente ou, então, perder alguns bons minutos ensinando o usuário (estou visualizando um úsuário totalmente cego) a rodar scripts, etc. :p

    Grande abraço!
    O blog está excelente!

  2. blpsilva disse:

    De fato com essa forma de distribuição eu não pretenderia ficar fazendo acessos remotos e configurações no banco não.

    Provavelmente a minha abordagem seria montar um script de migração de BD que conseguisse recuperar os dados da base atual do usuário e migrar da forma que fosse possível estes dados para a nova estrutura.

    Este seu comentário me atentou para um requisito importante, que é lidar com evoluções de modelo mantendo os dados do usuário e sem precisar de acessos remotos ou procedimentos obscuros por parte do usuário.

    De repente entre as diferentes releases da aplicação poderia ser aplicado um delta de modificações no BD. Algo como uma funcionalidade que identificasse a versão da aplicação que o usuário está usando e a versão para a qual estamos atualizando e então fossem aplicados esses deltas no banco para adequação à nova estrutura mantendo os dados da forma mais íntegra possível.

    Como o BD é Java e eu tenho total acesso a ele, acho que algo com essa flexibilidade é possível. Vou colocar no meu TO_DO!😉

    Achei tão pertinente essa observação que provavelmente ela fará parte de um POST futuro.

  3. marcelo disse:

    mas por outro lado vc também é obrigado a abrir seus fontes (pela licença).

  4. marcelo disse:

    por outro lado vc também é obrigado a abrir seus fontes (pela licença). é por isso que o bill gates chama de “licença pac-man”. mas isso não é isso mesmo o que defendemos?

  5. blpsilva disse:

    Depende da licença. As licenças dos componentes que eu utilizei permitem que eu crie uma solução comercial e não disponibilize os fontes da minha aplicação.

    Existem várias licenças open source, é necessário analisar a licença específica dos componentes que você escolher utilizar para saber o que você pode fazer.

    No meu caso específico, mesmo não precisando abrir os fontes, eu quis que a aplicação fosse open source. A aplicação em questão está mencionada neste post aqui: https://blpsilva.wordpress.com/2007/11/28/dvogadocom-aprovado-no-javanet/

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: