fev. 07 2016

Iniciando com Java em aplicações Web – Configurando o Java

Category: Servidores JavaEdson Gonçalves @ 17:22

Para desenvolver aplicações Web escritas em Java, precisamos de dois elementos simples:

1. Inicialmente precisamos do kit de desenvolvimento Java, conhecido como JDK, para executarmos uma Java Virtual Machine no computador de desenvolvimento.

2. Um contêiner Servlet, que nada mais é que um servidor Web capaz de executar todos os tipos de aplicativos feitos para a Internet, como páginas HTML, arquivos CSS, imagens, JavaScript e outros, além de exclusivamente trabalhar com as classes compiladas por uma JDK, retornando ao usuário final páginas renderizadas com conteúdo HTML.

No mercado existem diversos servidores Web que permitem interpretar as classes compiladas em Java, sendo os mais conhecidos: Apache Tomcat/Gerônimo e TomEE, Red Hat Wildfly/JBoss, IBM WebSphere, Oracle GlassFish, Jetty (Fundação Eclipse).

Os artigos serão feitos, inicialmente, com  a versão JDK 8 e o uso do Apache Tomcat 8, focado no iniciante que está aprendendo os primeiros passos.

Fazendo Download do JDK

Para que você comece a desenvolver programas em Java, temos como passo inicial obter o Kit de Desenvolvimento Java, que na atualidade está na versão 8 estável – chamado de Java SE Development Kit 8 ou, simplesmente, JDK 8. Para baixar o JDK você deve acessar o seguinte endereço: http://www.oracle.com/technetwork/java/javase/downloads/index.html.

Embora a página de download possua mais de uma opção para você baixar, a plataforma Java será o suficiente para nosso trabalho:

Java Platform (JDK) – Este é o kit de desenvolvimento Java, que consiste de várias ferramentas, entre elas um compilador (javac), uma ferramenta de execução (java), uma ferramenta para geração de documentação (javadoc), um conjunto de bibliotecas prontas para o uso e etc.

Ao clicar em download, você será direcionado para escolher a plataforma e baixar.

Observe que na página de Download existem diversas versões de JDK e plataformas. Você  deverá efetuar o download do Java SE para o seu sistema operacional.

A Instalação do Java SE no Sistema Operacional Windows

O JDK para o sistema operacional Windows possui duas versões: 64bits ou 32bits. Utilizarei no exemplo a versão de 64bits. O formato para o arquivo, “jdk-VERSAO-windows-x64.exe”, é um executável no padrão do sistema operacional. Para iniciar o instalador, duplo clique no arquivo que abrirá o assistente.

O assistente, para quem não conhece a instalação de um programa, costuma ter, como padrão,  as principais configurações necessárias para sua operação. Basta seguir as recomendações feitas avançando no assistente até que seja iniciada a instalação.

Configuração do kit em seu ambiente operacional

No Sistema Operacional Windows, é preciso configurar a variável de ambiente. No Windows antes da versão 7, você deve entrar no Painel de Controle, Sistema e, na guia Avançado, clicar no botão Variáveis de Ambiente.

No Windows 7/8, vá em Painel de Controle > Sistema e Segurança >Sistema e clique em Configurações avançadas do sistema.

Painel de Controle do Windows 8 em Sistema e Segurança

Figura 1- Painel de Controle do Windows 8 em Sistema e Segurança

Na caixa de diálogo Propriedades do Sistema, clique na aba Avançado e depois no botão Variáveis de Ambiente.

Figura 2 – Guia Avançado em Propriedades do Sistema

Figura 2 – Guia Avançado em Propriedades do Sistema

Crie uma variável de sistema chamada JAVA_HOME e coloque o caminho da instalação do Java JDK, em Valor da variável, como por exemplo: C:\Program Files\Java\jdk1.8.0_25\. Confirme a sua criação.

Figura 3 – Criação da variável de ambiente JAVA_HOME

