SlideShare uma empresa Scribd logo
GlassFish e Maven:
                           Java EE sem dor



Bruno Borges
bruno.borges@oracle.com
   @brunoborges
Agenda


 GlassFish
    História
    Futuro
 Java EE
    Versão 6
    Futuro: Java EE 7
 Apache Maven
 Embedded GlassFish Maven Plugin
GlassFish - História

  Criado pela SUN em 2005
  2006 (v1), RI do JEE 5
      para desenvolvedores
  2007 (v2), adicionou Clustering e
    outras funções
      para enterprise
  2009, (v3) RI do JEE 6
      Nova arquitetura (OSGi, fast-
        startup, etc)
GlassFish - História

  V 3.1 – Fevereiro 2011
      Load Balancing
      Centralised Admin
  V 3.1.1 – Julho 2011
      Correção de bugs
  V 3.1.2 – Fevereiro 2012
      Correção de bugs
      Novo console administrativo
      Melhorias no Thread Pool
      Transaction Recovery
GlassFish - Futuro

  Versão 4.0 - Roadmap
     Java EE 7
     Suporte a virtualização
     PaaS oriented
Java EE 6


  Java EE 6 – JSR 316
     Profiles
     EJB 3.1
     JSF 2.0
     JSP 2.2
     Servlets 3.0
     JAX-RS
     JAX-WS 2.2
     JPA 2.0
     Java EE Connectors 1.6
Java EE 6


  As coisas boas do Java EE 6
     Não precisa mais de web.xml
     Melhora na API de Servlets para tratar FileUpload
     Validation (JSR 303) no JPA
     EJB do jeito que todo mundo queria
            Não precisa mais de um ejb-jar.xml
            Anotações
            @Singleton e @Startup beans
            @Schedule bean's methods
            Operações assíncronas
Do JEE6 para o JEE7
Java EE 7




            Java EE 7
Java EE 7


  EJB 3.2 – JSR 345
     Suporte a multi-tenancy
     Melhora no uso de anotações para simplificar o modelo de
       programação
     Alinhamento com outras especificações como CDI, JMS e
        BeanValidation
  Servlet 3.1 – JSR 340
     Suporte a WebSockets
  JPA 2.1 – JSR 338
     Introdução da interface StoredProcedureQuery
Java EE 7


  JSF 2.2 – JSR 344
     Mais fácil de criar componentes
     HTML5


  O mais esperado
     JMS – Java Messaging Service 2.0 – JSR 343
            Melhora no modelo de programação
            Integração com CDI
            Mudanças na API para permitir maior integração entre vendors de
              JMS com qualquer container JEE
Apache Maven
Apache Maven


  Ferramenta de build
     Convention over configuration
     Arquivos POMs
     Repositório de artefatos
     Plugins
  Perfeito para
     Integração Contínua
     Aceleração na ambientação de novos desenvolvedores
Apache Maven


  Principais Plugins para projetos Java EE 6
     WAR plugin
     EAR plugin
     GlassFish Embedded Plugin
     Dependency plugin
     Assembly plugin
     Groovy Maven Plugin
     Archetype Plugin
WAR plugin


  Cria um arquivo WAR de um projeto do tipo WAR
                                             |-- pom.xml
<project>
                                              `-- src
                                                   `-- main
  <groupId>com.myproject</groupId>
                                                       |-- java
  <artifactId>myproject</artifactId>
                                                       |    `-- com
  <packaging>war</packaging>
                                                       |        `-- example
  <version>1.0-SNAPSHOT</version>
                                                       |            `-- projects
                                                       |                `-- SampleAction.java
  <build>
                                                       |-- resources
    <plugins>
                                                       |    `-- images
      <plugin>
                                                       |        `-- sampleimage.jpg
       <groupId>org.apache.maven.plugins</groupId>
                                                       `-- webapp
        <artifactId>maven-war-plugin</artifactId>
                                                            |-- WEB-INF
        <version>2.2</version>
                                                            |   `-- web.xml
        <configuration>
                                                            |-- index.jsp
   <failOnMissingWebXml>false</failOnMissingWebXml>
                                                            `-- jsp
        </configuration>
                                                                `-- websource.jsp
      </plugin>
    </plugins>
  </build>
