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!



Add a comment on Slide 1
If you have a SlideShare account, login to comment; else you can comment as a guest- Favorites & Groups
Showing 1-50 of 0 (more)