Figura 3 – Criação da variável de ambiente JAVA_HOME

A variável PATH, já existente, aparece na lista abaixo, em Variáveis de Ambiente. Esta variável PATH contém uma lista de diretórios (caminhos de programas), separados por pontos-e-vírgulas.  Clique no botão Editar ao selecionar a variável PATH. Vá até o fim desta variável e adicione um ponto-e-vírgula, se não houver.  Digite a variável JAVA_HOME, onde seu JDK está instalado, seguido de \bin, ficando da seguinte forma:

%JAVA_HOME%\bin;

Confirme as caixas de diálogos para concluir a adição das variáveis no sistema operacional.

Figura 4 – Edição da variável PATH

Figura 4 – Edição da variável PATH

Para testar se as configurações das variáveis de ambiente foram bem sucedidas, abra o prompt de comando e execute este comando a seguir.

java -version

Deve aparecer ao executar o comando as informações das configurações do executor Java como no exemplo a seguir.

java version “1.8.0_25”
Java(TM) SE Runtime Environment (build 1.8.0_25-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)

NOTA: As variáveis de ambiente são sequências de caracteres que possuem informações como unidade, caminho ou nome de arquivo. As variáveis de ambiente controlam o comportamento de vários programas. Como exemplo de variáveis de ambiente temos: PATH, CLASSPATH, USER, TEMP, JAVA_HOME e etc.

A Instalação do Java SE no Sistema Mac OS

Após baixar o JDK, arquivo no qual usa o pacote padrão do sistema operacional, algo como “jdk-VERSAO-macosx-x64.dmg”, você dará um duplo clique para iniciar o assistente de instalação. Você pode ver as configurações do Java instalado no seu Mac OS em Preferências do Sistema>Java.

Configurando e Testando a Instalação no Mac OS X

Precisamos agora configurar e testar. Os passos a seguir realizam as tarefas que necessitamos para termos a JDK funcional:

1) Para configurar, abra o Terminal (Launchpad>Outros) e execute o comando a seguir:

open ~/.bash_profile

1.1) Acrescente as seguintes linhas, onde jdk1.8.0_25.jdk é a versão que estou usando enquanto escrevo este livro:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home

export PATH=$JAVA_HOME/bin:$PATH

1.2) Salve e feche o editor de textos.

3) Execute o seguinte comando para leitura novamente no arquivo .bash_profiler:

source ~/.bash_profile

4) Verifique se a versão instalada está correta executando o comando mostrado a seguir:

java -version

Deve aparecer algo similar ao mostrado no meu exemplo que indica que as configurações foram bem sucedidas:

java version “1.8.0_25”
Java(TM) SE Runtime Environment (build 1.8.0_25-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)

Instalando o Java SE no Sistema Operacional Linux

No Linux, existem diversas formas de instalar uma versão JDK.  Após a conclusão do download do JDK, abra o terminal do Linux e siga os passos mostrados a seguir. No momento em que escrevo esse livro, a versão baixada para o exemplo é a jdk-8u25-linux-x64.tar.gz.

Digamos que você tenha baixado no diretório ~/Downloads, como foi o caso na elaboração deste livro. Neste caso, o JDK é apenas descompactado. Você pode manter operando o JDK apenas o seu usuário ou, se preferir, mover para algum diretório específico onde outros usuários poderão utilizá-lo.

Para descompactar no usuário, basta realizar o comando mostrado a seguir.

tar xf ~/Downloads/jdk-8u25-linux-x64.tar.gz

Dependendo da sua distribuição, no Linux, basta entrar no arquivo .profile em /etc/.profile e adicionar as linhas a seguir.

Como realizei configurações no meu Ubuntu, o local indicado é em “~/.bashrc“, sem as aspas, claro.

JAVA_HOME=~/jdk1.8.0_25
JRE_HOME=~/jdk1.8.0_25/jre
export JAVA_HOME
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/lib
export MANPATH=$MANPATH:$JAVA_HOME/man