</project>


                      $ mvn package //ou entao// $ mvn compile war:war
                      $ mvn war:exploded
Definição das dependências

                                 <plugin>
  Como controlar                   <groupId>org.apache.maven.plugins</groupId>
                                   <artifactId>maven-war-plugin</artifactId>
    quais dependências             <version>2.2</version>
                                   <configuration>
    vão para o MANIFEST              <archive>
                                       <manifest>
    e/ou para o WEB-INF                   <addClasspath>true</addClasspath>
                                       </manifest>
    /lib ?                           </archive>
                                   </configuration>
                                 </plugin>



     default
       vai para o MANIFEST, e no WEB-INF/lib
     <optional>true</optional>
       vai para o MANIFEST, mas não no WEB-INF/lib
     <scope>provided</scope>
       não vai para o MANIFEST, nem para o WEB-INF/lib
EAR plugin


     Cria um arquivo EAR de um projeto modularizado
<plugin>                                        |--   pom.xml
  <groupId>org.apache.maven.plugins</groupId>   |--   module-ear
  <artifactId>maven-ear-plugin</artifactId>     |     `-- pom.xml
  <version>2.7</version>                        |--   module-ejb
</plugin>                                       |     |-- pom.xml
                                                |     `-- src
                                                |         `-- main
                                                |             |-- java
                                                |             |    `-- com
                                                |             |        `-- myproject
  <configuration>
                                                |             |            `-- MyStatelessBean.java
    <modules>                                   `--   module-web
      <ejbModule>                                     |-- pom.xml
        <groupId>com.myproject</groupId>              `-- src
        <artifactId>module-ejb</artifactId>               `-- main
      </ejbModule>                                            |-- java
      <webModule>                                             |-- resources
        <groupId>com.myproject</groupId>                      `-- webapp
        <artifactId>module-web</artifactId>
        <contextRoot>myproject</contextRoot>
      </webModule>
    </modules>
  </configuration>
GlassFish Embedded plugin


  Permite rodar o GlassFish (tanto Web quanto Full profile)
    a partir do Maven
      $ mvn embedded-glassfish:run
  Permite fazer deploy e undeploy em uma instância remota
      $ mvn embedded-glassfish:deploy
      $ mvn embedded-glassfish:undeploy
GlassFish Embedded plugin


  Permite iniciar ou parar uma instância remota ou local
    (embedded)
     $ mvn embedded-glassfish:start
     $ mvn embedded-glassfish:stop
  Permite administrar uma instância remote ou local (embedded)
     $ mvn embedded-glassfish:admin
