Mostrando postagens com marcador JAVA. Mostrar todas as postagens
Mostrando postagens com marcador JAVA. Mostrar todas as postagens

terça-feira, 12 de janeiro de 2010

Executando comandos do Sistema Operacional em uma aplicação WEB Java


Criei uma aplicação muito simples que demonstra como um Servlet pode invocar uma classe que efetua um comando qualquer no sistema operacional.

O projeto foi testado em Linux, Unix e Solaris. Caso testem em Windows e puderem me dar um feedback, fico grato.

O mesmo foi criado no Eclipse e utiliza o Tomcat 6 como servidor de aplicação, foi utilizado o Java 6. Deve funcionar com outras versões.

A estrutura do projeto é:

onde:
  • DiskFree: classe java que executa o comando df no sistema operacional que está rodando o tomcat e retorna um BufferedReader.
  • ExecuteCommand: classe java que executa qualquer comando que for enviada para ela no host do tomcat.
  • ServletDF: É o servlet que invoca a classe DiskFree.
  • ServletExecuteCommand: É o servlet que invoca a classe Executar comando.
  • index.html: Página principal da aplicação que invoca os servlets e permite que o usuário entre com um comando a ser executado.
Vale lembrar que a aplicação tem finalidade didática, portanto, não foram observados padrões de projeto, boas práticas, etc.


Para baixar o projeto, clique aqui.

Enjoy!

terça-feira, 5 de janeiro de 2010

Introdução a Web Services


Eu e meu amigo José Damico escrevemos um artigo para a Java Magazine 75 intitulado: Introdução a Web Services.

O artigo começa introduzindo o leitor na atual conjuntura de integração e reusabilidade nas empresas e onde os Web Services se encaixam. Passamos pela anatomia básica de um Web Service explicando o lado cliente e servidor, e como a comunicação ocorre utilizando o protocolo SOAP. Explicados os conceitos, partimos para o desenvolvimento de um Web Service simples que recebe um parâmetro e retorna o mesmo concatenando-o com “alo”. Para finalizar, desenvolvemos um cliente que irá consumir este serviço.

Muito obrigado ao Eduardo Espinola pelo convite para participar do time de articulista da JM e as demais pessoas que colaboraram para a escrita do mesmo, espero que seja útil para a comunidade!

quarta-feira, 4 de novembro de 2009

Java e o mercado de trabalho

Todos sabemos que no mercado temos muitas vagas para se trabalhar com Java, e na faculdade ficam falando coisas do tipo "aprenda Java que você conseguirá um bom emprego".

Concordo. Porém não podemos dizer que Java é simplesmente uma linguagem. Java é uma tecnologia, existe muito mais a se aprender além de aprender como criar estruturas, loops, etc...

Então os alunos se perguntam: "Se Java é tudo isso, então, o que devo estudar? Qual a demanda do mercado?".

Objetivamente eu diria que a grande demanda do mercado é por profissionais que saibam programar para a Web. Então, em sequencia, eu montaria a seguinte sequencia de estudos:
  1. Orientação a Objetos (tem que comer)
  2. Fundamentos da linguagem Java
  3. Servlets e JSP junto com Tomcat
  4. Servidores de aplicação (WebSphere CE, Geronimo, JBoss, Glassfish)
  5. Frameworks complementares (Struts, JSF e Hibernate pelo menos)
  6. Talvez um pouquinho de Ajax.
É isso, um roadmap simples e funcional para vc saber o que realmente importa!

Enjoy!

quinta-feira, 15 de outubro de 2009

Reference Cards

Encontrei uma página muito boa com uma coleção de reference cards, dentre eles sobre JAVA, XML e SQL!

Eis o link: http://www.digilife.be/quickreferences/quickrefs.htm

Enjoy!

quarta-feira, 14 de outubro de 2009

Java: Override X Overload

Pergunta chavão em entrevistas: Qual a diferença entre Override e Overload. Ai vai:
  • Override: É a sobrescrita de método. Um método pode ser declarado e implementado na classe pai, mas na filha ele pode ter outra implementação.
  • Overload: É a sobrecarga de método. Métodos com o mesmo nome, mas com tipos de parâmetros e/ou retornos diferentes. Não é o mesmo método e não sobrescreve (Override) o método pai.
Enjoy!

terça-feira, 13 de outubro de 2009

Criando um projeto MVC simples para acesso a banco de dados

Escrevi um tutorial prático para se criar um projeto Java MVC que acessa um banco de dados e faz duas operações:
  1. Listagem
  2. Inclusão
Para baixar o mesmo, clique aqui.