As variáveis usadas são explicadas rapidamente a seguir, dando a você noção do que cada uma faz:

  • JAVA_HOME – Diretório onde a JDK está instalada
  • JRE_HOME – Diretório onde a máquina virtual está instalada
  • PATH – Diretório dos executáveis, onde inclui o do Java
  • CLASSPATH – Diretório das libs
  • MANPATH – Diretório do manual, acessível por man javac.

Para testar, abra o Terminal e execute este comando:

java -version

Deve aparecer algo similar ao mostrado a seguir, como ocorre nos demais sistemas operacionais já abordados, quando o comando é bem sucedido.

java version "1.8.0_25"
Java(TM) SE Runtime Environment (build 1.8.0_25-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)

Nota: Algumas distribuições Linux já possuem uma versão do JDK instalado por padrão, principalmente a versão OpenJDK. Para saber sobre a versão do JDK Open Source, assim como versões disponíveis para instalação em determinadas distribuições Linux, visite o site http://openjdk.java.net/.

Tags: , , ,


fev. 07 2016

Voltando as atividades no Blog

Category: InicioEdson Gonçalves @ 17:08

Pessoal, por muitos anos sumi, deixando o blog parado. Nestes anos que estive “afastado” da escrita, estive muito, mas muito ocupado.
A boa notícia é que vou trazer a todos os leitores novidades, muito além do que muitos esperam. Uma das minhas atividades, ao longo destes anos era ajudar uma equipe de suporte a resolver problemas de clientes de aplicações Web, principalmente em Java.
Trabalhamos duramente com milhares de clientes e centenas de aplicativos diversificados, com problemas comuns e incomuns. O resultado: muita experiência para trazer os leitores.
Inicialmente vou pagar uma velha dívida com todos os leitores: meu livro Desenvolvendo Aplicações Web com Java, que ensina JSP, Servlets, Spring MVC, Hibernate, JPA 2 e AJAX. Só que, antes de ser publicado, irei publicar uma parte aqui no blog.
No livro, que dividirei uma parte em artigos que vou publicar, trarei respostas para problemas comuns que encontrei com iniciantes ao longo de mais de 10 anos ensinando ou ajudando desenvolvedores a hospedar seus aplicativos e resolver seus problemas pessoais encontrados na implantação e execução de um serviço.
Preparem-se para uma nova perspectiva no desenvolvimento com aplicações Web.


abr. 11 2012

Se o servidor é seu, porque o problema é meu?

Category: Off-Topic,Servidores JavaEdson Gonçalves @ 15:43

Quero começar este ano, em meu blog, falando um pouco sobre administração em aplicativos e servidores Java, que serve também no geral para outros serviços.
Desde que assumi a gerência da Integrator na parte de hospedagem, vejo e-mails que são direcionados ao suporte e recebo também, muitos pedidos que, sinceramente, não deveriam vir de um desenvolvedor Java.

A critica que faço aqui é construtiva e, de certa forma, um puxão de orelha, para que os profissionais que trabalham com desenvolvimento, comecem a se preocupar mais com o que criaram e assumam o problema.

Criei meu aplicativo e agora?

Tudo começa com a sua criação. Você, profissional desenvolvedor, recebeu a árdua tarefa de criar aquele sistema “maravilhoso“ que alguém idealizou ou, por motivos pessoais, quis aprender algo ou desenvolver o sistema de seus sonhos.

Depois de muita luta, você desenvolveu e foi aprovado por seu cliente, a diretoria da empresa onde trabalha ou por você.

Mas e agora? Como executar isto fora de minha máquina de desenvolvimento?

Do desenvolvimento até a produção

Muitos desenvolvedores se acostumaram com a automação das ferramentas de desenvolvimento e, claro, com tanta facilidade, parar e iniciar o serviço Java ali é simples.  Entretanto, o desenvolvedor java não pode apenas saber como operar uma ferramenta de desenvolvimento.