GlassFish Embedded plugin


  Como configurar?
     Artefatos no repositório central (#win o/)
     Dependências necessárias e seus escopos
    <dependency>
      <groupId>org.glassfish.main.extras</groupId>
      <artifactId>glassfish-embedded-all</artifactId>
      <!-- ou web para projetos q nao usam todo o profile JEE -->
      <version>3.1.2</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>javax</groupId>
      <artifactId>javaee-api</artifactId>
      <version>6.0</version>
      <scope>provided</scope>
    </dependency>
GlassFish Embedded plugin


  Como configurar?
     Plugin
     domain.xml (para DataSource e outras configurações de container)
    <plugin>
      <groupId>org.glassfish.embedded</groupId>
      <artifactId>maven-embedded-glassfish-plugin</artifactId>
      <version>3.1.2</version>
      <configuration>
        <goalPrefix>embedded-glassfish</goalPrefix>
        <configFile>src/test/resources/domain.xml</configFile>
        <contextRoot>/</contextRoot>
        <app>${project.build.directory}/${build.finalName}.war</app>
        <port>8080</port>
        <autoDelete>true</autoDelete>
      </configuration>
    </plugin>
Outros plugins interessantes


  Dependency
     Visualizar as dependencias
        $ mvn dependency:tree
     Copiar as dependencias para algum diretório
       $ mvn dependency:copy-dependencies
     Criar um ClassPath
        $ mvn dependency:build-classpath
     Modo offline
       $ mvn dependency:go-offline
Outros plugins interessantes


  Assembly
     Agregar artefatos e dependencias do projeto em um arquivo ou
       diretório, por exemplo:
         Criar um ZIP com todas as dependências
         Criar um ZIP com todos os fontes
         Criar um JAR (big-fat) executável


      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>2.3</version>
      </plugin>
Outros plugins interessantes


  GMaven - Groovy
     Scripting no build usando linguagem Groovy
         Em alguns servidores, pode ser necessário criar arquivos XML
           específicos (como deployment descriptors)
         Com o GMaven, é mais fácil de gerar esses arquivos


                 <plugin>
                      <groupId>org.codehaus.gmaven</groupId>
                      <artifactId>gmaven-plugin</artifactId>
                      <version>1.3</version>
                 </plugin>
Exemplo GMaven

   <configuration>
        <source>
              new File("target").mkdir()
              def sw = new FileWriter(new File("target/module.xml"))
              def xml = new groovy.xml.MarkupBuilder(sw)
              xml.module(xmlns:'urn:jboss:module:1.0', name:'com.bemobi.infosender') {
                resources {
                    project.runtimeClasspathElements.each {
                      def path = it.find(".*?([w.-]*.jar)") { it[1] }
                      !path?:'resource-root'(path:path)
                    }
                }
                dependencies {
                    'module'(name:'org.hibernate', export:'true')
                    'module'(name:'org.slf4j', export:'true')
                    'module'(name:'org.apache.commons.logging', export:'true')
                    'module'(name:'com.sun.xml.bind', export:'true')
                    'module'(name:'javaee.api', export:'true')
                }
              }
        </source>
   </configuration>
Outros plugins interessantes


  Archetype
     Auxilia na definição de “esqueletos” de projetos reutilizáveis
     Grandes empresas podem se beneficiar, quando possuem
       arquitetura padrão para todos os projetos
Links


  GlassFish                 @glassfish
    http://www.glassfish.org
  Embedded GlassFish (3.1.2 docs)
    http://bit.ly/eg312
  Apache Maven
    http://maven.apache.org
  Groovy Magen Plugin
    http://bit.ly/gmaven
  Blog
     http://blog.brunoborges.com.br
Obrigado




            Bruno Borges
           bruno.borges@oracle.com
                @brunoborges

Mais conteúdo relacionado

PDF
GlassFish, Maven, Cloud e Java EE
PDF
GlassFish, Maven, Cloud e o futuro do Java EE
PDF
MC - Java Enterprise Edition 6 (Java EE)
PDF
Java EE no ambiente corporativo: primeiros passos WebLogic 12c
PDF
JSF com Primefaces
PDF
A arquitetura modular do Java 9
PDF
Java 9, 10, 11
PDF
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
GlassFish, Maven, Cloud e Java EE
GlassFish, Maven, Cloud e o futuro do Java EE
MC - Java Enterprise Edition 6 (Java EE)
Java EE no ambiente corporativo: primeiros passos WebLogic 12c
JSF com Primefaces
A arquitetura modular do Java 9
Java 9, 10, 11
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)

Mais procurados (20)

PPT
Desenvolvimento web em java com JSP e Servlets
PDF
Novidades do JSF: Um tour completo no JSF 2.2
PDF
As grandes novidades do JSF 2.0!
PDF
Java ee 5
PPTX
Introdução a jsf
PPT
JavaServer Faces Produtividade em Desenvolvimento
PDF
GUJavaSC - Unit Testing com Java EE
KEY
Build Automation Evolved
PDF
GUJavaSC - Mini-curso Java EE
ODP
Desenvolvimento de Aplicações
PDF
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
PDF
Prime Faces
PPTX
Apresentação jsf 2.0
PDF
Construindo aplicações web java com netbeans
PDF
JSF2 c/ PrimeFaces, RichFaces e ICEfaces
PDF
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
PDF
PDF
Analise frameworks php
PDF
Java, NetBeans e Orientação a Objetos
PDF
Tutorial Java EE
Desenvolvimento web em java com JSP e Servlets
Novidades do JSF: Um tour completo no JSF 2.2
As grandes novidades do JSF 2.0!
Java ee 5
Introdução a jsf
JavaServer Faces Produtividade em Desenvolvimento
GUJavaSC - Unit Testing com Java EE
Build Automation Evolved
GUJavaSC - Mini-curso Java EE
Desenvolvimento de Aplicações
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
Prime Faces
Apresentação jsf 2.0
Construindo aplicações web java com netbeans
JSF2 c/ PrimeFaces, RichFaces e ICEfaces
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Analise frameworks php
Java, NetBeans e Orientação a Objetos
Tutorial Java EE
Anúncio

