A importância da Certificação – Revista Espirito Livre

Olá Pessoal,

O post extra de hoje, é mais um trabalho que acabou de sair do forno. No final do ano de 2010, recebi o  convite do Fernando Junior Diretor Geral da Revista Espírito Livre, para escrever um artigo para mesma.  Não pensei duas vezes, já que tenho o enorme prazer em contribuir de alguma forma para a nossa comunidade, daí vamos pensar no tema.  E pensei pq não falar da importância que uma certificação pode trazer para a vida profissional? Pporém, vamos esquecer o titulo “Sou Certified XXXX” e ter mais atenção para conteúdo que é adquirido na maratona de preparação, além disso, resolvi abordar como o mercado se comporta diante dos Certified. O assunto é polemico e por isso que resolvi escrever, espero que gostem do artigo.  Para quem ainda não conhece a Revista Espírito Livre ela é uma revista Virtual gratuita que conta com a nossa colaboração para evolução, então não deixe de opinar, enviar suas criticas, sugestões etc.

Download

Um forte abraço à todos e não deixe de fazer seus comentários aqui no blog  ou no site da Revista sobre o artigo.

See ya! guys!

O’Reilly Revisor


Olá Pessoal,

Ano novo ainda no inicio e já começou os projetos não planejados(eu já dou sorte com isso, nunca vi, só para apertar mais a minha agenda),rs. Não poderia de compartilhar com vocês, uma notícia boa que acabei de receber do pessoal da O’Reilly. Na verdade estava apenas no aguardo da documentação deles, leitura de alguns docs importantes e o material inicial para uma espécie de training uma vez que só estarei no projeto em march/2010. A seguir conto um pouquinho da história, para os interessados.

lets go…

História

Ano passado, comprei um livro publicado por eles e dei inicio a leitura,apesar de ser um livro básico, mas eu tinha curiosidade em ler aquele livro. Porém, tive que confessar para eles, o livro era péssimo, pois não tinha didática, os exemplos apresentados não eram um dos melhores para aprender algo, sem falar que ele não atingi o objetivo proposto de forma fácil e eficiente. Daí levei alguns dias, preparando um “belo” e-mail, com o objetivo de fazer uma crítica construtiva, fui pontuando(nro da pagina, tópico etc) o que considerei péssimo, onde poderia melhorar, e o que de fato não deu para entender 100% da forma que estava sendo apresentado, e qual era a sensação como leitor após a leitura de um determinado trecho, uma vez que este não atendeu ao que foi proposto. No final fiz uns links, do entre o objetivo proposto que o livro ensinar com a parte que ele não atendeu as expectativas. Claro que isso, foi feito à medida que eu ia lendo, saia anotando e quando vi já tinha feito tudo isso.

Não acreditei que teria um feedback, mas por incrível que pareça, dentro de 15-18 dias após o envio, recebo um contato deles por e-mail, agradecendo o retorno, e que ficaram muito satisfeito em eu ter compartilhado minhas criticas daquela forma, o primeiro contato foi com uma atendente, mas no segundo foi a Director da O’Reilly (EUA) que acabou fazendo o convite, perguntando se eu não teria interesse em ser um revisor técnico de alguns projetos deles, pois eles estavam precisando de revisor para os projetos Java, ou outros que eu tivesse interesse com base no  meu skill técnico. Puts. Fiquei surpreso demais, com o convite, e não pude acreditar, começei achar que meu inglês estava louco e que eu estava lendo errado aquela informação, acreditam que tive que fazer a tradução em uma ferramenta? Eu pensei: “Não, eu estou lendo errado.” Mas, foi verdade. Daí começamos a negociar e discutir os projetos e como veio final do ano, não teve como eles baterem o martelo final, pois envolvia documentação e outros transmites legais a serem feitos.

Não posso negar para vocês que fiquei muito feliz e de fato surpreso, e mais uma vez veio a importância de ter um blog, apesar de ainda não ter feito uma versão em inglês, o pessoal da O’Reilly sabe português e segundo eles gostaram do conteúdo que viram por aqui. Fica ai mais um exemplo e a importância de um blog, e isso responde quando alguém chega e pergunta: “Pq você tem um blog, se não ganha $$ nada por isso?”. Eu sempre respondo, porque há coisas que o dinheiro não consegue comprar. Eu amo isso aqui, sou viciado, é como se fosse uma “droga” que preciso usar todo dia.

E agora?

Bem, depois de toda essa historia, agora estou fazendo uns training online deles, que é requerido, e entro em um projeto de revisão junto com a equipe editoral em março/2011. Porém, já enviaram todo material para minha casa em 8 dias. Incrível. Hehe.

