Slideshare.net (beta)

 
Post: 
Myspace Hi5 Friendster Xanga LiveJournal Facebook Blogger Tagged Typepad Freewebs BlackPlanet gigya icons

All comments

Add a comment on Slide 1

If you have a SlideShare account, login to comment; else you can comment as a guest


Showing 1-50 of 0 (more)

XDoclet

From gscheibel, 4 months ago

206 views  |  0 comments  |  0 favorites  |  2 downloads
 
 
 

Groups / Events

 

 
Embed
options

More Info

This slideshow is Public
Total Views: 206
on Slideshare: 206
from embeds: 0

Slideshow transcript

Slide 1: XDoclet Glaucio Scheibel

Slide 2: Agenda • Por quê? • O que é XDoclet? • Outros usos • Demonstração • Criação de módulos • Futuro...

Slide 3: Por quê? Qual é o problema que se quer resolver?

Slide 4: Vamos escrever uma Calculadora em SessionBean :-) public class CalculadoraBean implements SessionBean { public int soma(int n1, int n2) { return n1 + n2; } public int subtrai(int n1, int n2) { return n1 - n2; } public void ejbCreate() throws CreateException {} public void setSessionContext(SessionContext ctx) throws EJBException, RemoteException {} public void ejbRemove() throws EJBException, RemoteException {} public void ejbActivate() throws EJBException, RemoteException {} public void ejbPassivate() throws EJBException, RemoteException {} }

Slide 5: Vamos escrever uma Calculadora em SessionBean :-o • Pela especificação J2EE 1.4, precisamos também de: – 4 Interfaces por EJB (2 locais e 2 remotas): • Home • LocalHome • Remote • Local – 1 Descritor por Aplicação: • Deployment Descriptor (ejb-jar.xml) • Ok, só mais 5 arquivos

Slide 6: Vamos escrever uma Calculadora em SessionBean :-o public interface CalculadoraHome extends EJBHome { public Calculadora create() throws CreateException, RemoteException; } public interface CalculadoraLocalHome extends EJBLocalHome { public CalculadoraLocal create() throws CreateException; } public interface Calculadora extends EJBObject { public int soma(int n1,int n2) throws RemoteException; public int subtrai(int n1,int n2) throws RemoteException; } public interface CalculadoraLocal extends EJBLocalObject { public int soma(int n1,int n2); public int subtrai(int n1,int n2); }

