Monthly Archives: May 2008

Palestra Apresentando o CEJUG

Hoje ministrei a palestra Apresentando o CEJUG na Faculdade Integrada do Ceará para um público de 70 pessoas, na semana de informática da instituição. Na próxima sexta-feira, estarei apresentando o grupo para a FATENE na sua I Semana de Informática. A idéia é que todas as instituições do Estado recorram ao CEJUG quando houver algum evento, como semana de informática, por exemplo.

O nosso intuito é aproximar e incentivar os universitários para o mundo Java, apresentando os programas, eventos, vídeos e fotos do CEJUG. Um Java Users Group é a melhor maneira de fazer essa aproximação, facilitando a vida de iniciantes no Java, fornecendo todo o ferramental e apoio para um início menos dificultoso.

O público delirou quando mostrei esse vídeo do SunSPOT e também a Retrospectiva CEJUG 2007.

[slideshare 436127 apresentandocejug-1212104288827710-9]

Juazeiro do Norte x 2

padre.jpgNo próximo sábado, dia 31, estarei em Juazeiro do Norte com mais três integrantes do CEJUG para participar do 1º Juazeiro do Norte JavaDay que acontecerá na FJN. Silveira Neto, um dos palestrantes, postou sobre o evento. Você poderá ver a grade completa do evento no blog do Silveira e também no site do CEJUG.

Essa já é a segunda vez (veja a primeira vez) que estarei palestrando na cidade e desta vez terei mais tempo para conhecer melhor os pontos turísticos da cidade.

Tarso Bessa e Rafael Ponte serão os outros dois palestrantes.  Veja as fotos do evento passado.

CEJUG Lets go!

Finalmente: PortalJava em Java e de cara nova!

Primeiro foi a migração do fórum para o JForum em fevereiro e agora dois presentes no mês de maio: PortalJava rodando em Java e totalmente de cara nova! 🙂

Como já foi comentado antes nesse blog, a partir de hoje não irei escutar piadas do tipo: “Um site sobre Java rodando em PHP (risadinhas irônicas aqui)?”.

Veja o que há de novo:

portaljava-de-cara-nova.jpg

portaljava-em-java.jpg

Frameworks: agindo com bom senso

Um pouco de conversa

Sempre que posso, acesso o fórum do Javaranch para ver as novidades e assuntos interessantes do mundo Java. No feriado de ontem estava eu navegando nesse fórum quando achei um tópico de título “When to use JSF or Struts“. Título este bem chamativo, por conta das diversas discussões e comparativos sobre esses frameworks na comunidade Java do mundo inteiro.

Nesse post, o autor pergunta qual a diferença entre os dois. A diferença é simples: a quantidade de artefatos criados e a complexidade de sua utilização. JSF é bem simples e com algumas configurações e artefatos criados já está apto para ser utilizado no seu sistema. Eu não sou xiita e não estou dizendo que JSF é melhor do que Struts ou qualquer outro framework, não estou afirmando que ele é a bala de prata. E não é.

Gostei muito de uma resposta desse post e ainda bem que ela foi logo a primeira resposta, evitando que outras respostas mudassem os pensamentos e opiniões dos leitores. Nessa resposta, o autor enfatiza: “How to choose? For me, I’ll choose a framework that team members familiar with“. Essa resposta foi bem coerente, pois se sua equipe possui experiência e produtividade com o framework X, não quer dizer que se adotar o framework Y aumentará a produtividade da equipe, pelo contrário, pode acontecer o inverso, já presenciei casos desse tipo.

É comum ver em fóruns, listas de discussão e até mesmo no dia-a-dia, profissionais discutindo com seus companheiros de trabalho, alegando que o Struts (versões 1.x) é obsoleto e está ultrapassado. Isso não é mentira, é fato. Porém o que não concordo é esse xiitismo e essa generalização em volta desse assunto. Você já trabalhou com Struts, já ganhou muito dinheiro com ele, eu também. O framework Struts foi por muito tempo o framework padrão de mercado, exigido por quase todas as empresas como requisito fundamental no currículo. Acredito que apenas uma fatia dos novos desenvolvedores que iniciaram a pouco tempo não tiveram a chance de trabalhar com ele. Mas este dia chegará, pois muito em breve esses teenagers irão prestar consultoria em sistemas que foram feitos com esse framework.

Por que o Struts está obsoleto?

É muito simples de explicar. Veja a imagem abaixo e tente comparar com qualquer outro framework da moda.

Arquitetura orientada a BOLOVO

Essa arquitetura é completamente orientada a BOLOVO. Note que é necessário a criação de vários artefados para a criação de um simples caso de uso.