O profissional de Java precisa, na realidade necessita, conhecer o servidor Java que executa seus aplicativos. Não é apenas o básico de instalar, configurar, iniciar e parar. Também não vale dizer que sabe ler logs. Vai além. O profissional Java precisa saber como o servidor Java, que escolheu usar, opera.  Isso vai desde as suas características básicas de configuração, até como ele pode ser modificado e otimizado para melhorar o desempenho do que desenvolveu.

Está bem, você vai dizer que não quer ser administrador, mas sim é um desenvolvedor, certo? Errado! Isto é comum no governo, onde um carimba e outro coloca a folha. Se olhar para fora, verá que muitos fazem várias tarefas diferentes. E no seu caso, o servidor Java é a extensão do seu aplicativo.

O aplicativo precisa funcionar em qualquer lugar

Se você é o desenvolvedor, logo, é importante saber como fazer para que o seu aplicativo funcione em qualquer lugar, não somente em sua máquina. Usar o framework XYZ não é a etapa final do que criou. É no momento que ele vai para produção, que é onde aparecerão os problemas.

O que mais vejo e escuto é a frase: na minha máquina funciona. Ora, se você desenvolve corretamente, sem nenhum problema oculto, nada personalizado especificamente para sua máquina, que causaria erros online, também funciona em qualquer lugar.

Estes são os problemas mais comuns  do desenvolvimento para a produção são:

1)    Nome do banco de dados – criar a conexão usando um nome local, onde na produção se modifica, bate o recorde em erros de acesso pelo usuário;

2)    Nome do usuário do banco de dados – segundo problema mais comum, o usuário é diferente e gera erro de acesso negado;

3)    Permissões de acesso em arquivos – o terceiro mais comum, quem usa o Windows está muito acostumado a ter permissão para tudo. Mas online, servidores seguros tem permissões para escrita e execução, que precisam ser dadas em arquivos e diretórios;

4)    Erro no local onde está o banco de dados – conhecer a regra de como acessar o banco de dados no servidor de produção é o mínimo, vai desde do host até a porta. Não sair colocando o que “acha” ser o correto. Na dúvida, sempre perguntar a quem administra o sistema operacional para evitar erros e mudar, principalmente, no código que foi compilado para colocar em produção;

5)    Problemas de memória – usar o framework XYZ porque ele foi indicado na comunidade como bacana é ótimo. Mas saber o que ele consome de sua máquina é melhor ainda. Não adianta achar que sabe como usar o Tomcat, que localmente tudo funciona, que online não vai dar problemas, se você nem sabe localmente o quanto o Tomcat necessita de memória para executar seu aplicativo. Máquina de desenvolvimento possuem vários GIGAS de memória RAM e muitas vezes o desenvolvedor nem se preocupou em limitar o serviço em um X de memória. Online, você terá configurado uma limitação no servidor Java. É importante saber se, dentro desta limitação, seu aplicativo executa com conforto;

6)    Envio de email – O SMTP tem regras em qualquer lugar. Saber a porta correta, parâmetros básicos mínimos necessários é importante para que, em produção, o envio seja feito sem erros.

7)    Erro 404 – O deploy não funcionou, logo, tem algo de errado e precisa ver nos logs o que está ocorrendo;

8)    Bibliotecas – As bibliotecas que usa no desenvolvimento precisam estar em produção. Se exportou o WAR file, EAR file, e nenhum está com as bibliotecas, ou falta alguma, porque foram colocadas diretamente no servidor Java, precisa fazer o mesmo em produção. Algumas bibliotecas também costumam dar problema quando existem duas do mesmo tipo, mas com versões diferentes.

9)    Localização – Não deveria estar nesta lista, mas infelizmente, é um erro também comum. É possível configurar o Locale em seu aplicativo ou diretamente no servidor Java. Não é porque na sua máquina o Locale é em pt-br que online vai ser também. Saber modificar isso no servidor Java que seja, não é difícil e lhe salva de dores de cabeça com uma configuração muito simples.

