sábado, 26 de novembro de 2011

Queima de Livros de Computação

Fala galera! Irei me mudar ano que vem, e recebi um ultimato da minha esposa para me 'livrar' de algumas coisas que eu tenho, ela disse que na casa nova só quer coisa nova :(
Assim, estou vendendo os Livros abaixo (depois irei anunciar outras coisas), se alguém se interessar favor entrar em contato comigo pelo meu email ou deixa um comentário aí no post! Valeu!

Rails 3 Programming (R$ 45,00)                                                        Ruby Programming (R$ 50,00)


Core J2ME (R$ 20,00)                                                                          Hibernate em Ação (20,00)

Projetos Práticos com Jboss Seam (R$ 30,00)                               Hackers Expostos 4ed (R$ 50,00)

Sistema de Banco de Dados (R$ 60,00)                                     Criando Páginas com css (R$ 35,00) 

Effective Java - autografado pelo autor do livro (R$ 80,00)
Se alguém se interessar pelo bolo todo, fala aí que eu posso ver um desconto. Quanto à entrega, eu moro em Fortaleza, então é bom que você more por aqui também, pois não tenho ideia de quanto seria o frete pra outro lugar :) Abraço a todos!

quarta-feira, 3 de agosto de 2011

Novidades da JDBC 4

Quem nunca precisou fazer uma conexão JDBC em Java que atire a primeira pedra! Apesar de hoje em dia não ser comum utilizar JDBC puro em grandes projetos, embora haja quem o faça, a API continua evoluindo junto com a especificação do JSE.
A nova API, JDBC 4, foi incorporada ao JDK 6 e traz algumas mudanças como: melhor gerenciamento de objetos e suporte a novos tipos de dados, além das já existentes flexibilidade e facilidade de uso.
Uma mudança que a nova versão trouxe é na hora de obtermos uma conexão com o banco. Antes era necessário carregar a classe do driver JDBC antes de chamar o getConnection de DriverManager, por exemplo:

Class.forName("com.mysql.jdbc.Driver");
//Chamada ao DriverManager aqui

Esta chamada não é mais necessária, pois o próprio DriverManager se encarregará de localizar e carregar  a classe do Driver JDBC, para isto, basta que nós adicionemos o .jar no classpath da aplicação.
Outra novidade é o suporte a tipos de dados em XML, que estão definidos na SQL2003. O objeto é o java.sql.SQLXML, podemos fazer por exemplo:

SQLXML xml = Connection.createSQLXML( );

ou ainda:

SQLXML xml = resultSet.getSQLXML( );
InputStream is = xml.getBinaryStream( );

Seu uso é similar aos dos tipos CLOB e BLOB, que são suportados desde à versão 2.0, a nova versão traz  também a classe RowId, que permite fazer o acesso a um registro de forma mais rápida.
Agora é possível executar funções escalares como:
  • CHAR_LENTH, CHARACTER_LENGTH
  • CURRENT_TIME, CURRENT_DATE

Com o advento dos frameworks de ORM, como Hibernate, JPA, ficou cada vez mais raro usar JDBC, talvez você leitor nem mesmo soubesse que a API estava na versão 4.0, to mentindo? :) Mas eu acredito que é bom estudar as bases, pois se soubermos utilizar bem JDBC será mais fácil aprender a usar ORM, assim como o estudo de Servlets/JSP é importante para o aprendizado de frameworks web como JSF, Struts, Vraptor etc. Especialmente quando precisamos desenvolver alguns projetos de pequeno porte, onde não é necessário utilizarmos esses frameworks de grande porte. Espero que tenham gostado do post! Até o próximo post então!

terça-feira, 2 de agosto de 2011

Servlet Listeners - Listeners de Sessão - Parte 1

Olá Javeiros! Continuando a nossa sequência de posts sobre listeners (aqui tá o primeiro e aqui o segundo) hoje vamos começar a falar sobres os listeners de eventos de sessão. Vamos dividir o assunto em duas partes pois nós temos 4 interfaces para os listeners de sessão.