Artefatos necessários:

  1. configuração do Servlet Front Controller do Struts no deployment descriptor (web.xml)
  2. criação de um XML denominado struts-config.xml
  3. criação de uma classe Java que estende a classe ActionForm (Struts)
  4. criação de uma classe Java que estende a classe Action (Struts)
  5. configuração do ActionForm no struts-config.xml
  6. configuração da Action no struts-config.xml
  7. se você for utilizar validação (que é necessária em todo sistema que se preze), é necessário a criação de outros artefados, como por exemplo um arquivo de propriedades.

Isso não acontece com frameworks da moda, nos quais são orientados a POJO. Por exemplo, o JSF necessita apenas da criação de uma classe POJO, configuração do Servlet no deployment descriptor e da criação de um XML chamado faces-config.xml. Três artefatos criados, eu disse apenas três artefatos criados.

Portanto, a sua utilização poderá acarretar em futuros problemas, como inúmeras refatorações. Também existe uma má utilização dos princípios da Orientação a Objetos e péssimas práticas de desenvolvimento de software, nos quais posso citar algumas: alto acoplamento, alta manutenabilidade e complexidade.

E agora, o que utilizar?

Muita calma nesta hora. Como mencionei acima, não sou xiita (a-rá, gosto de EJB e irei utilizá-lo em todos os meus projetos, até um hello world numa simples JSP, criarei diversos artefatos, farei várias configurações e utilizarei um servidor de aplicações parrudo). Ratificando: o intuito deste post não é mostrar que o framework X é melhor do que o framework Y.

Java está se tornando uma plataforma difícil de se dominar, por ser bastante abrangente e surgir novas funcionalidades todos os dias. Sem falar de frameworks, que todo dia nasce um no quarto de um desenvolvedor que está com seu ócio criativo em alta. Mas alguns frameworks estão me chamando bastante atenção, por serem produtivos, robustos e simples. São eles: JSF, VRaptor e Spring.

Lembrando mais uma vez: nenhum framework é a bala de prata!

frameworks-cadeia.jpg

Outros frameworks que estão chamando atenção da comunidade: Apache Wicket e Waffle. Implementações: Jersey e Metro.

Sobre frameworks caseiros

Se você acessar os maiores fórums brasileiros de Java como GUJ e PortalJava, verá inúmeras discussões sobre as vantagens e desvantagens de frameworks caseiros. Particularmente eu vejo muitas desvantagens, pois já passei por uma experiência que não me agradou muito. Há uma discussão no GUJ sobre esse assunto, ela é datada de 2005, que me chamou bastante atenção. Se em 2005 alguns dos membros mais ativos da comunida Java já falaram das desvantagens de construir tal geringonça, por que após três anos isso ainda continua?

Frameworks caseiros não são arquiteturas de referência, não são padronizados, não possuem uma comunidade em volta para dar apoio e não são padrões da insdústria de software. Construir frameworks caseiros com o dinheiro público é o pior caso de todos.

Nesse post do GUJ, Carlos Villela comentou:

Desenvolver um framework ANTES de desenvolver uma aplicacao nao da certo: ou voce acaba com a aplicacao tendo que fazer gambiarras em cima do framework, ou a aplicacao nao sai ate mudarem o framework. Eh melhor fazer uma aplicacao primeiro, refatorar ela e tirar os pedacos genericos e transformar num framework do que tentar advinhar o que eh generico e o que nao eh. Alias, risque a palavra advinhar do dicionario.

Ele adivinhou o que poderia acontecer utilizando essa abordagem e eu tive a péssima experiência de passar por isso.

Não sendo xiita, afirmo que cada caso é um caso. Está certo que em determinados projetos é necessário construir um determinado número de classes que executam processos comuns entre sistemas. Mas é para ser feito só o básico e o necessário, nada mais além do que isso, porque senão irá virar um framework!

Referências

Vídeo promocional do PUJ

Hildeberto Mendonça, coordenador do CEJUG, criou um vídeo promocional do PUJ (Prêmio Universitário Java). O PUJ foi criado pelo Felipe Gaúcho (também coordenador do CEJUG) e é um campeonato de trabalhos universitários para alunos que estão devidamente matriculados e que residem no Estado do Ceará.

Veja o vídeo:

[youtube:http://www.youtube.com/watch?v=ZPEDaRj8lzE]

Comentários do Café com Tapioca de maio

Comentários

Ocorreu no último sábado (17/05/08) na FLF o Café com Tapioca com as palestras Entendendo Domain Driven Design, Desmistificando JavaME e Integração Contínua com CruiseControl: qualidade e agilidade em projetos Java, ministrada pelo Rafael Ponte, Vando Batista e Luthiano Vasconcelos, respectivamente. O evento contou com a participação de 70 pessoas.

Os palestrantes transmitiram com objetividade e proficiência, atingindo a expectativa do público. Gostaria de parabenizar a performance de Luthiano Vasconcelos, que iniciou a sua apresentação sem o material estar disponível (por conta de problemas técnicos nos aparelhos da instituição). Luthiano falou por cerca de vinte e cinco minutos sem o auxílio de slides, abordando claramente o conteúdo de sua apresentação para os participantes.

Foi criado neste evento o movimento Shoes is watching, uma brincadeira criada para a palestra do Rafael Ponte. Como foi prometido na lista, os primeiros vinte participantes ganharam uma impressão do movimento.

Nos sorteios, os participantes ganharam livros (JavaME e CruiseControl), assinaturas de revistas (Java Magazine, SQL Magazine e WebMobile) e chícaras da Argohost. Após o evento, alguns membros foram para a confraternização no Parque Recreio.

Como no evento passado, o membro Rafael Tabosa falou um pouco sobre os principais programas do CEJUG, eventos internacionais e sobre o Café com Tapioca. A cada evento cresce o apoio dos membros nos eventos.

O evento foi transmitido ao vivo para todo o mundo, com o apoio da Argohost e da TV Software Livre. Em alguns dias o vídeo completo do evento estará disponível para download.

Material

Página do evento

Fotos

Vídeos

[youtube:http://www.youtube.com/watch?v=bz63hZglnrs]

[youtube:http://www.youtube.com/watch?v=OcclgxqOIus]

[youtube:http://www.youtube.com/watch?v=lE1JDCGR_O8]

[youtube:http://www.youtube.com/watch?v=c2RS5F44llc]

[youtube:http://www.youtube.com/watch?v=v1VREWo2p9s]

[youtube:http://www.youtube.com/watch?v=aE8toxHnpws]

Alimentos arrecadados

Os alimentos doados pelos participantes deste mês e do mês de março serão entregues para instituições de caridade.

Próximo Café com Tapioca

Em junho ocorrerá o próximo Café com Tapioca que será ministrado por Augusto Pedroza, Marcelo Carvalheiro e Alan Fagot. Os temas das palestras serão incluídas em breve na página do evento.

Dúvidas, críticas e sugestões

cafecomtapioca@cejug.org

Que Dijkstra que nada… Shoes is Watching!

Criei uma brincadeira para o Café com Tapioca deste mês, no qual uma das palestras será sobre Domain Driven Design. Guilherme Chapiewski postou no seu blog sobre o movimento Dijkstra is Watching, desta vez foi criado o Shoes is watching!

shoesiswatching.jpg

Christiano Milfont também postou sobre o movimento. 🙂

Rafael Ponte (foto), palestrante no Café com Tapioca de amanhã sobre Domain Driven Design, escreveu um post no seu blog também.
Clique aqui para fazer o download, pregue na sua baia e lembre-se de não criar BOLOVO!

Série EJB 3.0: Interceptors

Introdução

Uma das novidades da versão 3.0 do EJB são os Interceptors, uma maneira ainda rudimentar de utilizar AOP (Aspect Oriented Programming) em aplicações que utilizam EJB, o inverso do que ocorre com aplicações que utilizam o Spring (falarei sobre isso em outro post). AOP é um paradigma chamado de separation of concerns, que tem como característica quebrar o programa em diversas partes para interferir em seu processamento.

Segundo a especificação, um Interceptor é uma classe POJO (Plain Old Java Object) que não precisa ser anotada ou configurada como um session bean (utilizando as anotações @Stateless ou @Statefull). Ela deve conter um método método público anotado com @AroundInvoke, que retorna um Object, possuir o objeto InvocationContext como parâmetro e lançar a exceção Exception. Ela pode obter recursos do ENC (Enterprise Naming Context) JNDI, como injeção de dependências através da anotação @EJB, recursos através da anotação @Resource e o objeto EntityManager, através da anotação @PersistenceContext.

O objeto InvocationContext contém métodos que retornam a instância do objeto interceptado, bem como seus parâmetros e também um objeto Method que retorna o método que foi interceptado. A lógica de sua utilização gira em torno do método proceed desse objeto, pois quando ele é chamado o método interceptado será executado. Se no ciclo de processamento de um Interceptor um método tiver anotado com @AroundInvoke, o ciclo executará primeiro o Interceptor do método interceptado. Após isto o ciclo será executado normalmente.

Portanto, a lógica da utilização de Interceptors é gerar ou obter informações antes ou depois do método proceed ser chamado.

Para utilizar seus Interceptors em seus EJBs, basta utilizar a anotação @Interceptors(Class[] clazz). Essa anotação pode ser utilizada de duas formas: em métodos ou em classes. Se você utilizá-la em classes, todos os métodos dessa classe serão interceptados. Utilize a anotação @ExcludeClassInterceptors caso queira que seus métodos não sejam interceptados.

Caso não queira utilizar anotações, os Interceptors também podem ser configurados via arquivos XML. Registros (logs), segurança, auditoria e transações são exemplos mais comuns da utilização de Interceptors.

Criando a aplicação

Como IDE utilizei o Eclipse Europa (webtools) e o JBoss 4.2 como servidor de aplicação. No Eclipse, crie um projeto EJB Project (File – New – Project – EJB – EJB Project). Lembre-se de configurar o projeto com o JBoss 4.2, EJB 3.0 e Java 5.0 ou 6.0.

Para fazer o deploy do projeto basta clicar com o botão direito do mouse e escolha a opção Export – EJB JAR File. Feito isso, copie o arquivo gerado (.jar) e coloque na pasta ${CLASSPATH_DO_SEU_JBOSS}/server/default/deploy do seu JBoss. Inicialize o servidor pelo Eclipse (configure-o na opção Servers) ou pelo prompt de commando executando o comando ${CLASSPATH_DO_SEU_JBOSS}/bin/run.bat.

Códigos

AuditPersonInterceptor

public class AuditPersonInterceptor {	/**

  * This method contains the logic for intercepting the flow.

  *

  * @param invocationContext

  * @return

  * @throws Exception

  */

 @AroundInvoke

 public Object auditPerson(InvocationContext invocationContext)

 		throws Exception {

System.out.println("Before method execute...");

Object proceed = invocationContext.proceed();

System.out.println("After method execute...");

return proceed;

 }

}

PersonService

@Remote

public interface PersonService {	/**

  * Insert an Person.

  */

 public void insertPerson();

}

PersonServiceBean

@Stateless

public class PersonServiceBean implements PersonService {	/*

  * (non-Javadoc)

  *

  * @see org.rafaelcarneiro.service.PersonService#insertPerson()

  */

 @Override

 @Interceptors(AuditPersonInterceptor.class)

 public void insertPerson() {

System.out.println("Inserting an Person...");

}

}

Client

public class Client {	/**

  * Method main that obtain the EJB from JNDI and insert an Person.

  *

  * @param args

  * @throws Exception

  */

 public static void main(String[] args) throws Exception {

Context context = new InitialContext();

PersonService personService = (PersonService) context

 			.lookup("PersonServiceBean/remote");

personService.insertPerson();

}

}

Comentários dos códigos

  • AuditPersonInterceptor: representa o nosso Interceptor;
  • PersonService: interface remota para o session bean;
  • PersonServiceBean: session bean do tipo Stateless (sem estado) que implementa a interface remota PersonService e contém o método a ser interceptado;
  • Client: classe que obtém e executa o session bean PersonServiceBean.

Executando

Ao executar a aplicação no JBoss, você verá as mensagens abaixo no console do JBoss:

INFO [STDOUT] Before method execute…
INFO [STDOUT] Inserting an Person…
INFO [STDOUT] After method execute…

Conclusão

EJB 3.0 veio para simplificar o desenvolvimento de softwares baseado em componentes, usando massivamente annotations e diminuindo a quantidade de arquivos e o trabalho com configurações. Interceptor é fácil de ser implementado, basta a utilização de algumas anotações. Como mencionei na introdução desse artigo, os Interceptors do EJB 3.0 ainda tem muito a desejar comparando com o uso de AOP com Spring. Mas quem sabe o JCP (Java Community Procces) e a Sun melhorem seus recursos.

No próximo artigo da Série EJB 3.0 iremos abordar os Web services.

Download do código fonte

Application LearningInterceptors

Referências

Wikipedia: http://en.wikipedia.org/

The Java Community Procces: http://jcp.org/

Falando em Java 2008

A tempos que acompanho o trabalho dos irmãos Silveira (Paulo e Guilherme). Ambos estão fazendo um excelente trabalho profissional mas também não esquecem da comunidade Java, onde sempre estão fazendo e participando de eventos, além de h1-logo.gifadministrarem o GUJ.

E a comunidade só tem a agradecer a eles. Este ano acontecerá a segunda edição do Falando em Java, evento técnico da Caelum, e um membro do CEJUG irá participar do evento. Renato Parente, desenvolvedor Java do NATI/UNIFOR, irá transmitir para o grupo de usuários java do Ceará as novidades do mundo Java, no Café com Tapioca de junho.

Obtenha mais informações nos blogs do Jeveaux e Edgar Silva.

Duke em: 24 horas

O Jazoon 08 está cada vez mais perto! O evento acontecerá no próximo mês, para ser mais preciso no dia 23 de junho.

Você pode ver um post no meu blog sobre esse evento e um vídeo promocional abaixo:

[youtube:http://www.youtube.com/watch?v=ajN5pBWjTMY]