10)  Erro na descompactação do arquivo WAR – Probleminha comum quando você sobe por FTP o aplicativo com o Tomcat ligado, por exemplo, causando um hot deploy sem o arquivo ter finalizado totalmente o seu envio. Alternativamente, ocorreu alguma queda de pacote no envio e ocorreu uma falha, deixando o  arquivo impossibilitado de ser operado e, consequentemente, o servidor Java lançará um erro na descompactação.

11) Assumir o problema – É, eu sei, isto não se trata de erro de produção. Mas pensar é um ato importante para resolver problemas. Sair culpando outro, sendo que o problema é seu, não faz parte do meio que escolheu como profissão. Se assumiu um cargo como desenvolvedor, assuma também que o que fizer, desenvolver, pode ter falhas e que elas são corrigíveis. Assumir o problema é o primeiro passo em direção da solução.

 

Os logs são a chave para a solução dos problemas

Todos os problemas, que relatei acima, sempre lançam exceções. Claro que, muitas vezes, o desenvolvedor sai reclamando antes de pensar, que é sua maior tarefa, do porque essas exceções estão sendo lançadas. A grande vantagem do java é que ele aponta o dedo para o problema. E de tantos que usam no mundo, é muito fácil descobrir uma resposta para o problema. Mas fica mais difícil se quiser que resolvam o SEU problema para você, acredite.

 

Indo além dos servidores Java

Em produção, não basta apenas saber como operar um servidor Java. Você desenvolveu o aplicativo e, como conhecedor do que fez, deve também saber que o seu uso pode crescer. Mas, muitas vezes, se esqueceu de que o comportamento com 10 pessoas testando é um e com centenas online, é outro.

Um belo dia, seu servidor Java caiu, se não caiu, deu um erro estranho em seu aplicativo ou aconteceu algo que não havia previsto, claro.  Mas a culpa não é sua, certo? Funcionava antes e não mexi em nada. Errado! Totalmente sua culpa. Só de dar a resposta de que não mexeu em nada já implica que não está cuidando do que fez. Se não observar por um tempo o que desenvolveu, a evolução do que fez, não vai ter correções e, como consequência, erros. Saiba estes princípios básicos no desenvolvimento:

1)    Bibliotecas e frameworks mudam – se mudam de versão, é porque a anterior não era perfeita. Erros são reportados e precisam ser atualizados para evitar que no seu, uma hora ocorra o que outro já teve.

2)    Servidores Java mudam – mesma situação que citei acima, se mudou a versão do servidor Java, pode ser que, algum possível bug pode causar problemas em seu aplicativo.

3)    Profiler – Usar um profiler vai lhe orientar como seu aplicativo se comporta e ver possíveis picos de memória/CPU que possam lhe causar problemas, mais adiante, com muitos usuários acessando.

Atacando o problema de frente

Evidentemente muitas são as situações que ocorrem em aplicativos. Nem todos os problemas são simples de serem solucionados. Mas alguns podem ser de simples resolução se, de fato, você realmente quiser resolver a situação. Vale citar alguns:

1)    Otimize o banco de dados – Conhecer queries lindas com subqueries é muito bom. Mas saber o que elas causam, ao serem chamadas em bancos de dados, com muitos dados, é melhor ainda. Otimizar queries é importante para melhorar o desempenho.  Claro que, em meio a isto, entram também saber otimizar a estrutura das tabelas, criar índices corretos e até mesmo criar caches de queries de pesquisas, as mais comuns, para melhorar o seu desempenho no acesso ao aplicativo.

2)    Modificar o comportamento falho do aplicativo – Sim, sei que você não quer mexer no que estava funcionando bem nos primeiros 10.000 registros/acessos. Mas agora não está mais. Muita gente acessando, muitos erros sendo lançados, memória, velocidade. Precisa modificar o comportamento, voltar para a “prancheta” do desenvolvimento e replanejar. Se não fizer isto, seu projeto vai falhar, mais dia ou menos dia.