Antes de mais nada é importante que você saiba o que é uma sessão. Como o foco do post não é esse, não espere nenhum compêndio sobre o assunto aqui, quero apenas lembrar o conceito para aqueles que já viram algo sobre isso. Você nunca estudou o que é uma sessão http? Então é melhor você clicar aqui e dar uma estudada primeiro.

O protocolo HTTP é considerado um protocolo stateless, isso significa que cada requisição que é feita ao servidor é sempre uma novidade. Lembra do filme "Como se fosse a primeira vez"? Pois é, depois que o servidor recebe a requisição e envia a resposta ele jamais lembrará o que tinha nessa requisição. Bom, mas isso é porcaria não? É, realmente seria se não fosse o conceito de sessão http. Uma sessão http nada mais é do que a identificação das requisições de um usuário, como o protocolo http não armazena o estado das requisições, os  clientes enviam algo nela para que servidor saiba que aquela requisição foi feita pelo usuário A e não pelo B. Essa informação é o session ID.

Existem basicamente duas maneiras de implementar o controle de Sessão em uma aplicação Web Java:  através de Cookies ou da reescrita de URLs. A API de Servlets suporta as duas formas e o melhor é que o processo de controle é totalmente automático para o desenvolvedor. Cookies podem ser desabilitados pelo cliente, sendo assim, quando não for possível utilizar esta técnica, os Servlets poderão reescrever as URLs adicionando a elas o nosso Session ID.

A criação de uma Sessão pode ser feita a partir da chamada ao método getSession. Este método retornará a sessão que está associada à requisição atual, caso não exista, uma Sessão nova é criada. Você pode passar um booleano como parâmetro caso deseje decidir criar ou não uma nova sessão.

HttpSession session = request.getSession( ); 

Depois que um sessão é criada, toda requisição feita entre cliente e servidor carregará o session ID. A partir daí precisamos definir o tempo de duração de uma sessão e quando destruí-la, já que não há como saber se o cliente não está mais 'ativo'.

Encerrando uma Sessão

Existem duas formas de encerrar uma sessão, através da definição de um tempo máximo de inatividade setMaxInactiveInterval ou através da chamada ao método invalidate, os dois métodos estão presentes na interface HttpSession. É possível também configurar o tempo máximo através de um parâmetro no arquivo web.xml da aplicação, conforme pode ser visto abaixo:

 <session-config>
   <session-timeout>30</session-timeout>
 </session-config>

Vale apenas ressaltar que o tempo definido através do método setMaxInactiveInterval é em segundos, enquanto no web.xml é em minutos.


HttpSessionListener


A API de Servlets permite que interceptemos o momento em que uma sessão é criada ou destruída. Para isso precisamos criar um Listener de Sessão através da implementação da interface javax.servlet.http.HttpSessionListener. Essa interface possui 2 métodos que serão chamados sempre que uma sessão for criada, sessionCreated, ou destruída, sessionDestroyed. Por último a classe precisa ser configurada no web.xml para que o container possa chamá-la. A API 3.0 de Servlets permite a utilização de annotations na classe Listener, eliminando a necessidade do mapeamento no web.xml.
A seguir temos um exemplo de uma classe que implementa HttpSessionListener utilizando anotações.




Caso você não esteja usando a nova versão de Servlets, você deve mapear o listener no arquivo web.xml da aplicação:

 <listener>
   <listener-class>30</listener-class>
 </listener>


No próximo artigo iremos falar sobre sobre os outros Listeners de Sessão (Activation, Binding e Attribute).
Até o próximo post!

quinta-feira, 23 de dezembro de 2010

Notebook CCE: Primeiras Impressões

Fala galera, recentemente adquiri uma nova máquina pois o meu bom e velho core 2 duo já não estava mais dando conta do recado. Gostaria de falar da minha primeira impressão sobre os novos Notebooks da CCE. Ah, só pra registrar, o meu note anterior também era um CCE.