terça-feira, 6 de outubro de 2009

Exemplo de conexão JDBC Java com Oracle e DB2

Criei classes exemplo para se conectar via JDBC com o Banco Oracle e DB2.

Clique nos respectivos links para baixar:

Oracle
DB2

Enjoy!

sexta-feira, 2 de outubro de 2009

Chamando Stored Procedures no Java

Dúvida comum: Como chamar uma stored procedure no Java?

Eis a solução:

CallableStatement cs;

try {
// Call a procedure with no parameters
cs = connection.prepareCall("{call myproc}");
cs.execute();
} catch (SQLException e) {

}

Fonte: http://www.exampledepot.com/egs/java.sql/CallProcedure.html
Mais em: http://java.sun.com/docs/books/tutorial/jdbc/basics/sql.html

terça-feira, 29 de setembro de 2009

Criação de um projeto Java com Mysql

Escrevi um tutorial que mostra a instalação e configuração do MySQL no Linux e posteriormente a criação de um projeto JAVA para utilizar o mesmo.

Clique aqui para baixar.

Enjoy!

sexta-feira, 28 de agosto de 2009

Exemplos JAVA

Para quem gosta de aprender baseado em exemplos, estas duas páginas estão lotadas de exemplos sobre JAVA, ai vai:

http://www.java2s.com/

http://www.exampledepot.com/

Enjoy!

terça-feira, 25 de agosto de 2009

Padrões de Projeto - Design Patterns

Atualmente o termo padrões de projeto, ou design patterns é cada vez mais falado entre desenvolvedores, analistas e arquitetos de TI. É esperado que profissionais Plenos ou Seniores conheçam muito bem os principais padrões e estejam aptos a aplicar os mesmos em seus projetos.

A idéia deste post é descrever basicamente o que são os tais padrões de projeto e citar os principais.

Basicamente padrões de projeto são soluções reutilizáveis para problemas comuns. Como assim? Vamos supor que você quer implementar um software que precisa se conectar ao banco de dados e retornar dados para o usuário, porém você não quer que o programador entre em contato com a regra de negócio, pois esta vai ser desenvolvida por um outro programador mais sênior, então você pode utilizar um padrão chamado Business Delegate, que basicamente fornece uma camada com a qual o programador júnior vai poder interagir.

Um termo muito falado sobre o tema é o tal de GOF, ou Gang of Four. Fala-se gangue dos 4 pois trata-se de uma coleção de 19 padrões de projeto documentados elaborados por 4 pessoas: Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides. Existe um ótimo livro sobre o tema que inclusive eu recomendo: "Padrões de Projeto", pode ser visto e comprado aqui.

Os padrões do GOF podem ser utilizados nas linguagens Orientadas a Objetos, não é algo específico para Java. Dentre os mais conhecidos, posso citar:
  • Abstract Factory: Fornece uma interface para se criar uma família de objetos que tem características em comum. Não especifica a classe concreta. Um exemplo seria um criador de documentos que pode criar um e-mail ou um pdf.
  • Adapter (or wrapper ): Como o nome diz, é um adaptador. Ele permite que classes que normalmente não poderiam interagir devido a interfaces incompatíveis, o façam. Este padrão prove uma interface que pode ser utilizada pela classe anteriormente incompatível.
  • Prototype: É um padrão de criação que baseia-se na criação de objetos através da clonagem de um protótipo, utilizando o método clone() ao invés do new(), dessa forma evitamos custos.
  • Facade: Fornece uma interface única e simplificada para uma série de interfaces em um sistema. Por exemplo, nós temos muito código para iniciar algum processo, envolvendo N classes e métodos, então, ao invés de replicar este mesmo código em todos os locais de nossa aplicação que utilizem este processo, podemos criar um facade que encapsula o processo e que recebe somente o que for necessário para o processo.
  • Singleton: Esta é o mais famoso e mais questionado em entrevistas. Basicamente seu objetivo é garantir que haverá somente uma instância do objeto em memória, não importando quantas vezes ele será chamado/construído.
