O documento discute o uso do GlassFish e do Maven para desenvolvimento Java EE. Ele descreve a história e futuro do GlassFish e Java EE, apresenta plugins do Maven como o Embedded GlassFish para rodar o GlassFish localmente e o WAR e EAR para empacotar aplicativos, e discute outras ferramentas como o Groovy Maven para scriptar builds.
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
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
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>
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
28. Obrigado
Bruno Borges
bruno.borges@oracle.com
@brunoborges
Notas do Editor
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
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
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