Bom, comprar um Notebook hoje em dia é um grande desafio, isso porque você tem um zilhão de opções pra escolher e normalmente os preços não variam muito. Os mais conservadores não irão pensar muito, vão correr pras marcas consagradas do mercado como: Dell, Hp, Sony, etc. Eles estão errados? De modo nenhum! Isso se chama: NÃO ARRISCAR! Bem, mas diz o velho ditado: Quem não arrisca não petisca. E por causa disso eu prefiro arriscar sim! Vou contar-lhes o motivo porque comprei novamente um notebook CCE (só lembrando: eu não estou ganhando porcaria nenhuma pra falar da CCE, apenas estou relatando a minha experiência como cliente desta empresa tupiniquim).

Quando eu resolvi comprar meu primeiro note em meados de 2008 e disse que ia comprar um CCE, quase fui massacrado pelos meus coleguinhas....Foram várias piadinhas do tipo: Ha, CCE é? Começou comprando errado... e outras coisas que o valham... mas como valente e destemido que sou, não dei ouvidos à concorrência..rs. O meu core 2 duo era o que precisava em termos de configuração na época e posso garantir que economizei uma grana boa! 

Críticas à primeira versão CCE

O primeiro notebook CCE que comprei tinha suas vantagens (core 2 duo, 2GB de RAM, 120 GB HD). Minhas única crítica era com relação à placa de vídeo, uma vagabunda SiS que não rodava nem campo minado! Bom, mas eu não me importava com isso naquela época, então posso dizer que ele me serviu bastante. O acabamento era bom, com exceção do Pad do mouse, e especifamente comigo tinha um rangido quando fechava a tela, que com o tempo parou. Foram dois anos de uso intenso e ZERO de problemas, nada dele parou de funcionar! Ponto pra CCE!

Novas versões com processadores core i

Agora resolvi comprar outro notebook. Escolhi o T546P+ da CCE. Muita coisa melhorou nessa versão. O problema da versão anterior, a placa de vídeo, foi resolvido. A CCE colocou uma Intel HD, que é a mesma placa que vem nos notebooks da Dell, não é uma monstruosidade, mas com relação à versão anterior parece até piada comentar. O acabamento foi melhorado, agora vem todo em black piano e com um teclado teclado mais moderno e muito melhor de digitar, com teclas mais espaçadas e mais sensíveis ao toque. Ponto pra CCE. A tela também foi melhorada, agora é de LED, pra aproveitar ainda mais a qualidade HD da placa de vídeo, com câmera e vem com saída HDMI. Ponto também! Não foram miseráveis com memória (4 GB) e nem com HD (640 GB o.O), outro diferencial foi a versão do Windows que veio junto: Windows 7 Home Premium (a maioria traz no máximo a Basic) e o Norton Security por 1 ano. A bateria está de parabéns! Fiz um teste e ela durou 2:30 horas de uso intenso! Ah, ainda vem com uma mochila Targus! CCE Wins!

O que eu não gostei?

O Pad do mouse continua uma porcaria, o acabamento black piano é show, mas não precisava colocar ele no Pad do mouse né? Fail aqui. As conexões estão todas na lateral, se você conectar coisas na USB fica um trabolho só, mas não é tão crítico. O cooler é barulhento e roda o tempo todo, vamos dar uma colher de chá aqui, afinal de contas é um core i5 e deve esquentar pra caramba.

Conclusão

Se você estiver pensando em comprar um Notebook com uma boa configuração, mas que o propósito não seja jogar eu recomendo fortemente comprar um CCE, você vai economizar bastante e vai ter uma boa máquina com uma boa durabilidade e de uma empresa nacional! 


Notebook CCE, ótimo preço, ótima configuração.

terça-feira, 14 de dezembro de 2010

Rest with Jersey: Creating a Restful zip download funcionality.

It's very simple create RESTFul Web Services with Jersey. I'll demonstrate how to create a simple one that provide a dowload of a compressed file. 