Semelhante a GlassFish e Maven: Java EE sem dor! (20)

PDF
Java 08
PDF
ODP
Apresentacao de Introdução ao Apache Maven
PDF
Gerenciamento de projetos com o Apache Ant
PDF
Gerenciamento de projetos com o Apache Ant
PDF
Introdução ao maven
PDF
Jboss7
PDF
Ambiente de Desenvolvimento Java usando Ant
PPTX
Plugin Maven no Eclipse
PDF
Maven: Introdução
PDF
PDF
Jboss tutorial
PDF
Testes em aplicações JEE: Montando sua infra de testes automatizados
PDF
Introdução ao Apache Ant
PDF
PDF
Aula02 eclipse quem_es_tu
PDF
Intro ao eclipse
PDF
Java EE 6 e JBoss 6.0
PDF
Suporte a Open Source no Oracle WebLogic 12c - Integração com Maven & Hudson
Java 08
Apresentacao de Introdução ao Apache Maven
Gerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache Ant
Introdução ao maven
Jboss7
Ambiente de Desenvolvimento Java usando Ant
Plugin Maven no Eclipse
Maven: Introdução
Jboss tutorial
Testes em aplicações JEE: Montando sua infra de testes automatizados
Introdução ao Apache Ant
Aula02 eclipse quem_es_tu
Intro ao eclipse
Java EE 6 e JBoss 6.0
Suporte a Open Source no Oracle WebLogic 12c - Integração com Maven & Hudson
Anúncio

Mais de Bruno Borges (20)

PDF
Secrets of Performance Tuning Java on Kubernetes
PDF
[Outdated] Secrets of Performance Tuning Java on Kubernetes
PDF
From GitHub Source to GitHub Release: Free CICD Pipelines For JavaFX Apps
PDF
Making Sense of Serverless Computing
PPTX
Visual Studio Code for Java and Spring Developers
PDF
Taking Spring Apps for a Spin on Microsoft Azure Cloud
PDF
A Look Back at Enterprise Integration Patterns and Their Use into Today's Ser...
PPTX
Melhore o Desenvolvimento do Time com DevOps na Nuvem
PPTX
Tecnologias Oracle em Docker Containers On-premise e na Nuvem
PPTX
Java EE Arquillian Testing with Docker & The Cloud
PPTX
Migrating From Applets to Java Desktop Apps in JavaFX
PDF
Servidores de Aplicação: Por quê ainda precisamos deles?
PDF
Build and Monitor Cloud PaaS with JVM’s Nashorn JavaScripts [CON1859]
PDF
Cloud Services for Developers: What’s Inside Oracle Cloud for You? [CON1861]
PDF
Booting Up Spring Apps on Lightweight Cloud Services [CON10258]
PDF
Java EE Application Servers: Containerized or Multitenant? Both! [CON7506]
PDF
Running Oracle WebLogic on Docker Containers [BOF7537]
PPTX
Lightweight Java in the Cloud
PDF
Tweet for Beer - Beertap Powered by Java Goes IoT, Cloud, and JavaFX
PDF
Integrando Oracle BPM com Java EE e WebSockets
Secrets of Performance Tuning Java on Kubernetes
[Outdated] Secrets of Performance Tuning Java on Kubernetes
From GitHub Source to GitHub Release: Free CICD Pipelines For JavaFX Apps
Making Sense of Serverless Computing
Visual Studio Code for Java and Spring Developers
Taking Spring Apps for a Spin on Microsoft Azure Cloud
A Look Back at Enterprise Integration Patterns and Their Use into Today's Ser...
Melhore o Desenvolvimento do Time com DevOps na Nuvem
Tecnologias Oracle em Docker Containers On-premise e na Nuvem
Java EE Arquillian Testing with Docker & The Cloud
Migrating From Applets to Java Desktop Apps in JavaFX
Servidores de Aplicação: Por quê ainda precisamos deles?
Build and Monitor Cloud PaaS with JVM’s Nashorn JavaScripts [CON1859]
Cloud Services for Developers: What’s Inside Oracle Cloud for You? [CON1861]
Booting Up Spring Apps on Lightweight Cloud Services [CON10258]
Java EE Application Servers: Containerized or Multitenant? Both! [CON7506]
Running Oracle WebLogic on Docker Containers [BOF7537]
Lightweight Java in the Cloud
Tweet for Beer - Beertap Powered by Java Goes IoT, Cloud, and JavaFX
Integrando Oracle BPM com Java EE e WebSockets