Slide 7: Vamos escrever uma Calculadora em SessionBean :-[ <?xml version="1.0" encoding="UTF-8"?> <ejb-jar xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd" version="2.1"> <enterprise-beans> <session> <ejb-name>Calculadora</ejb-name> <home>CalculadoraHome</home> <remote>Calculadora</remote> <local-home>CalculadoraLocalHome</local-home> <local>CalculadoraLocal</local> <ejb-class>CalculadoraBean</ejb-class> <session-type>Stateless</session-type> <transaction-type>Container</transaction-type> </session> </enterprise-beans> </ejb-jar>

Slide 8: Vamos escrever uma Calculadora em SessionBean :-[ • Foi definido que o componente Calculadora irá executar nos seguintes servidores de aplicação: – JBoss AS – IBM Websphere – BEA Weblogic – Sun ONE – Adobe JRun – Oracle OC4J – Pramati • Cada servidor de aplicação possui um descritor xml extra para a aplicação, isso aumenta em no mínimo mais 7 arquivos ao total de componentes.

Slide 9: Vamos escrever uma Calculadora em SessionBean +-( • JBoss AS – jboss.xml • IBM Websphere – ibm-ejb-jar-bnd.xmi – ibm-ejb-jar-ext.xmi • BEA Weblogic – weblogic-ejb-jar.xml • Sun ONE – sun-ejb-jar.xml • Adobe JRun – jrun-ejb-jar.xml • Oracle OC4J – orion-ejb-jar.xml • Pramati – pramati-j2ee-server.xml

Slide 10: Conclusão • 1 Session Bean com a logica de negócio com 17 linhas passou para: • 15 arquivos com mais ou menos 400 linhas entre fontes e xmls, lembrando que não foi incluido webservices e bean de entidade com CMP e CMR. • E quem poderá nos ajudar????

Slide 12: XDoclet O que é o XDoclet

Slide 13: O que é o XDoclet • Javadoc metadata templating engine • Motor de geração de código • Programação orientada a atributos • Anotações / Metadata • Tags estilo “JavaDoc” • Iniciou no projeto EJBDoclet • Pode gerar em torno de 85% do código

Slide 14: Vantagens • Escreva apenas um fonte Java para cada componente. • Ganhe tempo deixando o XDoclet gerar o código redundante. • Extensível – crie seu módulos customizados. • J2EE fica fácil :-) • Suporte aos servidores de aplicação líderes do mercado.

Slide 15: Arquitetura do XDoclet • Construído sobre o XJavaDoc • Separado em módulos • Templates embutidos • Tasks Ant com subtasks dinamicamente carregadas • Tag handlers

Slide 16: XJavaDoc • Parser de código fonte baseado no JavaCC • Cria modelos de: – Pacotes – Hierarquia de classes – Métodos e parâmetros – Atributos – Construtores – Custom @tags – Comentários JavaDoc

Slide 17: Programação Orientada à Atributos • Também conhecido como Meta-Programação • Princípio DRY! (Don't Repeat Yourself!) – Filosofia sobre duplicação da informação • Programe o domínio do problema • Escreva código que escreve código • Dê significado ao seu código

Slide 18: XDoclet não é só EJB • Servlets • Mapeamento Hibernate • JDO (Java Data Objects) • Tapestry • Struts • Axis • Spring Framework • Portlets

Slide 19: De volta a Calculadora – XDoclet Edition :-)) /** * @ejb.bean name="Calculadora" jndi-name="ejb/Calculadora" */ public class CalculadoraBean implements SessionBean { /** * @ejb.interface-method */ public int soma(int n1, int n2) { return n1 + n2; } /** * @ejb.interface-method */ public int subtrai(int n1, int n2) { return n1 - n2; } (Omitido os métodos obrigadorios ejb*) }

Slide 20: Trabalho de formiga • Definição da task Ant: <taskdef name="ejbdoclet" classname="xdoclet.modules.ejb.EjbDocletTask"/> • Chamada ao ejbdoclet: <ejbdoclet destdir="srcEJB" ejbspec="2.1" force="true"> <remoteinterface/> <localinterface/> <homeinterface/> <localhomeinterface/> <deploymentdescriptor destdir="META-INF" /> <jboss version="4.0" destdir="META-INF"/> <jrun destdir="META-INF"/> Subtasks <oc4j destdir="META-INF"/> <sunone destdir="META-INF"/> <pramati destdir="META-INF"/> <weblogic destdir="META-INF"/> <websphere destdir="META-INF"/> </ejbdoclet>

Slide 21: Merge-Points • Um Merge Point é um ponto de entrada no arquivos gerados pelo XDoclet. • Exemplo: – Existem session beans que não foram gerados pelo XDoclet, mas devem estar citados no deployment descriptor. – Para isto cria-se um arquivo chamado session-beans.xml com as entradas <session></session> no diretório de merge que o XDoclet irá incluí-los.

Slide 22: Chega de papo Demo

Slide 23: Módulos Customizados Construção de Módulos

Slide 24: Criando nosso Módulo • Templates XDT – XML com o template do código a ser gerado. • Classes TagsHandler – Tem os seus métodos executados a cada tag localizada no código fonte. – Necessário caso criar suas próprias Tags. • Classes SubTask – Task executada pelo Ant.

Slide 25: Template exemplo <XDtEjbSession:forAllSessionBeans> <session> <ejb-name><XDtEjb:ejbName/></ejb-name> <XDtEjb:ifRemoteEjb> <jndi-name><XDtEjbHome:jndiName type="remote"/></jndi-name> </XDtEjb:ifRemoteEjb> <XDtEjb:ifLocalEjb> <local-jndi-name><XDtEjbHome:jndiName type="local"/></local-jndi-name> </XDtEjb:ifLocalEjb> </session> </XDtEjbSession:forAllSessionBeans>

Slide 26: Bola de Cristal E no futuro?

Slide 27: E o futuro? XDoclet2 • Todo o projeto foi reescrito. • Não depende mais do Ant. Utiliza plugins do maven por default. • Arquitetura: – Generama • PicoContainer: mecanismo de plugin's • Velocity: templates • Jelly: templates – QDox: metadata • Plugin's prontos: – Hibernate – Portlet – WebWork

Slide 28: Links • XDoclet – http://xdoclet.sourceforge.net • XDoclet2 – http://xdoclet.codehaus.org • Ant – http://ant.apache.org • XDoclet in Action (livro) – http://www.manning.com/books/walls • Princípio DRY – http://www.artima.com/intv/dry.html

Slide 29: Auxiliaram na montagem dessa palestra: • Rodrigo Bernardi • Charles Pereira

Slide 30: Obrigado!