O documento introduz a ferramenta Apache Ant, que é usada para gerenciar projetos Java de forma automatizada através de arquivos XML. Ant permite compilar, empacotar, testar e implantar aplicações de forma independente de IDEs. Ele executa tarefas como compilação, geração de documentação e empacotamento usando roteiros definidos em arquivos XML chamados buildfiles.
Introdução prática ao Apache Ant.
/**Depois que entrei no mundo Java, começei a procurar por conteúdo na internet para estudar, então me deparei com um ótimo site, http://www.argonavis.com.br, de um grande cara chamado Helder Rocha, que disponibiliza este mesmo conteúdo em seu site também. Obrigado pela ajuda a comunidade.*/
Este documento apresenta o Apache Ant, uma ferramenta para gerenciamento de projetos Java. O Ant permite automatizar tarefas comuns em projetos Java, como compilação, teste, empacotamento e geração de documentação, através de roteiros XML chamados de buildfiles. O documento descreve como o Ant funciona, exemplos de uso de buildfiles e as principais tarefas suportadas como compilação, criação de JARs, manipulação de arquivos e geração de documentação.
O documento resume 55 novas funcionalidades do Java 7, incluindo: literais binários e numéricos com underline, strings no switch, gerenciamento automático de recursos com try-with-resources, e novas APIs para concorrência, arquivos e números aleatórios.
Este documento fornece um resumo sobre WebServlets de acordo com a especificação Java EE 7. Ele contém informações sobre aplicações Web, WebServlets, requisições e respostas HTTP, URLs e redirecionamento, contexto da aplicação, sessão do cliente, filtros interceptadores e arquitetura MVC.
Curso de Java Persistence API (JPA) (Java EE 7)Helder da Rocha
Este documento fornece um tutorial sobre a tecnologia Java Persistence API (JPA) de acordo com a especificação Java EE 7. Resume os principais conceitos de JPA como mapeamento objeto-relacional, configuração da camada de persistência e exemplos de mapeamento de entidades usando anotações ou arquivos XML. Também fornece informações sobre exercícios práticos que serão realizados usando diferentes provedores de persistência e bancos de dados.
O documento resume as principais mudanças na arquitetura modular introduzida no Java 9, incluindo:
1) A divisão do JDK e JRE em módulos menores com dependências explícitas;
2) A capacidade de criar aplicações modulares com dependências claras entre módulos;
3) As novas funcionalidades como a geração de imagens executáveis menores com jlink.
Introdução prática ao Apache Ant.
/**Depois que entrei no mundo Java, começei a procurar por conteúdo na internet para estudar, então me deparei com um ótimo site, http://www.argonavis.com.br, de um grande cara chamado Helder Rocha, que disponibiliza este mesmo conteúdo em seu site também. Obrigado pela ajuda a comunidade.*/
Este documento apresenta o Apache Ant, uma ferramenta para gerenciamento de projetos Java. O Ant permite automatizar tarefas comuns em projetos Java, como compilação, teste, empacotamento e geração de documentação, através de roteiros XML chamados de buildfiles. O documento descreve como o Ant funciona, exemplos de uso de buildfiles e as principais tarefas suportadas como compilação, criação de JARs, manipulação de arquivos e geração de documentação.
O documento resume 55 novas funcionalidades do Java 7, incluindo: literais binários e numéricos com underline, strings no switch, gerenciamento automático de recursos com try-with-resources, e novas APIs para concorrência, arquivos e números aleatórios.
Este documento fornece um resumo sobre WebServlets de acordo com a especificação Java EE 7. Ele contém informações sobre aplicações Web, WebServlets, requisições e respostas HTTP, URLs e redirecionamento, contexto da aplicação, sessão do cliente, filtros interceptadores e arquitetura MVC.
Curso de Java Persistence API (JPA) (Java EE 7)Helder da Rocha
Este documento fornece um tutorial sobre a tecnologia Java Persistence API (JPA) de acordo com a especificação Java EE 7. Resume os principais conceitos de JPA como mapeamento objeto-relacional, configuração da camada de persistência e exemplos de mapeamento de entidades usando anotações ou arquivos XML. Também fornece informações sobre exercícios práticos que serão realizados usando diferentes provedores de persistência e bancos de dados.
O documento resume as principais mudanças na arquitetura modular introduzida no Java 9, incluindo:
1) A divisão do JDK e JRE em módulos menores com dependências explícitas;
2) A capacidade de criar aplicações modulares com dependências claras entre módulos;
3) As novas funcionalidades como a geração de imagens executáveis menores com jlink.
Este documento resume um módulo sobre a ferramenta XDoclet, que permite gerar automaticamente artefatos Java como EJBs a partir de código-fonte e comentários Javadoc. O documento explica como configurar o XDoclet no Ant, criar templates, e usar a tarefa EJBDocletTask para gerar interfaces, deployment descriptors e outros arquivos para EJBs.
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)Helder da Rocha
Este documento fornece um tutorial sobre o desenvolvimento de serviços web RESTful usando a especificação JAX-RS no Java EE 7. Explica conceitos como recursos, métodos HTTP, templates de caminho e anotações para mapear recursos e métodos. Também fornece exemplos simples de implementação de recursos RESTful com JAX-RS.
Testes em aplicações JEE: Montando sua infra de testes automatizadosDiego Santos
A empresa 4linux é pioneira no ensino de Linux à distância no Brasil, com mais de 30.000 alunos satisfeitos. Ela possui experiência em missões críticas, é parceira de treinamento da IBM e foi a primeira empresa no Brasil a oferecer certificação LPI.
Aqui são apresentados as técnicas de Desenvolvimento com xdoclet de formas simples e prática.
/**Depois que entrei no mundo Java, começei a procurar por conteúdo na internet para estudar, então me deparei com um ótimo site, http://www.argonavis.com.br, de um grande cara chamado Helder Rocha, que disponibiliza este mesmo conteúdo em seu site também. Obrigado pela ajuda a comunidade.*/
O documento discute as principais ferramentas de automação de builds, como Ant, Maven e Gradle. O Gradle é apresentado como uma alternativa que foca nos pontos positivos das outras ferramentas, como flexibilidade do Ant, convenções do Maven e gerenciamento de dependências, ao mesmo tempo em que resolve problemas como verbosidade e rigidez. O Gradle oferece funcionalidades como plugins, tasks, gerenciamento de dependências e integração com outros sistemas de forma declarativa.
1. O documento discute os conceitos e mecanismos de segurança padrão no Java EE, incluindo autenticação, autorização e comunicação segura.
2. São descritos os principais componentes de segurança como realms, principals, roles e as APIs de autenticação como BASIC, DIGEST e FORM.
3. São explicados os processos de autenticação na camada web e em componentes EJB, assim como o uso de SSL/TLS para comunicação segura.
O documento descreve os principais conceitos e componentes do framework Zend, incluindo: 1) definição de framework; 2) princípio DRY; 3) arquitetura MVC; 4) componentes como controladores, models e views; 5) configuração do bootstrap.
Este documento fornece instruções sobre como criar tags personalizadas em JavaServer Pages (JSP). Explica que as tags são criadas implementando interfaces como Tag ou BodyTag e registrando no arquivo de descritor de tag library (TLD). Também resume os principais passos para criar uma tag simples, como escrever a classe de tag e declará-la no TLD.
O documento apresenta uma introdução à linguagem JavaScript e à stack MEAN (MongoDB, Express, Angular e Node.js). Em 3 frases:
1) Apresenta os conceitos básicos de JavaScript como variáveis, tipos, operadores, funções e objetos.
2) Explica o que é Node.js e como usar JavaScript no backend para construir aplicações web fullstack.
3) Introduz os principais componentes da stack MEAN para desenvolvimento de aplicações web e mobile usando MongoDB, Express, Angular e Node.
O documento fornece um resumo sobre JDBC (Java Database Connectivity), descrevendo suas principais características como uma interface baseada em Java para acesso a bancos de dados através de SQL e apresentando conceitos como DriverManager, Connection, Statement, ResultSet e transações.
O documento discute três princípios para programação livre de XML:
1) Configuração dentro do código em vez de arquivos XML externos
2) Transferência de dados usando JSON em vez de XML
3) Projetar linguagens de programação para serem mais humanas
1) O documento apresenta o Java Persistence API (JPA) e como mapear classes de entidade para tabelas no banco de dados usando anotações. 2) É mostrado como fazer operações básicas como inclusão, alteração, exclusão e consulta de registros usando testes unitários com JUnit. 3) Também são demonstrados relacionamentos entre classes como herança, many-to-one e consultas.
Apresentação feita no Latinoware 2010 apresentando o conceito de Dependency Injection no PHP 5.3.
Esta palestra é uma tradução e simplificação da palestra Dependency Injection in PHP 5.3 de Fabien Potencier.
O documento resume as principais características e mudanças introduzidas nas versões Java 9, 10 e 11. Java 9 trouxe a modularização do JDK, ferramentas como o jlink e jdeps, arquivos JAR multi-versão e melhorias na API de coleções. Java 10 adicionou inferência de tipo para variáveis locais, melhor apoio a Docker e compartilhamento de classes de aplicativos. Java 11 removeu módulos legados, adicionou o Flight Recorder e algoritmos criptográficos ChaCha20 e Poly1305.
Aqui são apresentados conceitos básicos a plataforma Java. Simples e rápido.
/**Depois que entrei no mundo Java, começei a procurar por conteúdo na internet para estudar, então me deparei com um ótimo site, http://www.argonavis.com.br, de um grande cara chamado Helder Rocha, que disponibiliza este mesmo conteúdo em seu site também. Obrigado pela ajuda a comunidade.*/
Este documento fornece uma introdução ao framework Cactus, que permite testar componentes J2EE no próprio container do servidor. Resume as principais funcionalidades do Cactus em 3 frases:
Cactus estende o JUnit para permitir testar a integração de aplicações J2EE como servlets, JSPs e EJBs com o container do servidor, executando os testes simultaneamente no cliente e no servidor. Ele simula requisições HTTP para testar a funcionalidade dos componentes e verificar se os dados são processados corretamente. Cactus permite
O documento discute coleções em Java, abordando tópicos como vetores, listas, conjuntos, mapas, iteradores e classes relacionadas. É apresentada a interface Collection e suas subclasses principais (List e Set), com exemplos de implementações como ArrayList, LinkedList, HashSet e HashMap.
Aqui são apresentados conceitos básicos sobre o paradigma web. Simples e rápido.
/**Depois que entrei no mundo Java, começei a procurar por conteúdo na internet para estudar, então me deparei com um ótimo site, http://www.argonavis.com.br, de um grande cara chamado Helder Rocha, que disponibiliza este mesmo conteúdo em seu site também. Obrigado pela ajuda a comunidade.*/
O documento discute objetos distribuídos em Java, abordando tecnologias como Enterprise JavaBeans, Java RMI, RMI-IIOP e CORBA. Apresenta os principais conceitos e etapas para desenvolvimento de aplicações distribuídas nessas tecnologias.
Este documento descreve as características dos entity beans com persistência gerenciada pelo container (CMP) em EJB. Em três frases: (1) CMP permite que o programador se concentre apenas na lógica de negócios, sem ter que lidar diretamente com a persistência; (2) O container gera automaticamente o código para realizar operações de banco de dados, como criação de tabelas e implementação de métodos de acesso; (3) As consultas aos dados são feitas através da linguagem EJB-QL, mapeada pelo container para SQL.
Las reglas de netiqueta tratan de regular la conducta de los usuarios en internet para que sean educados y respetuosos. Algunas de las reglas principales incluyen tratar a los demás con respeto, ser razonable y ético para no afectar a otros, y ser conscientes de los límites de lo permitido en cada sitio o chat.
Este documento resume um módulo sobre a ferramenta XDoclet, que permite gerar automaticamente artefatos Java como EJBs a partir de código-fonte e comentários Javadoc. O documento explica como configurar o XDoclet no Ant, criar templates, e usar a tarefa EJBDocletTask para gerar interfaces, deployment descriptors e outros arquivos para EJBs.
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)Helder da Rocha
Este documento fornece um tutorial sobre o desenvolvimento de serviços web RESTful usando a especificação JAX-RS no Java EE 7. Explica conceitos como recursos, métodos HTTP, templates de caminho e anotações para mapear recursos e métodos. Também fornece exemplos simples de implementação de recursos RESTful com JAX-RS.
Testes em aplicações JEE: Montando sua infra de testes automatizadosDiego Santos
A empresa 4linux é pioneira no ensino de Linux à distância no Brasil, com mais de 30.000 alunos satisfeitos. Ela possui experiência em missões críticas, é parceira de treinamento da IBM e foi a primeira empresa no Brasil a oferecer certificação LPI.
Aqui são apresentados as técnicas de Desenvolvimento com xdoclet de formas simples e prática.
/**Depois que entrei no mundo Java, começei a procurar por conteúdo na internet para estudar, então me deparei com um ótimo site, http://www.argonavis.com.br, de um grande cara chamado Helder Rocha, que disponibiliza este mesmo conteúdo em seu site também. Obrigado pela ajuda a comunidade.*/
O documento discute as principais ferramentas de automação de builds, como Ant, Maven e Gradle. O Gradle é apresentado como uma alternativa que foca nos pontos positivos das outras ferramentas, como flexibilidade do Ant, convenções do Maven e gerenciamento de dependências, ao mesmo tempo em que resolve problemas como verbosidade e rigidez. O Gradle oferece funcionalidades como plugins, tasks, gerenciamento de dependências e integração com outros sistemas de forma declarativa.
1. O documento discute os conceitos e mecanismos de segurança padrão no Java EE, incluindo autenticação, autorização e comunicação segura.
2. São descritos os principais componentes de segurança como realms, principals, roles e as APIs de autenticação como BASIC, DIGEST e FORM.
3. São explicados os processos de autenticação na camada web e em componentes EJB, assim como o uso de SSL/TLS para comunicação segura.
O documento descreve os principais conceitos e componentes do framework Zend, incluindo: 1) definição de framework; 2) princípio DRY; 3) arquitetura MVC; 4) componentes como controladores, models e views; 5) configuração do bootstrap.
Este documento fornece instruções sobre como criar tags personalizadas em JavaServer Pages (JSP). Explica que as tags são criadas implementando interfaces como Tag ou BodyTag e registrando no arquivo de descritor de tag library (TLD). Também resume os principais passos para criar uma tag simples, como escrever a classe de tag e declará-la no TLD.
O documento apresenta uma introdução à linguagem JavaScript e à stack MEAN (MongoDB, Express, Angular e Node.js). Em 3 frases:
1) Apresenta os conceitos básicos de JavaScript como variáveis, tipos, operadores, funções e objetos.
2) Explica o que é Node.js e como usar JavaScript no backend para construir aplicações web fullstack.
3) Introduz os principais componentes da stack MEAN para desenvolvimento de aplicações web e mobile usando MongoDB, Express, Angular e Node.
O documento fornece um resumo sobre JDBC (Java Database Connectivity), descrevendo suas principais características como uma interface baseada em Java para acesso a bancos de dados através de SQL e apresentando conceitos como DriverManager, Connection, Statement, ResultSet e transações.
O documento discute três princípios para programação livre de XML:
1) Configuração dentro do código em vez de arquivos XML externos
2) Transferência de dados usando JSON em vez de XML
3) Projetar linguagens de programação para serem mais humanas
1) O documento apresenta o Java Persistence API (JPA) e como mapear classes de entidade para tabelas no banco de dados usando anotações. 2) É mostrado como fazer operações básicas como inclusão, alteração, exclusão e consulta de registros usando testes unitários com JUnit. 3) Também são demonstrados relacionamentos entre classes como herança, many-to-one e consultas.
Apresentação feita no Latinoware 2010 apresentando o conceito de Dependency Injection no PHP 5.3.
Esta palestra é uma tradução e simplificação da palestra Dependency Injection in PHP 5.3 de Fabien Potencier.
O documento resume as principais características e mudanças introduzidas nas versões Java 9, 10 e 11. Java 9 trouxe a modularização do JDK, ferramentas como o jlink e jdeps, arquivos JAR multi-versão e melhorias na API de coleções. Java 10 adicionou inferência de tipo para variáveis locais, melhor apoio a Docker e compartilhamento de classes de aplicativos. Java 11 removeu módulos legados, adicionou o Flight Recorder e algoritmos criptográficos ChaCha20 e Poly1305.
Aqui são apresentados conceitos básicos a plataforma Java. Simples e rápido.
/**Depois que entrei no mundo Java, começei a procurar por conteúdo na internet para estudar, então me deparei com um ótimo site, http://www.argonavis.com.br, de um grande cara chamado Helder Rocha, que disponibiliza este mesmo conteúdo em seu site também. Obrigado pela ajuda a comunidade.*/
Este documento fornece uma introdução ao framework Cactus, que permite testar componentes J2EE no próprio container do servidor. Resume as principais funcionalidades do Cactus em 3 frases:
Cactus estende o JUnit para permitir testar a integração de aplicações J2EE como servlets, JSPs e EJBs com o container do servidor, executando os testes simultaneamente no cliente e no servidor. Ele simula requisições HTTP para testar a funcionalidade dos componentes e verificar se os dados são processados corretamente. Cactus permite
O documento discute coleções em Java, abordando tópicos como vetores, listas, conjuntos, mapas, iteradores e classes relacionadas. É apresentada a interface Collection e suas subclasses principais (List e Set), com exemplos de implementações como ArrayList, LinkedList, HashSet e HashMap.
Aqui são apresentados conceitos básicos sobre o paradigma web. Simples e rápido.
/**Depois que entrei no mundo Java, começei a procurar por conteúdo na internet para estudar, então me deparei com um ótimo site, http://www.argonavis.com.br, de um grande cara chamado Helder Rocha, que disponibiliza este mesmo conteúdo em seu site também. Obrigado pela ajuda a comunidade.*/
O documento discute objetos distribuídos em Java, abordando tecnologias como Enterprise JavaBeans, Java RMI, RMI-IIOP e CORBA. Apresenta os principais conceitos e etapas para desenvolvimento de aplicações distribuídas nessas tecnologias.
Este documento descreve as características dos entity beans com persistência gerenciada pelo container (CMP) em EJB. Em três frases: (1) CMP permite que o programador se concentre apenas na lógica de negócios, sem ter que lidar diretamente com a persistência; (2) O container gera automaticamente o código para realizar operações de banco de dados, como criação de tabelas e implementação de métodos de acesso; (3) As consultas aos dados são feitas através da linguagem EJB-QL, mapeada pelo container para SQL.
Las reglas de netiqueta tratan de regular la conducta de los usuarios en internet para que sean educados y respetuosos. Algunas de las reglas principales incluyen tratar a los demás con respeto, ser razonable y ético para no afectar a otros, y ser conscientes de los límites de lo permitido en cada sitio o chat.
[1] O documento descreve os serviços básicos de localização de recursos no Java EE, incluindo localização de componentes, fontes de dados e objetos compartilhados através da interface JNDI.
[2] JNDI permite associar nomes a recursos computacionais como objetos e referências, e localizar recursos a partir de seus nomes. Contextos formam um sistema de nomes hierárquico onde objetos podem ser mapeados.
[3] O documento explica conceitos-chave de JNDI como contextos, sistemas de nomes,
Este documento presenta un proyecto para crear un móvil inspirado en la obra de arte "El amor del colibrí" de Manuel Ocaranza, con el objetivo de promover y vender obras del Museo Nacional de Arte. Describe el proceso de diseño del móvil, incluidos los bocetos, módulos, empaque y folleto promocional. También resume la biografía de Ocaranza, la obra de arte en sí, y el mercado objetivo y estrategia de marketing para el móvil.
Este documento fornece uma introdução aos principais componentes e conceitos dos Enterprise JavaBeans (EJB), incluindo:
1) Os componentes necessários para implantar um EJB corretamente são uma classe bean, interfaces, descritor de implantação.
2) As classes bean implementam a lógica de negócios e podem acessar o contexto do EJB através da interface EJBContext.
3) Os interceptadores EJBObject e EJBHome gerados pelo container permitem acesso remoto e local aos beans e implementam serviços do EJB.
Este documento discute Entity Beans no Java EE. [1] Introduz conceitos básicos de Entity Beans como objetos persistentes que representam dados armazenados em bancos de dados. [2] Apresenta os tipos de Entity Beans (BMP e CMP) e explica como eles sincronizam instâncias em memória com dados no banco de dados. [3] Fornece exemplos de interfaces, classes primárias e métodos para criar e acessar Entity Beans.
O documento descreve os conceitos de Stateful Session Beans no Java EE, incluindo: 1) Stateful Session Beans mantêm estado entre chamadas de método através de ativação e passivação; 2) Métodos como ejbCreate(), ejbRemove(), ejbPassivate() e ejbActivate() são implementados; 3) O ciclo de vida de um Stateful Session Bean é gerenciado pelo container.
O documento descreve os conceitos básicos de objetos remotos em Java usando RMI. Ele explica que objetos remotos permitem que métodos sejam chamados remotamente como se fossem locais, e que RMI usa proxies e stubs para abstrair a complexidade da comunicação em rede. Ele também resume os 10 passos principais para implementar objetos remotos em RMI: 1) definir a interface remota, 2) implementar o objeto remoto, 3) estabelecer um servidor, 4) compilar, 5) gerar stubs e skeletons, 6) escrever e compilar o
Este documento fornece um resumo sobre o Apache Ant, uma ferramenta para gerenciamento de projetos Java baseada em arquivos XML. O documento explica como o Apache Ant pode ser usado para automatizar tarefas como compilação, empacotamento, documentação e teste.
Este documento apresenta o Apache Ant, uma ferramenta para gerenciamento de projetos Java baseada em scripts XML. O Ant permite automatizar tarefas como compilação, empacotamento, documentação e testes através de alvos e tarefas definidos no arquivo build.xml. Ele oferece mais de 130 tarefas pré-definidas e pode ser estendido através de novas tarefas ou scripts JavaScript.
O documento fornece instruções sobre como estruturar e gerenciar projetos Java usando a ferramenta Ant. Ele explica como criar um arquivo build.xml e estruturar diretórios para armazenar código-fonte, classes compiladas e outros artefatos. Também descreve alvos comuns no build.xml como compilar, empacotar, testar e implantar aplicações.
Apresentação feita no MeetUp do SouJava Campinas.
Nessa apresentação explicamos os conceitos básicos de Gradle utilizando diversos exemplos. No final apresentamos algumas características que fazem de Gradle uma ótima opção para usar no seu próximo projeto.
Exemplos disponíveis em: https://github.com/wrpinheiro/gradle-soujava-meetup
O documento descreve o Maven, uma ferramenta de gerenciamento e construção de projetos Java. O Maven revolucionou o gerenciamento de dependências, introduzindo o conceito de repositório central. Ele define padrões para estrutura de projeto, dependências, builds e plugins. Projetos no Maven são definidos através do arquivo pom.xml.
O documento apresenta o DeltaSpike, um conjunto de extensões portáteis para CDI que fornecem funcionalidades úteis para aplicações Java que não são suportadas pela especificação CDI. O DeltaSpike inclui módulos para segurança, JPA, JSF, validação de beans, agendamento de tarefas e outros que facilitam o desenvolvimento com CDI. O DeltaSpike não é um framework completo, mas sim um conjunto de ferramentas que estendem as capacidades do CDI.
Este documento apresenta um projeto desenvolvido em Node.js para a aula 2 de Tópicos Avançados de Programação. Nele, é criado um projeto com npm init, implementado programas "Hello World", de manipulação de JSON e argumentos de linha de comando, e demonstrados recursos como leitura/escrita de arquivos e uso de módulos e pacotes npm.
O documento descreve um curso de programação de sistemas para desktop em Java. Ele inclui informações sobre avaliações, ementa, objetivos, conteúdo sobre Java e instalação do JDK.
Play Framework - Desenvolvendo Aplicações Web com Java sem DorAllyson Barros
O documento apresenta o framework Play! para desenvolvimento de aplicações web com Java. Apresenta uma introdução ao framework, instruções de instalação e configuração, criação de modelos, controllers e views, utilização de módulos e deploy da aplicação.
O documento descreve como configurar um ambiente de desenvolvimento Java usando ferramentas open-source como JEdit, Ant e JSDK. Ele fornece instruções detalhadas sobre como instalar e personalizar essas ferramentas, criar projetos e templates no JEdit, e usar o console e ErrorList.
O documento apresenta uma introdução ao framework Spring Boot para desenvolvimento de aplicações Java. Apresenta os principais conceitos como criação de projetos, configuração automática de dependências, execução de aplicações e deploy em produção. Também mostra exemplos práticos de integração com Spring Data para banco MongoDB e exposição de serviços RESTful.
Aqui são apresentados conceitos básicos sobre o paradigma web. Simples e rápido.
/**Depois que entrei no mundo Java, começei a procurar por conteúdo na internet para estudar, então me deparei com um ótimo site, http://www.argonavis.com.br, de um grande cara chamado Helder Rocha, que disponibiliza este mesmo conteúdo em seu site também. Obrigado pela ajuda a comunidade.*/
O documento discute o Apache DeltaSpike, um conjunto de extensões portáteis para o CDI que fornece funcionalidades úteis para aplicações Java. O DeltaSpike inclui módulos como segurança, JPA, JSF e agendamento de tarefas. Ele permite injeção de dependência tipada, configuração de projeto, recursos injetáveis e internacionalização de mensagens. O DeltaSpike facilita o desenvolvimento Java usando o CDI sem ser um framework completo.
TDC 2015 - Rails & Javascript: faça isso direitoCezinha Anjos
Este talk propõe mostrar para você como construir um app Rails (não SPA) com uma estrutura organizada de Javascript. Você terá oportunidade de ver conceitos como injeção de dependência, single point entry, dispatcher, promises, IIFE, templates JS, Named Routes JS e muito mais? tudo isso aplicado na prática (e tudo junto). Chega de produzir brown fileds! Faça você também a coisa certa.
O documento fornece uma visão geral e comparação de três frameworks PHP populares: Zend Framework 2, CodeIgniter e Yii. Descreve os recursos, comunidades de suporte, bancos de dados suportados, facilidade de desenvolvimento e sites que utilizam cada framework.
1. O documento descreve um seminário sobre Java oferecido pela Sun Microsystems, apresentando os cursos, palestrantes e agenda do evento.
2. A tecnologia Java é introduzida, destacando suas origens, conceitos como orientação a objetos, portabilidade, segurança e desempenho.
3. Instruções para instalação do Java Development Kit (JDK) são fornecidas para preparar os participantes para o desenvolvimento de aplicativos Java.
Zend Framework 2 é legal ! Mas como ele funciona ?!Alefe Variani
Falando um pouco sobre o framework - Zend Framework 2, mostrando como é sua estrutura inicial e o que acontece quando você 'roda' sua aplicação.
Artigo de referência: frameworksphp.com.br/zend-framework-2-legal-mas-como-ele-funciona
Apresentação do PHPub Chapecó dia 20/11/2014.
Este documento fornece instruções para configurar um ambiente de desenvolvimento Java usando ferramentas open-source como JEdit, Ant e JDK. Ele descreve como instalar e personalizar essas ferramentas, criar projetos no JEdit, usar plug-ins e executar compilações com Ant. O documento também discute problemas comuns e alternativas de IDEs.
Aqui são apresentados conceitos básicos a plataforma Java. Simples e rápido.
/**Depois que entrei no mundo Java, começei a procurar por conteúdo na internet para estudar, então me deparei com um ótimo site, http://www.argonavis.com.br, de um grande cara chamado Helder Rocha, que disponibiliza este mesmo conteúdo em seu site também. Obrigado pela ajuda a comunidade.*/
O documento fornece um resumo sobre o framework JDBC no Java, descrevendo suas principais características como interface baseada em Java para acesso a bancos de dados através de SQL e como permite integrar aplicações Java com bancos de dados relacionais.
Este documento fornece informações sobre como construir aplicações gráficas e applets em Java. Ele discute as bibliotecas AWT e Swing para interfaces gráficas, componentes como JFrame e JButton, layouts como FlowLayout e BorderLayout, e como criar applets e aplicações que podem rodar tanto no navegador quanto em uma janela standalone.
O documento discute classes internas em Java, incluindo suas quatro categorias (classes dentro de instruções, métodos, objetos e estáticas) e seus usos. Classes internas podem ser usadas para maior reutilização de código e flexibilidade, mas também aumentam a complexidade do código.
O documento discute entrada e saída de dados em Java, abordando classes como File, InputStream, OutputStream, Reader, Writer e RandomAccessFile para manipulação de arquivos e fluxos de dados. Também apresenta tópicos como serialização de objetos, compactação com GZIP e recursos básicos de logging.
O documento discute coleções em Java, incluindo vetores, listas, conjuntos e mapas. Ele explica como manipular e ordenar coleções usando a API Collections e classes como ArrayList, LinkedList, HashSet e TreeMap. Além disso, aborda tópicos como interfaces Collection e Map, comparáveis e comparadores.
O documento apresenta os fundamentos da programação concorrente em Java, discutindo tópicos como threads, classes Thread e Runnable, controle de threads, deadlocks e comunicação entre threads usando wait() e notify(). É apresentado um exemplo de produtor-consumidor usando uma pilha compartilhada para ilustrar o uso desses conceitos.
Este documento fornece uma introdução aos testes de unidade com a ferramenta JUnit em Java. Ele discute os objetivos e benefícios dos testes de unidade, apresenta os conceitos fundamentais do JUnit e fornece exemplos de como implementar testes com JUnit.
O documento discute o controle de erros em Java usando exceções. Resumidamente:
1. Exceções são objetos que sinalizam condições excepcionais em tempo de execução e podem ser capturadas usando blocos try-catch.
2. Há três tipos principais de erros em tempo de execução: erros de lógica, erros devido a condições ambientais, e erros graves onde não há recuperação possível.
3. Exceções podem ser lançadas usando throw e capturadas em métodos an
O documento descreve os conceitos de polimorfismo e interfaces em Java. [1] Polimorfismo permite que objetos de subclasses sejam usados no lugar de objetos da classe pai, desde que implementem a mesma interface. [2] Isso garante que programas podem usar objetos de forma genérica através de interfaces, sem precisar conhecer as subclasses específicas.
O documento discute técnicas de reuso em Java, como herança e composição. Apresenta quando usar cada uma e como implementá-las corretamente, incluindo o uso de modificadores como public, protected, private e final.
Este documento discute pacotes e encapsulamento em Java, abordando os principais pacotes da API Java como java.lang e java.util, além de explicar como criar pacotes e classes em Java, implementando métodos como equals() e clone().
Este documento discute conceitos importantes sobre construção de classes e objetos em Java, incluindo: 1) como criar construtores e sobrecarregá-los; 2) o uso de this() e super() em construtores; 3) problemas com a inicialização de objetos.
Este documento discute operadores e estruturas de controle de fluxo na linguagem Java. Ele explora os tipos de operadores matemáticos, lógicos e de atribuição, bem como estruturas como if/else, for loops e while loops. O documento também discute conversão e promoção de tipos, além de operadores como instanceof.
O documento fornece instruções sobre como usar a documentação da API Java, explicando onde ela está localizada na instalação do Java SDK, como navegar pela documentação online e encontrar classes, métodos e detalhes técnicos. Ele também apresenta exemplos de como gerar documentação JavaDoc para classes personalizadas.
Este documento fornece um resumo dos principais conceitos de programação orientada a objetos em Java, incluindo:
(1) Conceitos como classe, objeto, atributo, método e interface;
(2) Características da OO como abstração, encapsulamento, herança e polimorfismo;
(3) Sintaxe Java para construção de classes e objetos.
O documento fornece uma introdução à tecnologia Java, abordando seus principais conceitos e ferramentas. Em 3 frases:
Apresenta os conceitos fundamentais da linguagem Java, como classes, objetos e APIs, além da máquina virtual Java. Detalha as ferramentas do SDK para desenvolvimento de aplicações Java, como o compilador javac e interpretador java. Fornece exemplos práticos de aplicações Java simples para familiarizar o leitor com os conceitos apresentados.
Este documento fornece uma introdução aos conceitos básicos de programação de rede em Java, cobrindo classes como Socket, ServerSocket e URL. Ele explica como criar clientes e servidores TCP/IP, ler e escrever dados de conexões e endereçamento na Internet. O documento também inclui exercícios para aplicar os conceitos aprendidos.
Este documento descreve uma aplicação J2EE completa como exemplo para um laboratório sobre EJB e J2EE. A aplicação simula uma loja online simples com relacionamentos entre entidades como Produto, Cliente e Compra. Inclui entity beans, session beans, message-driven beans, tabelas no banco de dados, interfaces, deploy e testes de clientes.
O documento descreve os conceitos de autenticação e controle de acesso em EJB. A especificação EJB define autenticação de clientes e controle de acesso a métodos de forma declarativa, mas não abrange outros aspectos de segurança. O Java Authentication and Authorization Service (JAAS) é usado para implementar a autenticação, enquanto papéis lógicos mapeados a usuários e grupos determinam o acesso aos métodos.
Este documento discute transações em aplicações EJB, incluindo controle de transações em diferentes tipos de beans, formas de demarcar transações (explícita e implícita), propagação de transações, níveis de isolamento e relação entre exceções e transações.
As classes de modelagem podem ser comparadas a moldes ou
formas que definem as características e os comportamentos dos
objetos criados a partir delas. Vale traçar um paralelo com o projeto de
um automóvel. Os engenheiros definem as medidas, a quantidade de
portas, a potência do motor, a localização do estepe, dentre outras
descrições necessárias para a fabricação de um veículo
A linguagem C# aproveita conceitos de muitas outras linguagens,
mas especialmente de C++ e Java. Sua sintaxe é relativamente fácil, o que
diminui o tempo de aprendizado. Todos os programas desenvolvidos devem
ser compilados, gerando um arquivo com a extensão DLL ou EXE. Isso torna a
execução dos programas mais rápida se comparados com as linguagens de
script (VBScript , JavaScript) que atualmente utilizamos na internet
1. J530 - Enterprise JavaBeans
Introdução ao
Apache Ant
Helder da Rocha (helder@acm.org)
argonavis.com.br
1
2. Tópicos abordados
Este módulo tem como finalidade introduzir a
principal ferramenta utilizada no ambiente de
desenvolvimento usado neste curso
Ant é uma ferramenta de código aberto e é o padrão
de fato do mercado para gerenciamento de projetos
independentes de IDEs proprietárias
Por que Ant?
Os melhores projetos open-source usam Ant
Várias aplicações J2EE dependem do Ant
Ant pode ser integrada e usada como principal
ferramenta de construção nos principais ambientes de
desenvolvimento comerciais
2
3. O que é Ant?
Uma ferramenta para construção de aplicações
Implementada em Java
Baseada em roteiros XML
Extensível (via scripts ou classes)
'padrão' do mercado
Open Source (Grupo Apache, Projeto Jakarta)
Semelhante a make, porém
Mais simples e estruturada (XML)
Mais adequada a tarefas comuns em projetos Java
Independente de plataforma
Onde encontrar: http://ant.apache.org
3
4. Para que serve?
Para montar praticamente qualquer aplicação Java
que consista de mais que meia dúzia de classes;
Aplicações
Distribuídas em pacotes
Que requerem a definição de classpaths locais, e
precisam vincular código a bibliotecas (JARs)
Cuja criação/instalação depende de mais que uma
simples chamada ao javac. Ex: RMI, CORBA, EJB,
servlets, JSP,...
Para automatizar processos frequentes
Javadoc, XSLT, implantação de serviços Web e J2EE
(deployment), CVS, criação de JARs, testes, FTP, email
4
5. Como funciona?
Ant executa roteiros escritos em XML: 'buildfiles'
Cada projeto do Ant possui um buildfile
Subprojetos podem ter, opcionalmente, buildfiles
adicionais chamados durante a execução do primeiro
Cada projeto possui uma coleção de alvos
Cada alvo consiste de uma seqüência de tarefas
Exemplos de execução
ant
Procura build.xml no diretório atual e roda alvo default
ant -buildfile outro.xml
Executa alvo default de arquivo outro.xml
ant compilar
Roda alvo 'compilar' e possíveis dependências em build.xml
5
7. Buildfile
O buildfile é um arquivo XML: build.xml (default)
Principais elementos
<project default="alvo_default">
Elemento raiz (obrigatório): define o projeto.
<target name="nome_do_alvo">
Coleção de tarefas a serem executadas em seqüência
Pode-se estabelecer dependências entre alvos
Deve haver pelo menos um <target>
<property name="nome" value="valor">
Pares nome/valor usados em atributos dos elementos do
build.xml da forma ${nome}
Propriedades também podem ser definidas em linha de comando
(-Dnome=valor) ou lidas de arquivos externos (atributo file)
Tarefas (mais de 130) - usadas dentro dos alvos.
<javac>, <jar>, <java>, <copy>, <mkdir>, ...
7
9. Exemplo
Executando buildfile da página anterior
C:usrpalestraantdemo> ant
Buildfile: build.xml
init:
[mkdir] Created dir:
C:usrpalestraantdemoclasses
compile:
[javac] Compiling 2 source files to
C:usrpalestraantdemoclasses
BUILD SUCCESSFUL
Total time: 4 seconds
C:usrpalestraantdemo> ant clean
Buildfile: build.xml
clean:
[delete] Deleting dir:
C:usrpalestraantdemoclasses
BUILD SUCCESSFUL
Total time: 2 seconds
C:usrpalestraantdemo>
ANTES de 'ant'
DEPOIS de 'ant clean'
build.xml
src
argonavis
util
Tiracentos.java
TiracentosTest.java
DEPOIS de 'ant' ou 'ant compile'
build.xml
src
argonavis
util
Tiracentos.java
TiracentosTest.java
classes
argonavis
util
Tiracentos.class
TiracentosTest.class
9
10. Dependências
Fazem com que a chamada de um alvo cause a
chamada de outros alvos, em determinada ordem
Promovem reuso de código
<target
<target
<target
<target
<target
<target
<target
<target
<target
init
name="init" />
name="clean" />
name="compile" depends="init"/>
name="javadoc" depends="compile"/>
name="build"
depends="compile"/>
name="test"
depends="build"/>
name="deploy" depends="build"/>
name="email"
depends="archive"/>
name="archive"
depends="build, javadoc"/>
<target name="re-deploy"
depends="clean, deploy"/>
compile
javadoc
build
test
deploy
1
archive
2
2
re-deploy
1
clean
email
10
11. Tarefas condicionadas
Algumas tarefas só são executadas dentro de
determinadas condições
<mkdir> só cria o diretório se este não existir
<delete> só apaga o que existe (não faz nada se
arquivo ou diretório não existir)
<javac> compila apenas os arquivos *.java que foram
modificados desde a última compilação
Comportamento condicional do <javac> depende
da estrutura de pacotes
É preciso que a estrutura de diretórios dos fontes
(diretório src/) reflita a estrutura de pacotes
Ex: se Conta.java declara pertencer a pacote banco,
deve estar em diretório banco dentro de src/
11
12. O que se pode fazer com Ant?
•
Compilar.
•
<copy>, <delete>, <mkdir>,
<unjar>, <unwar>, <unzip>
<javac>, <csc>
•
Gerar documentação
<javadoc>, <junitreport>,
<style>, <stylebook>
•
Gerar código (XDoclet)
<ejbdoclet>, <webdoclet>
•
Executar programas
<java>, <apply>, <exec>
<ant>, <sql>
•
Empacotar e comprimir
<jar>, <zip>, <tar>,
<war>, <ear>, <cab>
Expandir, copiar, instalar
•
Acesso remoto
<ftp>, <telnet>, <cvs>,
<mail>, <mimemail>
•
Montar componentes
<ejbc>, <ejb-jar>, <rmic>
•
Testar unidades de código
<junit>
•
Executar roteiros e sons
<script>, <sound>
•
Criar novas tarefas
<taskdef>
12
13. Tarefas úteis (1)
<javac>: Chama o compilador Java
<javac srcdir="dirfontes" destdir="dirbuild" >
<classpath>
<pathelement path="arquivo.jar" />
<pathelement path="/arquivos" />
</classpath>
<classpath idref="extra" />
</javac>
<jar>: Monta um JAR
<jar destfile="bin/executavel.jar">
<manifest>
<attribute name="Main-class"
value="exemplo.main.Exec">
</manifest>
<fileset dir="${build.dir}"/>
</jar>
13
15. Tipos de dados (1)
<fileset>: árvore de arquivos e diretórios
Conteúdo do conjunto pode ser reduzido utilizando
elementos <include> e <exclude>
Usando dentro de tarefas que manipulam com arquivos e
diretórios como <copy>, <zip>, etc.
<copy todir="${build.dir}/META-INF">
<fileset dir="${xml.dir}" includes="ejb-jar.xml"/>
<fileset dir="${xml.dir}/jboss">
<include name="*.xml" />
<exclude name="*-orig.xml" />
</fileset>
</copy>
Árvore a ser copiada para ${build.dir}/META-INF consiste de
• O arquivo ejb-jar.xml localizado em ${xml.dir}
• Todos os arquivos .xml de ${xml.dir}/jboss com exceção dos arquivos
terminados em -orig.xml
15
16. Tarefas úteis (3)
<javadoc>: Gera documentação do código-fonte.
Exemplo: alvo generate-docs abaixo gera documentação
excluindo classes que terminam em 'Test.java'
<target name="generate-docs">
Copiar de ${src.dir}
<mkdir dir="docs/api"/>
<copy todir="tmp">
<fileset dir="${src.dir}">
<include name="**/*.java" />
<exclude name="**/**Test.java" />
</fileset>
Procurar em todos os
</copy>
subdiretórios
<javadoc destdir="docs/api"
packagenames="argonavis.*"
sourcepath="tmp" />
<delete dir="tmp" />
</target>
Onde achar as fontes
16
17. Propriedades
Podem ser definidas com <property>
<property name="app.nome" value="jmovie" />
Podem ser carregadas de um arquivo
<property file="c:/conf/arquivo.properties" />
app.ver=1.0
docs.dir=c:docs
codigo=15323
arquivo.properties
Podem ser passadas na linha de comando
c:> ant -Dautor=Wilde
Para recuperar o valor, usa-se ${nome}
<jar destfile="${app.nome}-${app.ver}.jar"/>
<echo message="O autor é ${autor}" />
<mkdir dir="build${codigo}" />
17
18. Propriedades especiais
<tstamp>: Grava um instante
A hora e data podem ser recuperados como propriedades
${TSTAMP}
${DSTAMP}
${TODAY}
hhmm
aaaammdd
dia mes ano
1345
20020525
25 May 2002
Novas propriedades podem ser definidas, locale, etc.
Uso típico: <tstamp/>
<property environment="env">: Propriedade de
onde se pode ler variáveis de ambiente do sistema
Dependende de plataforma
<target name="init">
<property environment="env"/>
<property name="j2ee.home"
value="env.J2EE_HOME" />
</target>
18
19. Tipos de dados (2)
<patternset>: coleção de padrões de busca
<patternset id="project.jars" >
<include name="**/*.jar"/>
<exclude name="**/*-test.jar"/>
</patternset>
<path>: coleção de caminhos
Padrões podem ser
reusados e são
identificados pelo ID
Associa um ID a grupo de arquivos ou caminhos
<path id="server.path">
<pathelement path="${j2ee.home}/lib/locale" />
<fileset dir="${j2ee.home}/lib">
<patternset refid="project.jars" />
</fileset>
</path>
<target name="compile" depends="init">
<javac destdir="${build.dir}" srcdir="${src.dir}">
<classpath refid="server.path" />
</javac>
</target>
19
20. Tipos de dados (3)
<mapper>: altera nomes de arquivos durante cópias ou
transformações (use dentro de <copy>, por exemplo)
Seis tipos: identity, flatten, merge, regexp, glob, package
build.xml
src
argonavis
util
Tiracentos.java
TiracentosTest.java
<mapper
type="package"
from="*.java"
to="*.txt"/>
<mapper
type="flatten" />
<mapper
type="glob"
from="*.java"
to="*.java.bak"/>
build.xml
src
argonavis.util.Tiracentos.txt
argonavis.util.TiracentosTest.txt
build.xml
src
Tiracentos.java
TiracentosTest.java
build.xml
src
argonavis
util
Tiracentos.java.bak
TiracentosTest.java.bak
20
21. Tipos de dados (4): filtros
<filter> e <filterset>: Permite a substituição de
padrões em arquivos durante a execução de uma tarefa
Caractere default: @
Exemplo: a cópia abaixo irá substituir todas as ocorrências de
@javahome@ por c:j2sdk1.4 nos arquivos copiados
<copy todir="${dest.dir}">
<fileset dir="${src.dir}"/>
<filterset>
<filter token="javahome" value="c:j2sdk1.4"/>
</filterset>
</copy>
Pares token=valor podem ser carregados de arquivo:
<filterset>
<filtersfile file="build.properties" />
</filterset>
21
22. Tarefas úteis (4): J2EE
<ear destfile="app.ear" appxml="application.xml">
<fileset dir="${build}" includes="*.jar,*.war"/>
</ear>
<ejbjar srcdir="${build}" descriptordir="${xml.dir}" ... >
<jboss destdir="${deployjars.dir}" />
</ejbjar>
Há suporte aos principais servidores de aplicação
<war destfile="bookstore.war" webxml="meta/metainf.xml">
<fileset dir="${build}/${bookstore2}" >
<include name="*.jsp" />
WEB-INF/web.xml
<exclude name="*.txt" />
Fileset para raiz do WAR
</fileset>
<classes dir="${build}" >
Fileset para
<include name="database/*.class" />
WEB-INF/classes
</classes>
Fileset para
<lib dir="bibliotecas" />
WEB-INF/lib
<webinf dir="etc" />
</war>
Fileset para WEB-INF/
22
23. Tarefas úteis (5): extensão
<ejbdoclet> e <webdoclet>*: Geram código
Requer JAR de xdoclet.sourceforge.net
Ideal para geração automática de arquivos de configuração
(web.xml, ejb-jar.xml, application.xml, taglibs, struts-config,
etc.) e código-fonte (beans, value-objects)
<ejbdoclet sourcepath="src" destdir="${build.dir}"
classpathref="xdoclet.path" ejbspec="2.0">
<fileset dir="src">
<include name="**/*Bean.java" />
</fileset>
<remoteinterface/>
Detalhes da configuração do
<homeinterface/>
componente estão nos comentários de
<utilobject/>
JavaDocs do código-fonte dos arquivos
<entitypk/>
envolvidos e arquivos de template
<entitycmp/>
<deploymentdescriptor destdir="${dd.dir}"/>
<jboss datasource="java:/OracleDS" />
</ejbdoclet>
* Nomes convencionais criados a partir de tarefa externa
23
24. Tarefas úteis (6): execução
<java>: executa o interpretador Java
<target name="runrmiclient">
<java classname="hello.rmi.HelloClient" fork="true">
<jvmarg value="-Djava.security.policy=rmi.policy"/>
<arg name="host" value="${remote.host}" />
<classpath refid="app.path" />
</java>
</target>
<exec>: executa um comando do sistema
<target name="orbd">
<exec executable="${java.home}binorbd">
<arg line="-ORBInitialHost ${nameserver.host}"/>
</exec>
</target>
<apply>: semelhante a <exec> mas usado em
executáveis que operam sobre outros arquivos
24
25. Tarefas úteis (7): rede
<ftp>: Realiza a comunicação com um servidor
FTP remoto para upload ou download de arquivos
Tarefa opcional que requer NetComponents.jar
(http://www.savarese.org)
<target name="remote.jboss.deploy" depends="dist">
<ftp server="${ftp.host}" port="${ftp.port}"
remotedir="/jboss/server/default/deploy"
userid="admin" password="jboss"
depends="yes" binary="yes">
<fileset dir="${basedir}">
<include name="*.war"/>
<include name="*.ear"/>
<include name="*.jar"/>
</fileset>
</ftp>
</target>
25
26. Tarefas úteis (8): XSLT
<style>: Transforma documentos XML em outros
formatos usando folha de estilos XSLT (nativa)
Usa TrAX (default), Xalan ou outro transformador XSL
<style basedir="xmldocs"
destdir="htmldocs"
style="xmltohtml.xsl" />
Elemento <param> passa valores para elementos
<xsl:param> da folha de estilos
<style in="cartao.xml"
out="cartao.html"
style="cartao2html.xsl">
<param name="docsdir"
expression="/cartoes"/>
</style>
(...)
<xsl:param name="docsdir"/>
build.xml
(...)
<xsl:valueof select="$docsdir"/>
cartao2html.xsl (...)
26
27. Tarefas úteis (9): JDBC
<sql>: Comunica-se com banco de dados através
de um driver JDBC
<property name="jdbc.url"
value="jdbc:cloudscape:rmi://server:1099/Cloud" />
<target name="populate.table">
<sql driver="COM.cloudscape.core.RmiJdbcDriver"
url="${jdbc.url}"
userid="helder"
password="helder"
onerror="continue">
<transaction src="droptable.sql" />
<transaction src="create.sql" />
<transaction src="populate.sql" />
<classpath refid="jdbc.driver.path" />
</sql>
</target>
27
28. Tarefas úteis (10): chamadas
<ant>: chama alvo de subprojeto (buildfile
<target name="run-sub">
<target name="run-sub">
externo)
<ant dir="subproj" />
</target>
Chama alvo default de build.xml
localizado no subdiretório subproj/
<ant dir="subproj" >
<property name="versao"
value="1.0" />
</ant>
</target>
Define propriedade que
será lida no outro build.xml
<target name="fazer-isto">
<antcall target="fazer">
<param name="oque"
value="isto" />
</antcall>
</target>
<target name="fazer-aquilo">
<antcall target="fazer">
<param name="oque"
value="aquilo" />
</antcall>
</target>
<antcall>: chama alvo local
<target name="fazer" if="oque">
<tarefa atributo="${oque}" />
</target>
Template!
28
29. Efeitos sonoros
<sound>: define um par de arquivos de som para
soar no sucesso ou falha de um projeto
Tarefa opcional que requer Java Media Framework
Exemplo:
No exemplo abaixo, o som festa.wav será tocado quando
o build terminar sem erros fatais. vaia.wav tocará se
houver algum erro que interrompa o processo:
<target name="init">
<sound>
<success source="C:/Media/festa.wav"/>
<fail source="C:/Media/vaia.wav"/>
</sound>
</target>
29
30. Extensão usando XML
Como o buildfile é um arquivo XML, pode-se incluir
trechos de XML externos através do uso de entidades
<property file="sound.properties" />
externas
<property file="sound.properties" />
<sound>
sound.xml
<sound>
<success source="${success.sound}"/>
<success source="${success.sound}"/>
<fail source="${fail.sound}"/>
<fail source="${fail.sound}"/>
</sound>
</sound>
<?xml version="1.0" encoding="iso-8859-1" ?>
<?xml version="1.0" encoding="iso-8859-1" ?>
<!DOCTYPE project [
<!DOCTYPE project [
<!ENTITY sound SYSTEM "sound.xml">
<!ENTITY sound SYSTEM "sound.xml">
]>
]>
<project default="dtd">
<project default="dtd">
<description>Gera um DTD para o Ant</description>
<description>Gera um DTD para o Ant</description>
<target name="init">
<target name="init">
&sound;
&sound;
</target>
</target>
<target name="dtd" depends="init">
<target name="dtd" depends="init">
<antstructure output="ant.dtd" />
<antstructure output="ant.dtd" />
</target>
</target>
</project>
</project>
30
31. Como gerenciar projetos com o Ant
Crie um diretório para armazenar seu projeto. Guarde
na sua raiz o seu build.xml
Use um arquivo build.properties para definir propriedades exclusivas
do seu projeto (assim você consegue reutilizar o mesmo build.xml em
outros projetos). Importe-o com
<property file="build.properties" />
Dentro desse diretório, crie alguns subdiretórios
src/
lib/
doc/
etc/
web/
Para armazenar o código-fonte
Opcional. Para guardar os JARs de APIs usadas
Opcional. Para guardar a documentação gerada
Opcional. Para arquivos de configuração se houver
Em projetos Web, para raiz de documentos do site
O seu Ant script deve ainda criar durante a execução
build/
dist/
Ou classes/. Onde estará o código compilado
Ou jars/ ou release/. Onde estarão JARs criados
31
32. Alvos básicos do build.xml
Você também deve padronizar os nomes dos alvos dos
seus build.xml. Alguns alvos típicos são
init
clean
compile
build
run
test
deploy
Para criar dietórios, inicializar o ambiente, etc.
Para fazer a faxina, remover diretórios gerados, etc.
Para compilar
Para construir a aplicação, integrar, criar JARs
Para executar um cliente da aplicação
Para executar os testes da aplicação
Para implantar componentes Web e EJB
Você pode usar outros nomes, mas mantenha um padrão
Também pode criar uma nomenclatura que destaque
alvos principais, usando maiúsculas. Ex:
CLEAN, chamando clean-isto, clean-aquilo, undeploy, etc.
BUILD, que chama build-depend, build-client, build-server
32
33. Exemplo de projeto
<project default="compile" name="MiniEd">
<property file="build.properties"/>
<target name="init">
<mkdir dir="${build.dir}"/>
<mkdir dir="${dist.dir}"/>
</target>
<target name="clean">
... </target>
<target name="compile"
depends="init"> ... </target>
<target name="build"
depends="compile">...</target>
<target name="javadoc"
depends="build"> ... </target>
<target name="run"
depends="build"> ... </target>
</project>
# Nome da aplicação
app.name=minied
# Nomes dos diretórios
src.dir=src
docs.dir=docs
build.dir=classes
dist.dir=jars
# Nome da classe executável
app.main.class=com.javamagazine.minied.MiniEditor
root.package=com
build.xml
Estrutura dos
arquivos (antes
de executar o Ant)
build.properties
33
34. Buildfile: aplicação gráfica executável
<project default="compile" name="MiniEd">
<property file="build.properties"/>
<target name="compile" depends="init">
<javac destdir="classes" srcdir="src">
<classpath>
<pathelement location="classes"/>
</classpath>
</javac>
</target>
Definindo o JAR com
atributo Main-class para
torná-lo executável
<target name="build" depends="compile">
<jar destfile="release/${app.name}.jar">
<manifest>
<attribute name="Main-class" value="${app.main.class}" />
</manifest>
<fileset dir="classes"/>
</jar>
</target>
<target name="run" depends="build">
<java jar="release/${app.name}.jar" fork="true" />
</target>
</project>
# Nome da aplicação – este nome será usado para criar o JAR
app.name=minied
# Nome da classe executável
app.main.class=com.javamagazine.minied.MiniEditor
34
36. Buildfile: aplicação Web
<project default="deploy" name="Aplicação Web">
build.xml
<property file="build.properties" /> <!-- init e clean omitidos -->
<target name="compile" depends="init">
<javac srcdir="src" destdir="classes">
<classpath path="${servlet.jar}" />
</javac>
</target>
<target name="war" depends="compile">
<war warfile="release/${context}.war" webxml="etc/web.xml">
<fileset dir="web" />
<classes dir="classes" />
</war>
</target>
<target name="deploy" depends="war">
<copy todir="${deploy.dir}">
<fileset dir="release">
<include name="*.war" />
</fileset>
# Localizacao do Servidor
</copy>
tomcat.home=/tomcat-4.0
</target>
</project>
build.properties
# Altere para informar dir de instalacao
deploy.dir=${tomcat.home}/webapps
# Coloque aqui nome do contexto
context=forum
# JAR com Servlet API
servlet.jar=${tomcat.home}/common/lib/servlet.jar
36
37. Buildfile: aplicação EJB
build.xml
<project name="Aplicação EJB" default="deploy">
<property file="build.properties" />
<!-- elementos <path> e <target> init, compile, clean omitidos -->
<target name="build" depends="compile">
<copy todir="classes/META-INF">
<fileset dir="etc" includes="ejb-jar.xml"/>
</copy>
<jar jarfile="release/${app.name}.jar">
<fileset dir="classes" />
</jar>
</target>
<target name="deploy" depends="build">
<copy todir="${deploy.dir}" file="release/${app.name}.jar" />
</target>
<target name="undeploy" depends="build">
<delete file="${deploy.dir}/${app.name}.jar" />
</target>
</project>
# Localizacao do Servidor
jboss.home=/jboss-3.0.0
build.properties
# Altere para informar dir de instalacao
deploy.dir=${jboss.home}/server/default/deploy
# Coloque aqui nome da aplicação
app.name=forumejb
37
38. Buildfile: transformação XSL
<project name="foptask-example" default="pdf">
<target name="setup" depends="check">
<taskdef name="fop" classname="argonavis.pdf.FopTask">
<classpath> ... </classpath>
Mescla vários XML em um único
</taskdef>
</target>
XML maior e converte em XSL-FO
<target name="many2fo" depends="init">
<style in="template.xml" out="all.xml" style="many2one.xsl">
<param name="docsdir" expression="dados"/>
</style>
<style in="all.xml" out="all.fo"
extension=".fo" style="many2fo.xsl"/>
</target>
Converte XSL-FO em PDF
<target name="many2pdf" depends="many2fo">
<fop in="all.fo" out="all.pdf" />
</target>
Converte
vários XML em HTML
<target name="html" depends="init">
<style basedir="dados" destdir="html"
extension=".html" style="toHtml.xsl" />
</target>
</project>
38
39. Integração com outras aplicações
Ant provoca vários eventos que podem ser
capturados por outras aplicações
Útil para implementar integração, enviar notificações por
email, gravar logs, etc.
Eventos
Build iniciou/terminou
Alvo iniciou/terminou
Tarefa iniciou/terminou
Mensagens logadas
Vários listeners e loggers pré-definidos
Pode-se usar ou estender classe existente.
Para gravar processo (build) em XML:
> ant -listener org.apache.tools.ant.XmlLogger
39
40. Integração com editores e IDEs
Produtos que integram com Ant e oferecem
interface gráfica e eventos para buildfiles:
Antidote: GUI para Ant (do projeto Jakarta)
http://cvs.apache.org/viewcvs/jakarta-ant-antidote/
JBuilder (AntRunner plug-in)
http://www.dieter-bogdoll.de/java/AntRunner/
NetBeans e Forté for Java
http://ant.netbeans.org/
Eclipse
http://eclipse.org
JEdit (AntFarm plug-in)
http://www.jedit.org
Jext (AntWork plug-in)
ftp://jext.sourceforge.net/pub/jext/plugins/AntWork.zip
40
41. Integração com o JEdit
Tela do AntFarm mostra alvos do Ant.
Pode-se clicar sobre o alvo para executá-lo
Resultados são mostrados
no Console do JEdit
41
42. Ant programável
Há duas formas de estender o Ant com novas funções
Implementar roteiros usando JavaScript
Criar novas tarefas reutilizáveis
A tarefa <script> permite embutir JavaScript em um
buildfile. Pode-se
Realizar operações aritméticas e booleanas
Utilizar estruturas como if/else, for, foreach e while
Manipular com os elementos do buildfile usando DOM
A tarefa <taskdef> permite definir novas tarefas
Tarefa deve ser implementada em Java e estender Task
Método execute() contém código de ação da tarefa
Cada atributo corresponde a um método setXXX()
42
43. Exemplo de script
Cria 10 diretórios pasta1, pasta2, etc. em pastas/
<project name="scriptdemo" default="makedirs" >
<property name="result.dir" value="pastas" />
Obtém referência para objeto
<target name="setup-makedirs">
que implementa tarefa mkdir
<mkdir dir="${result.dir}" />
<script language="javascript"><![CDATA[
for (i = 0; i < 10; i++) {
criadir = scriptdemo.createTask("mkdir");
// Obter propriedade ${result.dir} deste projeto
root = scriptdemo.getProperty("result.dir");
// Definir diretorio a criar
criadir.setDir(new
Packages.java.io.File(root+"/pasta"+(i+1)));
// Executa tarefa mkdir (todo Task tem um metodo execute)
criadir.execute();
}
]]></script>
</target>
<target name="makedirs" depends="setup-makedirs" />
</project>
43
44. Exemplo de definição de tarefas (1)
import org.apache.tools.ant.*;
public class ChangeCaseTask extends Task {
public static final int UPPERCASE = 1;
private String message;
private int strCase = 0;
<target name="define-task" depends="init">
<taskdef name="changecase"
classname="ChangeCaseTask">
<classpath>
<pathelement location="tasks.jar" />
</classpath>
</taskdef>
</target>
<target name="run-task" depends="define-task">
<changecase message="Mensagem simples" />
<changecase message="Mensagem em caixa-alta"
case="uppercase" />
<changecase message="Mensagem em caixa-baixa"
case="lowercase" />
</target>
public void execute() {
log( getMessage() );
}
public void setMessage(String message) {
this.message = message;
}
public void setCase(String strCase) {
if (strCase.toLowerCase().equals("uppercase"))
this.strCase = UPPERCASE;
else if (strCase.toLowerCase().equals("lowercase"))
this.strCase = -UPPERCASE;
}
public String getMessage() {
switch(strCase) {
case UPPERCASE: return message.toUpperCase();
case -UPPERCASE: return message.toLowerCase();
default: return message;
}
}
}
Trecho do build.xml usando tarefa
<changecase>
Cada atributo é definido em um
método setAtributo(String)
Método execute() chama log(), que
imprime resultado na saída do Ant
(Exceções foram ignoradas por falta
de espaço)
44
45. Conclusões
Ant é uma ferramenta indispensável em qualquer
projeto de desenvolvimento Java
Permite automatizar todo o desenvolvimento
Facilita a montagem da aplicação por outras pessoas
Ajuda em diversas tarefas essenciais do desenvolvimento
como compilar, rodar, testar, gerar JavaDocs, etc.
Independe de um IDE comercial (mas pode ser facilmente
integrado a um)
Use o Ant em todos os seus projetos
Crie sempre um projeto e um buildfile, por mais simples
que seja a sua aplicação
Escreva buildfiles que possam ser reutilizados
Desenvolva o hábito de sempre usar o Ant
45
46. Exercício
1. Monte um buildfile simples para a aplicação
MiniEd.jar. Use o build.xml e build.properties
fornecidos (com comentários). Implemente alvos para
Compilar a aplicação
Montar a aplicação como um JAR executável
(opc.) Gerar JavaDocs da aplicação e colocá-los em um ZIP
(opc.) Executar a aplicação
Observações: (a) use <exclude> patternsets para não compilar as
classes que terminarem em *Test.java.
(b) Inclua a pasta icons/ no CLASSPATH (raiz do JAR)
2. (opcional) Monte um build.xml para construir um
WAR para a aplicação Web fornecida
Veja desenho na próxima página (observe os excludes)
46
48. Fontes
[1] Richard
Hightower e Nicholas Lesiecki. Java Tools for eXtreme Programming.
Wiley, 2002. Explora Ant e outras ferramentas em ambiente XP.
[3]
Apache Ant User's Manual. Ótima documentação repleta de exemplos.
[3] Steve
Lougran. Ant In Anger - Using Ant in a Production Development System.
(Ant docs) Ótimo artigo com boas dicas para organizar um projeto mantido com Ant.
[4] Martin
Fowler, Matthew Foemmel. Continuous Integration.
http://www.martinfowler.com/articles/continuousIntegration.html. Ótimo artigo sobre
integração contínua e o CruiseControl.
[5] Erik
Hatcher. Java Development with Ant. Manning Publications. August
2002. Explora os recursos básicos e avançados do Ant, sua integração com JUnit e uso com
ferramentas de integração contínua como AntHill e CruiseControl.
[6] Jesse
Tilly e Erik Burke. Ant: The Definitive Guide. O'Reilly and Associates.
May 2002. Contém referência completa e ótimo tutorial sobre recursos avançados como
controle dos eventos do Ant e criação de novas tarefas.
48