Abracos, see you next post!! 😉

Relatório Ireport + JasperReport JEE + JSF

olá Pessoal,

No post de hoje, vou apresentar como gerar relatorios de uma base de dados sendo uma aplicação JEE. Em outro post, mostrei como gerar relatorios usando Java Basico com Hibernate, aqui vamos manter a mesma estrutura técnica a diferença apenas que será com foco para JEE. Espero que gostem.
Lets go…

Requisitos

Starting…

Para gerar relatorios em ambiente JEE, há algumas mudancas a nivel de codigo que sofrem alterações, porem tudo de ireport com BD é mantido.

passo 1

  • criar o layout no ireport e fazer a conexao com o banco de dados e definir as colunas do relatorio, enfim definir a estrutura do relatorio

passo 2

  • criar a classe de conexao com banco de dados – Hibernate
  • Criar o bean

passo 3

  • cria um package exclusivo para o relatorio e uma classe, por questao de organizacao importar o jrxml para o projeto e para o package do relatorio por medida de seguranca

passo 4

  • para que o arquivo seja gerado na pagina WEB, eh preciso mudar algumas coisas no metodo responsavel por gerar o relatorio:

FacesContext context = FacesContext.getCurrentInstance();

HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();

ServletOutputStream responseStream = response.getOutputStream();

InputStream caminho = getClass().getResourceAsStream(“../relatorio/reportblog.jrxml”);

response.setContentType(“application/pdf”);

  1. criar um context e objetos de resposta.

  2. Fazemos um stream do caminho onde esta o jrxml. Quando temos dois pontos antes da barra significa que temosum caminho diferente da classe que gera o relatorio

  3. depois um response que informa o tipo do conteudo para o browser saber qual aplicativo chamar caso ele tenha suporte response.setContentType(“application/pdf”);

Na linha a seguir informamos como sera o nome do arquivo a ser gerado

response.setHeader(“Content-Disposition”,”attachment; filename=\”relatorio.pdf\””);

Abaixo temos o padrao para invocao

JasperReport pathReport = JasperCompileManager.compileReport(caminho);

//relatorio gerado

JasperPrint preencher = JasperFillManager.fillReport(pathReport, null,new JRBeanCollectionDataSource(listaUS));

JasperExportManager.exportReportToPdfStream(preencher,responseStream);

responseStream.flush();

responseStream.close();

context.renderResponse();

context.responseComplete();

O resultado

O resultado eh que ao inves de ter um arquivo que é direcionado para um local, ele aparece no browser (firefox, Chrome, IE) do usuario. E o browser decide como vai apresentar esse arquivo. Por exemplo, no FireFox, ele aprende o arquivo no proprio Browser, no Internet Explorer ele abre uma Janela onde o usuario decide se vai abrir ou fazer o download.

JasperViewer

O JasperViewer eh forma de exibir o relatorio em applet, ao inves de usar o browser, pode ser ate mais amigavel que usar o proprio browser, mas deve ser analizado o tempo de carregado disso em producao, basta adiciona a linha abaixo

JasperViewer.viewReport(preencher, false);

E desabilitar as linhas referente ao browser, para que nao seja executada em paralelo

response.setContentType(“application/pdf”);

response.setHeader(“Content-Disposition”,”attachment; filename=\”relatorio.pdf\””);

Vou ficando por aqui, espero que tenham gostado do post.

Abracos, see ya! Have a nice week, guys!




Oportunidade na Accenture – Java

Olá Pessoal,

Recebi o contato abaixo através do blog do pessoal da Accenture com as vagas  a seguir É importante mencionar no titulo do email onde viu a vaga, eu recomendo que seja assim:

Assunto: Vaga Java Senior  – blog Camilo Lopes

Gostaria de saber se é possível divulgar vagas CLT.

Obrigada!

Segue descrição das vagas (19)

A Accenture é uma empresa líder global em consultoria de gestão, serviços de tecnologia e outsourcing. Em seu quadro de funcionários, conta com mais de 180 mil profissionais, com presença em 120 países, que atendem empresas de quase todos os segmentos da economia. Apontada como “A Melhor Empresa do País em Liderança” e pelo quarto ano consecutivo como “Uma das Melhores Empresas para se Trabalhar” (Guia Exame-Você/SA 2009),  a Accenture está oferecendo oportunidades para profissionais que queiram atuar como Programador Java Senior.

É necessário ter superior completo, sólidos conhecimentos em Java e conhecimento de frameworks e tecnologias relacionadas a Java.

A base de contratação pode ser Alphaville ou São Paulo, portanto é necessário ter disponibilidade para deslocar-se até esta região.