3)    Mude de servidor Java – Sei que você aprendeu agora, e muito bem, aquele servidor chamado Apache Tomcat. Mas ele pode não estar dando conta do recado como outro daria. É hora de conhecer novos servidores Java e testar, seja o Jetty, JBoss ou GlassFish. Algumas pequenas mudanças, como a troca de servidor Java, podem trazer benefícios ao que desenvolveu, mesmo que isto lhe traga de volta ao “be a bá” de como tudo funciona.

4)    Buscar alternativas – Sempre , em algum lugar deste planeta imenso do desenvolvimento, alguém arrumou alguma solução que  fez melhorar o desempenho do aplicativo com aquela tecnologia XYZ que escolheu e deu a dica. Busque alternativas e dicas.

 

Empurrão ou puxão de orelha?

Minha intenção é dar a vocês, leitores deste blog, um empurrão no sentido certo. Existem várias etapas no desenvolvimento e todas envolvem o que criou. Vai desde o sistema operacional que irá trabalhar em produção, até o que é acessado pelo seu aplicativo.  Estes detalhes precisam ser todos analisados, mesmo que você diga que é apenas um mero desenvolvedor Java.

Tags: , , ,


set. 22 2011

O que estou fazendo no momento

Category: Off-TopicEdson Gonçalves @ 21:46

Olá Pessoal, tudo bom? Como vão vocês?

Sei que estou sumido do blog. Muitos leitores estão, nestes meses, me mandando comentários pedindo  a continuação de alguns artigos, de séries, que comecei e ainda não terminei. Quero informar a todos que, neste momento, estou renovando meus livros, por isso parei um pouco de postar no blog.

Muitas pessoas já sabem, outras nem fazem muita ideia, mas escrever toma muito tempo. Quem possui pouco tempo livre, como eu, no caso, é deixar os finais de semana com a família e  o descanso das noites, para nos dedicar a escrita.

Os escritores que sempre apoio em meu blog, até mesmo outros que desejarem aparecer no mural, só entrar em contato comigo. Sei o quanto é difícil divulgar um livro e ter um pouco de reconhecimento. Muita gente acha que ganhamos dinheiro com livros, que ficamos ricos, mas estou aqui para desmentir. Na área de informática, quem escreve é para ter o prazer de ajudar aqueles que estão com as mesmas dificuldades que, com certeza, passamos um dia.

Quero deixar aqui os meus sinceros agradecimentos a todos aqueles que postam comentários elogiando, criticando e pedindo mais tutoriais no blog. Para aqueles que não liberei os comentários, fiquem tranquilos que eu os li. Só não os liberei, muitas vezes, porque não tive tempo ou, por serem pedidos e perguntas relacionadas diretamente a mim, sobre o assunto, não me permiti o tempo necessário para responde-los.

Assim que terminar o meu primeiro objetivo, que é a completa reformulação e atualização, do livro “Desenvolvendo Aplicações Web com JSP, SERVLETS, JAVASERVER FACES, HIBERNATE, EJB 3 PERSISTENCE E AJAX”, voltarei a postar os diversos tutoriais, que já os tenho quase prontos, no blog.

Deixo aqui o espaço aberto, neste tópico, para que comentem o que acham interessante de estar neste livro que estou trabalhando. Já garanto que muitas criticas e pedidos, vindos de algumas centenas de leitores, não serão ignorados. Professores de universidades, faculdades e escolas técnicas do Brasil e alguns países de língua portuguesa, que também me procuraram para deixar seus pedidos e criticas, quero manter meu compromisso de que todos serão levados em consideração.

Agradeço a compreensão de todos.

Bons códigos!

Tags: , , , , , , , , , , , , ,


Próxima Página »