First, let's see how to compress a file in Java. If you wanna learn more about, then click here. I use ZipOutputStream because I wanna send the zip file through OutputStream provided by Servlet Response object, but you can send an existent zip file if you prefer. So let's go to the code:


This method is quite simple, It just writes the File parameter inside the ZipOutputStream, that encapsulates our OutputStream, I didn't close the Stream because I wanna compress several files.
Right now let's see how to create our Rest class:























The main points are the annotation @Produces and the header Content-Disposition. The first one is used to specify the MIME media types of representations a resource can produce and send back to the client, in our example we will send a zip file back to the client. The header Content-Disposition allow us to set the file name for the client, if you don't wanna use it the file name will be the same of the rest method name.

After add all desired files we need flush and close the stream and return an 'ok' response, if something goes wrong we send an INTERNAL_SERVER_ERROR status response. When the user requests the resource (like this: http://localhost:8084/jersey-sample/resources/downloader/downloadall/ he will receive a zip file to download and the suggested name will be the same configured in the header Content-Disposition.

It's just for now. Until the next post.

quarta-feira, 30 de junho de 2010

Tomcat 7 foi lançado! Vejas as novidades.

 A apache lançou oficialmente a versão 7 do tomcat, que recentemente completou 10 anos de criação, o que faz dele um projeto bastante maduro, apesar de apenas 7 versões. No mundo open source é comum não termos milhares de versões, afinal de contas esse negócio de mil versões tem um apelo meramente comercial.
Vale a pena conferir a nova versão, que já oferece suporte à especificação de servlets 3.0 e jsp 2.2. Veja aqui tudo que mudou nessa versão e se quiser degustar a versão é só fazer o download aqui.

sábado, 22 de maio de 2010

Custom Tags: Exemplo Rápido

Fala javeiros! Neste post iremos ver um dos assuntos mais chatos complexos da prova de SCWCD: Custom Tags. E não tô falando de usar JSTL não... a gente vai aprender como construir nossa própria JSTL (guardadas as devidas proporções claro).
Neste primeiro post não vamos falar muito. Queremos que você, leitor, veja todo o processo de construção de uma custom tag. Não fiquei preocupado por não entender quase nada das tags, atente apenas a sequência da construção. Espero que gostem do post! Hands on!

A construção de custom tags envolve basicamente 3 passos:

  1. Criar uma classe que implemente a interface Tag ou estender uma de suas implementações da API.
  2. Criar um arquivo .tld que definirá a sua tag.
  3. Mapear a tag no descritor da aplicação (web.xml).
Para o nosso exemplo iremos construir uma tag que mostra a data atual no formato dd/mm/yyyy hh:mm:ss. É um exemplo bem simples, porém perfeitamente extensível e didático.

Para o primeiro passo nós iremos utilizar a classe javax.servlet.jsp.tagext.BodyTagSupport. Esta classe é fornecida pela própria API e facilita bastante o trabalho de construção de tags, bom mas isso não nos interessa no momento, o importante é saber que temos que estedê-la. 
Na figura abaixo podemos ver a implementação da nossa classe principal.























Para o segundo passo iremos definir a nossa tag no arquivo mytags.tld.
Veja como fazer isso na figura abaixo:

















Por último, temos que mapear a nossa tag no arquivo web.xml de nossa aplicação.














Pronto! Nossa primeira tag foi construída. Simples, não? Apesar de ser chamada de Simple Tags, construir tags não tem nada de simples, são muitas classes e interfaces possíveis de estender, o retorno dos métodos é feito através de constantes (chato de memorizar) e sem contar que temos que criar um arquivo xml e alterar o descritor e cada um com várias possíveis tags para memorizar. Mas temos que estudar né, fazer o que.
Em posts seguintes veremos mais detalhes sobre a construção de tags, agora pra terminar de vez este post, vejamos como fica a nossa tag em uma página JSP e qual o seu resultado após a execução da página.





Ao executar esta JSP devemos obter um resultado parecido com o abaixo:

Hoje são 22/05/2010 14:58:30
Até o próximo post!