Último (19)

PPTX
Aula 18 - Manipulacao De Arquivos python
PDF
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
PDF
COBITxITIL-Entenda as diferença em uso governança TI
PDF
Custos e liquidação no SAP Transportation Management, TM130 Col18
PPTX
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
PDF
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
PDF
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
PDF
Apple Pippin Uma breve introdução. - David Glotz
PPTX
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
PPTX
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
PDF
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
PDF
Processos na gestão de transportes, TM100 Col18
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PDF
Aula04-Academia Heri- Tecnologia Geral 2025
PPTX
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
PDF
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
PDF
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
PDF
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
Aula 18 - Manipulacao De Arquivos python
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
COBITxITIL-Entenda as diferença em uso governança TI
Custos e liquidação no SAP Transportation Management, TM130 Col18
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
Apple Pippin Uma breve introdução. - David Glotz
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
Processos na gestão de transportes, TM100 Col18
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
Aula04-Academia Heri- Tecnologia Geral 2025
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
Otimizador de planejamento e execução no SAP Transportation Management, TM120...

GlassFish e Maven: Java EE sem dor!

  • 1. GlassFish e Maven: Java EE sem dor Bruno Borges bruno.borges@oracle.com @brunoborges
  • 2. Agenda GlassFish História Futuro Java EE Versão 6 Futuro: Java EE 7 Apache Maven Embedded GlassFish Maven Plugin
  • 3. GlassFish - História Criado pela SUN em 2005 2006 (v1), RI do JEE 5 para desenvolvedores 2007 (v2), adicionou Clustering e outras funções para enterprise 2009, (v3) RI do JEE 6 Nova arquitetura (OSGi, fast- startup, etc)
  • 4. GlassFish - História V 3.1 – Fevereiro 2011 Load Balancing Centralised Admin V 3.1.1 – Julho 2011 Correção de bugs V 3.1.2 – Fevereiro 2012 Correção de bugs Novo console administrativo Melhorias no Thread Pool Transaction Recovery
  • 5. GlassFish - Futuro Versão 4.0 - Roadmap Java EE 7 Suporte a virtualização PaaS oriented
  • 6. Java EE 6 Java EE 6 – JSR 316 Profiles EJB 3.1 JSF 2.0 JSP 2.2 Servlets 3.0 JAX-RS JAX-WS 2.2 JPA 2.0 Java EE Connectors 1.6
  • 7. Java EE 6 As coisas boas do Java EE 6 Não precisa mais de web.xml Melhora na API de Servlets para tratar FileUpload Validation (JSR 303) no JPA EJB do jeito que todo mundo queria Não precisa mais de um ejb-jar.xml Anotações @Singleton e @Startup beans @Schedule bean's methods Operações assíncronas
  • 8. Do JEE6 para o JEE7
  • 9. Java EE 7 Java EE 7
  • 10. Java EE 7 EJB 3.2 – JSR 345 Suporte a multi-tenancy Melhora no uso de anotações para simplificar o modelo de programação Alinhamento com outras especificações como CDI, JMS e BeanValidation Servlet 3.1 – JSR 340 Suporte a WebSockets JPA 2.1 – JSR 338 Introdução da interface StoredProcedureQuery
  • 11. Java EE 7 JSF 2.2 – JSR 344 Mais fácil de criar componentes HTML5 O mais esperado JMS – Java Messaging Service 2.0 – JSR 343 Melhora no modelo de programação Integração com CDI Mudanças na API para permitir maior integração entre vendors de JMS com qualquer container JEE
  • 13. Apache Maven Ferramenta de build Convention over configuration Arquivos POMs Repositório de artefatos Plugins Perfeito para Integração Contínua Aceleração na ambientação de novos desenvolvedores
  • 14. Apache Maven Principais Plugins para projetos Java EE 6 WAR plugin EAR plugin GlassFish Embedded Plugin Dependency plugin Assembly plugin Groovy Maven Plugin Archetype Plugin
  • 15. WAR plugin Cria um arquivo WAR de um projeto do tipo WAR |-- pom.xml <project> `-- src `-- main <groupId>com.myproject</groupId> |-- java <artifactId>myproject</artifactId> | `-- com <packaging>war</packaging> | `-- example <version>1.0-SNAPSHOT</version> | `-- projects | `-- SampleAction.java <build> |-- resources <plugins> | `-- images <plugin> | `-- sampleimage.jpg <groupId>org.apache.maven.plugins</groupId> `-- webapp <artifactId>maven-war-plugin</artifactId> |-- WEB-INF <version>2.2</version> | `-- web.xml <configuration> |-- index.jsp <failOnMissingWebXml>false</failOnMissingWebXml> `-- jsp </configuration> `-- websource.jsp </plugin> </plugins> </build> </project> $ mvn package //ou entao// $ mvn compile war:war $ mvn war:exploded
  • 16. Definição das dependências <plugin> Como controlar <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> quais dependências <version>2.2</version> <configuration> vão para o MANIFEST <archive> <manifest> e/ou para o WEB-INF <addClasspath>true</addClasspath> </manifest> /lib ? </archive> </configuration> </plugin> default vai para o MANIFEST, e no WEB-INF/lib <optional>true</optional> vai para o MANIFEST, mas não no WEB-INF/lib <scope>provided</scope> não vai para o MANIFEST, nem para o WEB-INF/lib
  • 17. EAR plugin Cria um arquivo EAR de um projeto modularizado <plugin> |-- pom.xml <groupId>org.apache.maven.plugins</groupId> |-- module-ear <artifactId>maven-ear-plugin</artifactId> | `-- pom.xml <version>2.7</version> |-- module-ejb </plugin> | |-- pom.xml | `-- src | `-- main | |-- java | | `-- com | | `-- myproject <configuration> | | `-- MyStatelessBean.java <modules> `-- module-web <ejbModule> |-- pom.xml <groupId>com.myproject</groupId> `-- src <artifactId>module-ejb</artifactId> `-- main </ejbModule> |-- java <webModule> |-- resources <groupId>com.myproject</groupId> `-- webapp <artifactId>module-web</artifactId> <contextRoot>myproject</contextRoot> </webModule> </modules> </configuration>
  • 18. GlassFish Embedded plugin Permite rodar o GlassFish (tanto Web quanto Full profile) a partir do Maven $ mvn embedded-glassfish:run Permite fazer deploy e undeploy em uma instância remota $ mvn embedded-glassfish:deploy $ mvn embedded-glassfish:undeploy
  • 19. GlassFish Embedded plugin Permite iniciar ou parar uma instância remota ou local (embedded) $ mvn embedded-glassfish:start $ mvn embedded-glassfish:stop Permite administrar uma instância remote ou local (embedded) $ mvn embedded-glassfish:admin
  • 20. GlassFish Embedded plugin Como configurar? Artefatos no repositório central (#win o/) Dependências necessárias e seus escopos <dependency> <groupId>org.glassfish.main.extras</groupId> <artifactId>glassfish-embedded-all</artifactId> <!-- ou web para projetos q nao usam todo o profile JEE --> <version>3.1.2</version> <scope>test</scope> </dependency> <dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> <version>6.0</version> <scope>provided</scope> </dependency>
  • 21. GlassFish Embedded plugin Como configurar? Plugin domain.xml (para DataSource e outras configurações de container) <plugin> <groupId>org.glassfish.embedded</groupId> <artifactId>maven-embedded-glassfish-plugin</artifactId> <version>3.1.2</version> <configuration> <goalPrefix>embedded-glassfish</goalPrefix> <configFile>src/test/resources/domain.xml</configFile> <contextRoot>/</contextRoot> <app>${project.build.directory}/${build.finalName}.war</app> <port>8080</port> <autoDelete>true</autoDelete> </configuration> </plugin>
  • 22. Outros plugins interessantes Dependency Visualizar as dependencias $ mvn dependency:tree Copiar as dependencias para algum diretório $ mvn dependency:copy-dependencies Criar um ClassPath $ mvn dependency:build-classpath Modo offline $ mvn dependency:go-offline
  • 23. Outros plugins interessantes Assembly Agregar artefatos e dependencias do projeto em um arquivo ou diretório, por exemplo: Criar um ZIP com todas as dependências Criar um ZIP com todos os fontes Criar um JAR (big-fat) executável <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>2.3</version> </plugin>
  • 24. Outros plugins interessantes GMaven - Groovy Scripting no build usando linguagem Groovy Em alguns servidores, pode ser necessário criar arquivos XML específicos (como deployment descriptors) Com o GMaven, é mais fácil de gerar esses arquivos <plugin> <groupId>org.codehaus.gmaven</groupId> <artifactId>gmaven-plugin</artifactId> <version>1.3</version> </plugin>
  • 25. Exemplo GMaven <configuration> <source> new File("target").mkdir() def sw = new FileWriter(new File("target/module.xml")) def xml = new groovy.xml.MarkupBuilder(sw) xml.module(xmlns:'urn:jboss:module:1.0', name:'com.bemobi.infosender') { resources { project.runtimeClasspathElements.each { def path = it.find(".*?([w.-]*.jar)") { it[1] } !path?:'resource-root'(path:path) } } dependencies { 'module'(name:'org.hibernate', export:'true') 'module'(name:'org.slf4j', export:'true') 'module'(name:'org.apache.commons.logging', export:'true') 'module'(name:'com.sun.xml.bind', export:'true') 'module'(name:'javaee.api', export:'true') } } </source> </configuration>
  • 26. Outros plugins interessantes Archetype Auxilia na definição de “esqueletos” de projetos reutilizáveis Grandes empresas podem se beneficiar, quando possuem arquitetura padrão para todos os projetos
  • 27. Links GlassFish @glassfish http://www.glassfish.org Embedded GlassFish (3.1.2 docs) http://bit.ly/eg312 Apache Maven http://maven.apache.org Groovy Magen Plugin http://bit.ly/gmaven Blog http://blog.brunoborges.com.br
  • 28. Obrigado Bruno Borges bruno.borges@oracle.com @brunoborges

Notas do Editor

  • #4: Aplicacoes isoladas Usuarios querem acesso a todas as funcoes e dados. Nao importa onde estejam. Requer aplicacoes integradas. Nao existe receita de bolo para integrar aplicacoes, nem a solucao ideal. Se a arquitetura escolhida foi boa ou nao, só com o tempo pra saber. Solucoes de fornecedores sao metodologias e praticas voltadas a produtos. Arquiteturas de mensagens assincronas mostram ser a melhor opcao por desacoplar diferentes sistemas. Padroes de integracao sao voltados a problemas especificos de design. Criados a partir de solucoes que se repetiram e mostraram ter resultado positivo
  • #5: Aplicacoes isoladas Usuarios querem acesso a todas as funcoes e dados. Nao importa onde estejam. Requer aplicacoes integradas. Nao existe receita de bolo para integrar aplicacoes, nem a solucao ideal. Se a arquitetura escolhida foi boa ou nao, só com o tempo pra saber. Solucoes de fornecedores sao metodologias e praticas voltadas a produtos. Arquiteturas de mensagens assincronas mostram ser a melhor opcao por desacoplar diferentes sistemas. Padroes de integracao sao voltados a problemas especificos de design. Criados a partir de solucoes que se repetiram e mostraram ter resultado positivo
  • #6: Aplicacoes isoladas Usuarios querem acesso a todas as funcoes e dados. Nao importa onde estejam. Requer aplicacoes integradas. Nao existe receita de bolo para integrar aplicacoes, nem a solucao ideal. Se a arquitetura escolhida foi boa ou nao, só com o tempo pra saber. Solucoes de fornecedores sao metodologias e praticas voltadas a produtos. Arquiteturas de mensagens assincronas mostram ser a melhor opcao por desacoplar diferentes sistemas. Padroes de integracao sao voltados a problemas especificos de design. Criados a partir de solucoes que se repetiram e mostraram ter resultado positivo