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!
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: cafécomtapioca, cejug, DDD, funny, phillip calçadoSé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: aop, eclipse, ejb3.0, especificação, interceptors, jboss, separation of concerns, springFalando 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
administrarem 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: ajax, caelum, cejug, guj, hibernate, java, open sourceDuke 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:
Tags: duke, java, jazoonBlog de cara nova
Acabou a minha angústia de ficar procurando um tema para o meu blog.
![]()
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: blogCafé 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: cafécomtapioca, cejug, CruiseControl, DDD, javame, socialChamada 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? ![]()
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:
- experiência
- ajudar a comunidade
- aprender inglês
- trabalho em equipe
- 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: cejug, cejug-classifieds, comunidades, java, jsf, jugs, open source, pbjug, web servicesMaterial 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
Tags: caelum, cafécomtapioca, cejug, DI, ejb3.0, fragmental, java, springCafé 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: cafécomtapioca, cejug, ejb3, opensocial, springPor 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: comunidade, java, jnuke, jsp, php, portaljava
