Rafael Carneiro

…disseminando informações

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. :)

Clique aqui para fazer o download, pregue na sua baia e lembre-se de não criar BOLOVO!

Tags: , , , ,

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/

Tags: , , , , , , ,

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.

Tags: , , , , , ,

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:

You need to a flashplayer enabled browser to view this YouTube video

Tags: , ,

Blog de cara nova

Acabou a minha angústia de ficar procurando um tema para o meu blog. :) Mudança

Procurei durante um bom tempo um tema que me agradasse e que também tivesse um bom suporte a widget, ou seja, que não quebrasse o que já tinha.

Esse tema não é dos mais bonitos, mas me agradou muito, por ser simples e ter um visual bem limpo.

Espero que eu posso blogar mais com esse novo tema!

Tags:

Café com Tapioca de maio - 2008

No dia 17 de maio (sábado), acontecerá na FLF (Faculdade Lourenço Filho) o próximo Café com Tapioca.

Desta vez teremos mais três palestras, são elas:

  • Desmistificando o JavaME - Vando Batista
  • Entendendo Domain Driven Design - Rafael Ponte
  • Integração Contínua com CruiseControl: qualidade e agilidade em projetos Java - Luthiano Vasconcelos

Obtenha mais informações na página do evento, faça sua inscrição na página do JugEvents, não esqueça de levar um quilo de alimento não perecível e compareça na confraternização que ocorrerá após o evento.

CEJUG e você, fazendo a comunidade Java cearense crescer!

Tags: , , , , ,

Chamada para projetos open source

Participar de algum projeto open source é a melhor maneira de aprender novas tecnologias e ganhar experiência para a vida profissional. Mas, você sabe o que é um projeto open source? Open Source

Atualmente estou participando do desenvolvimento do CEJUG-Classifieds, um projeto open source que tem como objetivo retirar anúncios que não tem nada a ver com o conteúdo da lista de discussão do JUG, que é sobre Java.

Mas o que eu ganho com isso? Nada.

Pelo contrário, eu gasto tempo e energia elétrica. Mas você sabia que dá para ganhar dinheiro?

Posso enumerar vários motivos que me levam a participar de projetos open source, dois desses eu citei acima, mas vamos enumerar mais alguns:

  1. experiência
  2. ajudar a comunidade
  3. aprender inglês
  4. trabalho em equipe
  5. aprender novas tecnologias

Participo de diversas listas de discussão sobre Java do Brasil e do mundo e vejo a quantidade exorbitante de anúncios de todos os tipos, como: venda de livros e vouchers, cursos, revistas, aparelhos eletrônicos, computadores, etc.

Dentre as listas de discussão que participo, a lista do PBJUG é uma das que me chama mais atenção. São vários e-mails diários e membros competentes sanando as dúvidas.  Recentemente um membro enviou um e-mail anunciando a venda de um aparelho eletrônico, e o Rodrigo Rebouças perguntou se alguém queria implementar um sistema de classifidados. Bem, o CEJUG-Classifieds é open source e pode ser facilmente utilizado por outros JUGs.

Portanto, faço uma chamada para quem quiser participar desse projeto.

Tags: , , , , , , , ,

Material do Café com Tapioca de abril

No último sábado (12/04/08), palestrei juntamente com o Tarso Bessa sobre o tema Os melhores do mundo: um comparativo entre Spring e EJB 3.0.

O intuito foi mostrar como fizemos as features de uma aplicação JavaEE utilizando as duas tecnologias, como: injeção de dependência, segurança, serviços de mensagens, web services, etc. Palestramos no evento técnico do CEJUG, Café com Tapioca, na FANOR.

Esse tipo de palestra (em par) enriquece o conteúdo da apresentação e faz com que chame bastante a atenção do público, por ser algo diferente. Paulo Silveira e Phillip Calçado fizeram uma palestra semelhante no JustJava do ano passado.

Apresentação

Exemplos

Spring | EJB 3.0

Tags: , , , , , , ,

Café com Tapioca de abril

No dia 12 de abril (sábado), acontecerá na FANOR o próximo Café com Tapioca.


Desta vez teremos mais três palestras, são elas:

  • OpenSocial: construa sua rede social - Christiano Milfont
  • Conhecendo o Spring - Igo Coelho
  • Os melhores do mundo: comparativo entre Spring e EJB 3.0 - Tarso Bessa e eu :)

Obtenha mais informações na página do evento, faça sua inscrição na página do JugEvents, não esqueça de levar um quilo de alimento não perecível e compareça a confraternização que ocorrerá após o evento.

CEJUG e você, fazendo a comunidade Java cearense crescer!

Tags: , , , ,

Por que este Portal é feito em PHP e não em Java?

Hoje eu estava lendo as notícias que os membros do PortalJava enviam e, dentre elas, vi a notícia abaixo:

Não seria uma incoerência o PORTALJAVA.COM desprezar o JSP em prol do PHP. Minha intenção não é desprezar uma tecnologia em detrimento de outra. Ao contrário, tenho apenas o intento de sugerir a possibilidade de implementar este portal através da tecnologia JAVA, isto é, através da tecnologia trabalhada e divulgada neste espaço. Gosto muito deste portal, reconheço a qualidade do conteúdo e competência da equipe, mas porque não JSP?… Porque não buscar mais coerência, sobretudo, entre o que se fala e o que se faz?

Estou colocando sem a permissão do autor, porém ao enviar essa mensagem ele não colocou o seu nome ou e-mail, então não tive como contactá-lo.

Já ouvi isso em diversos lugares, tais como: fórum, faculdades, empresas, eventos e até em momentos que não tem nada a ver com Java.

Por que o PortalJava é em PHP? Pelo simples motivo de tempo, pois na época os colaboradores não tinham tempo para construir o site do portal em Java, então optaram pelo PHP-Nuke, que já tinha tudo pronto, inclusive o fórum.

Foram vários tópicos criados, muitas discussões sobre esse assunto, até que este ano, conseguimos migrar o fórum para o JForum, que é feito em Java.

O próximo passo será migrar o site para Java, e para isso estamos concluindo o JNuke, que é um CMS criado pelo fundador do PortalJava, Franklin Samir.

Se você quiser aprender Java, aprender os melhores frameworks do mercado e ainda por cima gostar de participar de projetos open souce, não fique de fora do JNuke.

Termino este post pedindo um pouco de paciência para os amantes do PortalJava que não suportam ver a extensão .php no final das páginas do site, em breve isso terá fim.

Tags: , , , , ,