Caso tenha interesse de conhecer nossas propostas, por gentileza encaminhar seu currículo para leticia.f.seehagen@accenture.com informando a pretensão salarial e como ficou sabendo da oportunidade.

========================================

Boa sorte à todos!




Usando Rendered JSF

olá Pessoal,

Sempre tive dúvidas como ter em um único form do JSF, duas ou mais opções com base em uma condicao XYZ, algo como: o botão alterar/cadastrar só vão aparecer com base na requisição do usuário/cliente. Há varias formas de fazer isso. Mas, em um belo dia, estou navegando na documentação do JSF, e do nada vejo algo interessante sobre o assunto e resolvi testar e deu certo.

Então hoje vou mostrar como não ter dois formulários cadastrar.jsp e alterar.jsp. Será um único formulário (formulario.jsp) e com base no que for solicitado, ele terá um botão cadastrar ou alterar visivel para o usuario.

Lets go…

Starting…

Primeiramente estarei limitando o post à JSF, então configuração de conexão com banco de dados, e outros tópicos relacionado não farão parte. Vou levar em consideração que você tem sua app rodando e quer usar este recurso. Aqui temos o Hibernate como nosso frameworks de persistência.

A seguir tem o projeto que criei para como teste:

A seguir temos o meu face-config.xml

Development

Vamos colocar mão na massa e fazer as devidas configurações.

Passo 1

Alterar as classes de persistência, é o primeiro ponto. Então adicione o método responsável por alterar como o nosso:

public void atualizar(TUsuario tusuario){

begin();

getSession().merge(tusuario);

try{

commit();

}catch (HibernateException e) {

rollback();

}}

O método begin() vem de uma classe generica DAO, minha. Veja:

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import org.hibernate.cfg.AnnotationConfiguration;

public class DAO {

private static final ThreadLocal<Session> threadlocal = new ThreadLocal<Session>();

private static final SessionFactory sessionfactory = new AnnotationConfiguration()

.configure().buildSessionFactory();

public static Session getSession() {

Session session = (Session) threadlocal.get();

if (session == null) {

session = sessionfactory.openSession();

threadlocal.set(session);

}

return session;

}

public void begin() {

getSession().beginTransaction();

}

public void commit() {

getSession().getTransaction().commit();

}

public void rollback() {

getSession().getTransaction().rollback();

}

public void close() {

getSession().clear();

threadlocal.set(null);

}

Passo 2

Levando em conta que você vai editar o usuário a partir de uma tabela onde exibi todos os usuarios, então você vai precisar inserir na classe de persistencia o seguinte método:

public List listaUsuarios(){

Query query = getSession().createQuery(“from TUsuario tu order by tu.nome asc”);

List<TUsuario> lista = query.list();

return lista;

}

Passo 3

Feito isso va para a classe controladora, aquela de comunicação com o JSF, e insira o seguinte método

public TUsuario getEditorDelete(){

TUsuario tus = (TUsuario) model.getRowData();

return tus;

}

Agora já sabemos, qual linha será editada, observe o que os métodos a seguir fazem:

public String editar(){

TUsuario tu = getEditorDelete();

setTusuario(tu);

return “editarus”;

}

public String editado(){

TUsuarioDAO tusdao = new TUsuarioDAO();

tusdao.atualizar(tusuario);

return “editadous”;

}

O primeiro dele é chamado quando clicamos no link editar, daí ele vai para o formulario.jsp e o segundo método editado() é quando clica no botão submit para fazer a persistencia e alterar o valor daquele objeto.

Passo 4

Agora vamos alterar.jsp nossa pagina formulario.jsp para exibir o botão correto com base na requisição do usuário.

No seu formulário os botões submit deixando desse modo:

<input jsfc=“h:commandButton”

rendered=“#{tUsuarioControler.tusuario.nome==null}” id=“bsalvar”

type=“submit” value=“Salvar” action=“#{tUsuarioControler.salvarUS}” />

<input jsfc=“h:commandButton”

rendered=“#{tUsuarioControler.tusuario.nome!=null}” id=“balterar”

type=“submit” value=“Alterar” action=“#{tUsuarioControler.editado}” />

Conclusão

Observe que apenas adicionamos um atributo que é o rendered onde tem o teste, caso seja null é porque será um novo usuário, porem se for diferente é porque será alterado, nessa condição apenas um dos botões serão exibidos. Vejam uns testes que fiz, ao executar minha aplicação:

Vou ficando por aqui, espero que o post tenha sido útil.Preparei este post tem um tempinho já porém, só agora conseguir publicar, pois a lista é grande :).

see you next post!!!