Além do GOF, temos os padrões de projeto Enterprise, que como o nome diz, são indicados para aplicações enterprise, a listagem completa dos mesmos pode ser vista aqui . Um ótimo livro sobre o assunto pode ser visto aqui . Os padrões mais comuns são:
  • Business Delegate: É como uma camada que permite que os clientes (programas, classes, etc) não interajam diretamente com os serviços/classes de negócio. Com esta "camada" de bando de dados, nos reduzimos o acoplamento entre a camada de apresentação e os serviços de negócio, por exemplo, a camada de apresentação passa os parâmetros para a camada de negócio e assim "delega" o restante do processo a mesma, dessa forma, estamos escondendo a implementação do negócio das camadas superiores da aplicação.
  • Data Access Object (DAO): Esse é o mais comum! Um DAO abstrai e encapsula todo o acesso a uma fonte de dados. O DAO gerencia a conexão, obtêm e armazena dados!
  • DataSource (DS): É a representação da fonte de dados. Um DS pode ser um banco de dados, um arquivo XML, etc...
  • TransferObject (TO): É utilizado para transferir dados entre uma aplicação e algum componente tal como um EJB, é como um contêiner que transporta "coisas". Normalmente, nós temos um DAO que utiliza um TO para retornar dados para um cliente, também normalmente criando um objeto do tipo VO (Value Object) com os dados do TO.
Certamente a breve descrição dos padrões enterprise não deve ter ajudado muito, pois os mesmos são mais complexos, para seu entendimento é necessário mais estudo e implementação do que uma breve leitura.

Finalmente, esta foi somente a ponta do iceberg! Que sirva como uma breva introdução. Espero ter colaborado com este breve artigo!




Enjoy!

segunda-feira, 24 de agosto de 2009

Statement Vs Prepared Statement

Essa é chavão em entrevistas:

"Qual a diferença entre Statement e Prepared Statement?"

Podemos abrir um debate sobre o tema, falando qual é melhor, qual é pior, qual é mais bonita e mais feia.... etc! Mas o entrevistador quer somente saber se você sabe alguma diferença básica, então, para isso podemos responder da seguinte forma (no meu ponto de vista):

Quando executamos um statement, seja ele prepared ou não, na primeira vez ela é compilada no banco de dados.
A diferença básica é que, a prepared statement, quando for chamada pela segunda vez, já estará compilada e preparada (como o nome diz) para ser executada, então, ganhamos algum tempo tornando as coisas um pouco mais ágeis.

Já o statement, sempre será compilado! Não importa se estivermos em um loop que vai executar um milhão de vezes o mesmo statement! :-)

Veja em detalhes dois artigos muito bons sobre o tema:
http://antoniocangiano.com/2009/09/09/improve-the-speed-and-security-of-your-sql-queries/
e
http://freedb2.com/2009/09/08/the-article-every-dba-should-forward-to-sql-developers/

É isso.

sexta-feira, 21 de agosto de 2009

quinta-feira, 20 de agosto de 2009

Hibernate: HQL x Criteria

É muito comum em entrevistas perguntarem as diferenças entre HQL e Criteria, ambos relacionados com Hibernate. Para quem não sabe, HQL quer dizer Hibernate Query Language.

O HQL é mais próximo do SQL, é mais utilizado para consultas fixas, que não tem alterações no número de parâmetros necessários.

O Criteria é mais voltado para consultas onde o número de parâmetros não é conhecido, como em listagens que contém N filtros, neste caso o Criteria é mais recomendado por montar uma instrução mais direcionada para a busca em questão, sem adicionar campos ou parâmetros desnecessários, o que acaba agilizando a consulta na base de dados.

O Criteria oferece ainda N métodos e parâmetros para realmente fazermos uma busca bem poderosa e personalizada.

Um exemplo de uso de criteria é este abaixo, onde já temos uma classe CIDADE mapeada no Hibernate:

Criteria c = getSession().createCriteria(Cidades.class); // criando o criteria para a classe cidade
c.add( Restrictions.eq("estado.uf", "SP") ); // fazendo um filtro, no caso, onde estado == SP
List cidadesDeSaoPaulo = c.list(); // retornando a listagem - Fácil né?

O mais interessante ainda é que criteria tem vários métodos que podem nos auxiliar com as querys, por exemplo, trazer ordenado por descrição:

c.addOrder( Order.asc("descricao") );

Para setar a quantidade máxima de resultados, usamos o setMaxResults:

crit.setMaxResults(15);

Referências:

Mais sobre criteria pode ser obtido aqui.
Vários exemplos de consultas podem ser obtidas aqui.
Mais sobre HQL aqui.

Enjoy!

quarta-feira, 19 de agosto de 2009

Diferenças entre Final, Finally and Finalize

Mais uma chavão em entrevistas para a área de TI com foco em dev Java: "Qual a diferença entre Final, Finally e Finalize?":
  • Final: um método ou variável FINAL não pode ser sobrescrito.
  • Finally: Adicionada no final de um bloco try / catch, vai ser sempre executada, independentemente de problemas ocorrerem.
  • Finalize: Método destruidor (oposto do construtor). Geralmente é colocado nele códigos de limpeza por exemplo.
