SlideShare uma empresa Scribd logo
1 de 28
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

Mais procurados

Desenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e ServletsDesenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e ServletsIgo Coelho
 
Novidades do JSF: Um tour completo no JSF 2.2
Novidades do JSF: Um tour completo no JSF 2.2Novidades do JSF: Um tour completo no JSF 2.2
Novidades do JSF: Um tour completo no JSF 2.2Dr. Spock
 
As grandes novidades do JSF 2.0!
As grandes novidades do JSF 2.0!As grandes novidades do JSF 2.0!
As grandes novidades do JSF 2.0!Diego Santos
 
JavaServer Faces Produtividade em Desenvolvimento
JavaServer Faces Produtividade em DesenvolvimentoJavaServer Faces Produtividade em Desenvolvimento
JavaServer Faces Produtividade em DesenvolvimentoEduardo Bregaida
 
Build Automation Evolved
Build Automation EvolvedBuild Automation Evolved
Build Automation EvolvedMarcelo Diniz
 
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem DorPlay Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem DorAllyson Barros
 
Apresentação jsf 2.0
Apresentação jsf 2.0Apresentação jsf 2.0
Apresentação jsf 2.0Paulo Neto
 
Construindo aplicações web java com netbeans
Construindo aplicações web java com netbeansConstruindo aplicações web java com netbeans
Construindo aplicações web java com netbeansSliedesharessbarbosa
 
JSF2 c/ PrimeFaces, RichFaces e ICEfaces
JSF2 c/ PrimeFaces, RichFaces e ICEfacesJSF2 c/ PrimeFaces, RichFaces e ICEfaces
JSF2 c/ PrimeFaces, RichFaces e ICEfacesEder Magalhães
 
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e ZendAnálise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e ZendThiago Sinésio
 
Analise frameworks php
Analise frameworks phpAnalise frameworks php
Analise frameworks phpIgor Moura
 
Java, NetBeans e Orientação a Objetos
Java, NetBeans e Orientação a ObjetosJava, NetBeans e Orientação a Objetos
Java, NetBeans e Orientação a ObjetosJoão Longo
 

Mais procurados (20)

Desenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e ServletsDesenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e Servlets
 
Novidades do JSF: Um tour completo no JSF 2.2
Novidades do JSF: Um tour completo no JSF 2.2Novidades do JSF: Um tour completo no JSF 2.2
Novidades do JSF: Um tour completo no JSF 2.2
 
As grandes novidades do JSF 2.0!
As grandes novidades do JSF 2.0!As grandes novidades do JSF 2.0!
As grandes novidades do JSF 2.0!
 
Java ee 5
Java ee 5Java ee 5
Java ee 5
 
Introdução a jsf
Introdução a jsfIntrodução a jsf
Introdução a jsf
 
JavaServer Faces Produtividade em Desenvolvimento
JavaServer Faces Produtividade em DesenvolvimentoJavaServer Faces Produtividade em Desenvolvimento
JavaServer Faces Produtividade em Desenvolvimento
 
GUJavaSC - Unit Testing com Java EE
GUJavaSC - Unit Testing com Java EEGUJavaSC - Unit Testing com Java EE
GUJavaSC - Unit Testing com Java EE
 
Build Automation Evolved
Build Automation EvolvedBuild Automation Evolved
Build Automation Evolved
 
GUJavaSC - Mini-curso Java EE
GUJavaSC - Mini-curso Java EEGUJavaSC - Mini-curso Java EE
GUJavaSC - Mini-curso Java EE
 
Desenvolvimento de Aplicações
Desenvolvimento de AplicaçõesDesenvolvimento de Aplicações
Desenvolvimento de Aplicações
 
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem DorPlay Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
 
Prime Faces
Prime FacesPrime Faces
Prime Faces
 
Apresentação jsf 2.0
Apresentação jsf 2.0Apresentação jsf 2.0
Apresentação jsf 2.0
 
Construindo aplicações web java com netbeans
Construindo aplicações web java com netbeansConstruindo aplicações web java com netbeans
Construindo aplicações web java com netbeans
 
JSF2 c/ PrimeFaces, RichFaces e ICEfaces
JSF2 c/ PrimeFaces, RichFaces e ICEfacesJSF2 c/ PrimeFaces, RichFaces e ICEfaces
JSF2 c/ PrimeFaces, RichFaces e ICEfaces
 
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e ZendAnálise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
 
Jee6
Jee6Jee6
Jee6
 
Analise frameworks php
Analise frameworks phpAnalise frameworks php
Analise frameworks php
 
Java, NetBeans e Orientação a Objetos
Java, NetBeans e Orientação a ObjetosJava, NetBeans e Orientação a Objetos
Java, NetBeans e Orientação a Objetos
 
Tutorial Java EE
Tutorial Java EETutorial Java EE
Tutorial Java EE
 

Semelhante a GlassFish e Maven: Java EE sem dor!

Organizandoacasa 120316203302-phpapp02
Organizandoacasa 120316203302-phpapp02Organizandoacasa 120316203302-phpapp02
Organizandoacasa 120316203302-phpapp02Fernanda Prezotto
 