Enjoy!

Perguntas sobre EJB feitas em entrevistas

Primeiro a definição de EJB, basicamente um EJB (Enterprise Java Bean) é um componente de uma aplicação Java que fica em um servidor e desempenha uma função de negócio. Dessa forma, permite a construção de diferentes aplicações utilizando os mesmos beans (reaproveitamento).

Um tipo de EJB, é o Session Bean, que pode ser do tipo Stateful e Stateless. É chavão em entrevistas rolar perguntas como "Quais os tipos de session beans?" ou "Quais as diferenças entre Stateful e Stateless session beans?".

Rapidamente podemos responder, dizendo que:
  1. Stateful Beans: são objetos distribuídos que armazenam os dados de uma sessão, nós instanciamos um por cliente.
  2. Stateless, como o nome diz (state less), não armazena estado, dessa forma, permite que N clientes acessem o mesmo ejb.
Aproveitando o post, também é comum perguntarem sobre o que é MDB, ou seja, Message Driven Beans. A resposta rápida para esta questão é dizer que MDB são JMS (java message service) + EJB, sendo assim um componente capaz de manipular mensagens (JMS) de forma assíncrona.

Enjoy!

segunda-feira, 17 de agosto de 2009

Executando uma Stored Procedure no Hibernate

Essa muita gente pergunta, como executar uma Stored Procedure no Hibernate?

Basicamente os passos são:

0- Criamos a stored procedure no banco.

1- Criamos uma mapped query, ja relacionada a classe que vai ter um método que representa o "output" da stored procedure.

3- Chamamos a mapped query jogando o resultado dela num objeto que recebe o retorno do método que criamos na classe citada acima.

Um exemplo completo pode ser visto aqui.

sexta-feira, 14 de agosto de 2009

Ótima fonte para aprender Struts

Se alguém estiver procurando por um manual simples e direto sobre Struts, cheio de exemplos, o link a seguir é muito bom: http://www.roseindia.net/struts/index.shtml

Enjoy!

quarta-feira, 12 de agosto de 2009

Diferenças entre as versões do JDBC

Como diria um grande amigo meu (José Damico), as diferenças entre as versões do JDBC podem ser definidas com uma palavra: Natividade.

Quanto mais recente a versão, mais nativa ao banco é a tecnologia empregada. Vamos definir melhor:

JDBC 1 - Tipo restrito a plataforma Windows. Esse tipo utiliza uma ODBC para se conectar com um banco de dados. Todas as chamadas ao JDBC s"ao traduzidas para chamadas IDBC (Open DataBase Connectivity).

JDBC 2 - Basicamente o driver JDBC faz chamadas a algum outro código normalmente escrito em C.

Tanto o 1 e o 2, precisam de um software extra junto a sua aplicação Java.

JDBC 3 - Converte a chamada JDBC para uma chamada de rede. Nesta tecnologia, temos um servidor provendo a conexão com o banco de dados. Todo o código é escrito em Java.

JDBC 4 - Natividade 100%, ou seja, todas as chamadas JDBC são convertidas diretamente para o protocolo de comunicação do banco de dados, ou seja, acontece um acesso direto ao DBMS.

Em condições ideias, a versão 4 é a mais rápida e fácil de se desenvolver. Também é a mais utilizada.

Informações detalhadas (em inglês) podem ser encontradas aqui.

Enjoy!

sábado, 18 de julho de 2009

Projeto Open Source para avaliação de eventos/cursos/palestras

A quem interessar ajudar, eu e o Vinícius (mentee da Fundação Educacional do Município de Assis), estamos lançando um projeto no sourceforge que permite ao usuário avaliar um curso/palestra/evento dinamicamente.

A aplicação funciona da seguinte forma: o avaliador inicia um serviço na sua maquina que roda o Jetty (small app server) e nele roda a aplicação, no primeiro uso, o usuário faz o setup de sua avaliação (perguntas e respostas), enfim, libera a avaliação para a rede e todos os alunos podem preencher o formulário.

Os dados das questões e respostas são todos armazenados em XML, e podem ser acessados em outros momentos, mesmo derrubando e levantando o serviço novamente.

A linguagem de implementação é Java. O projeto pode (e deve) ser utilizado para se aprender mais sobre esta linguagem!

Quem quiser ajudar, será bem vindo. O projeto está em beta mas já é funcional.

Link para baixar o projeto e solicitar participaccao: https://sourceforge.net/projects/jevaluation/