TechDay - Sistemas WEB em Java - Rogério N. Jr.
TechDay - Sistemas WEB em Java - Rogério N. Jr.TechDay - Sistemas WEB em Java - Rogério N. Jr.
TechDay - Sistemas WEB em Java - Rogério N. Jr.Rogério Napoleão Jr.
 
Quick intro to Apache Maven
Quick intro to Apache MavenQuick intro to Apache Maven
Quick intro to Apache MavenInformantTalks
 
Testes em aplicações JEE: Montando sua infra de testes automatizados
Testes em aplicações JEE: Montando sua infra de testes automatizadosTestes em aplicações JEE: Montando sua infra de testes automatizados
Testes em aplicações JEE: Montando sua infra de testes automatizadosDiego Santos
 
Gerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntGerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntDenis L Presciliano
 
Gerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntGerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntDenis L Presciliano
 
JSF 2.0 e ScrumToys
JSF 2.0 e ScrumToysJSF 2.0 e ScrumToys
JSF 2.0 e ScrumToysDr. Spock
 
Uma abordagem ao Java EE 6
Uma abordagem ao Java EE 6Uma abordagem ao Java EE 6
Uma abordagem ao Java EE 6danielfcampos
 
Ambiente de Desenvolvimento Java usando Ant
Ambiente de Desenvolvimento Java usando AntAmbiente de Desenvolvimento Java usando Ant
Ambiente de Desenvolvimento Java usando AntDenis L Presciliano
 
JSF 2.0 e ScrumToys
JSF 2.0 e ScrumToysJSF 2.0 e ScrumToys
JSF 2.0 e ScrumToysDr. Spock
 
Projetos Java com Maven
Projetos Java com MavenProjetos Java com Maven
Projetos Java com MavenEdgar Dantas
 
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JS
TDC2015  Porto Alegre - Interfaces ricas com Rails e React.JSTDC2015  Porto Alegre - Interfaces ricas com Rails e React.JS
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JSRodrigo Urubatan
 

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

Organizando a casa
Organizando a casaOrganizando a casa
Organizando a casa
 
Organizandoacasa 120316203302-phpapp02
Organizandoacasa 120316203302-phpapp02Organizandoacasa 120316203302-phpapp02
Organizandoacasa 120316203302-phpapp02
 
TechDay - Sistemas WEB em Java - Rogério N. Jr.
TechDay - Sistemas WEB em Java - Rogério N. Jr.TechDay - Sistemas WEB em Java - Rogério N. Jr.
TechDay - Sistemas WEB em Java - Rogério N. Jr.
 
Quick intro to Apache Maven
Quick intro to Apache MavenQuick intro to Apache Maven
Quick intro to Apache Maven
 
Jboss tutorial
Jboss tutorialJboss tutorial
Jboss tutorial
 
Testes em aplicações JEE: Montando sua infra de testes automatizados
Testes em aplicações JEE: Montando sua infra de testes automatizadosTestes em aplicações JEE: Montando sua infra de testes automatizados
Testes em aplicações JEE: Montando sua infra de testes automatizados
 
Gerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntGerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache Ant
 
Gerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntGerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache Ant
 
Java 08
Java 08Java 08
Java 08
 
Jboss7
Jboss7Jboss7
Jboss7
 
JSF 2.0 e ScrumToys
JSF 2.0 e ScrumToysJSF 2.0 e ScrumToys
JSF 2.0 e ScrumToys
 
Uma abordagem ao Java EE 6
Uma abordagem ao Java EE 6Uma abordagem ao Java EE 6
Uma abordagem ao Java EE 6
 
Maverick v1.0
Maverick v1.0Maverick v1.0
Maverick v1.0
 
Apresentacao de Introdução ao Apache Maven
Apresentacao de Introdução ao Apache MavenApresentacao de Introdução ao Apache Maven
Apresentacao de Introdução ao Apache Maven
 
Introdução ao Apache Ant
Introdução ao Apache AntIntrodução ao Apache Ant
Introdução ao Apache Ant
 
Ambiente de Desenvolvimento Java usando Ant
Ambiente de Desenvolvimento Java usando AntAmbiente de Desenvolvimento Java usando Ant
Ambiente de Desenvolvimento Java usando Ant
 
JSF 2.0 e ScrumToys
JSF 2.0 e ScrumToysJSF 2.0 e ScrumToys
JSF 2.0 e ScrumToys
 
Projetos Java com Maven
Projetos Java com MavenProjetos Java com Maven
Projetos Java com Maven
 
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JS
TDC2015  Porto Alegre - Interfaces ricas com Rails e React.JSTDC2015  Porto Alegre - Interfaces ricas com Rails e React.JS
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JS
 
Plugin Maven no Eclipse
Plugin Maven no EclipsePlugin Maven no Eclipse
Plugin Maven no Eclipse
 

Mais de Bruno Borges

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

Mais de Bruno Borges (20)

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

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

  1. 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
  2. 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
  3. 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