Design patterns e tecnologias para modularização em java tdc2014Filipe Portes
A palestra apresenta uma visão sobre o conceito de modularização e seus benefícios arquiteturais, em seguida apresenta os principais design patterns e tecnologias como OSGi e Jigsaw que permitem modularizar uma aplicação java de forma organizada e eficiente.
Em uma visão macro, o que tiveram destaque para uma filtragem mais especificas foram o ZEND2 devido a robustez e grande credibilidade de mercado, CodeIgniter devido a grande parte do que saim do desenvolvimento "comum" e passam a ter um primeiro contado com algum tipo de framework, e suas comunidades bastante ativas, e Yii a mais jovens desse framework, porém com um grande crescimento nos últimos anos no meio do desenvolvimento PHP.
Obtive um resultado positivo, pois aderir por uma escolhe bastante objetiva e que hoje tem me dado resultado de usabilidade e tempo.
Palestra realizada durante o VII Encontro de Tecnologia da Informação na FIC. Foi uma palestra muito boa, tive um ótimo retorno. Pena que nos slides não há o demo que eu fiz no NetBeans, acho que foi o mais importante.
Design patterns e tecnologias para modularização em java tdc2014Filipe Portes
A palestra apresenta uma visão sobre o conceito de modularização e seus benefícios arquiteturais, em seguida apresenta os principais design patterns e tecnologias como OSGi e Jigsaw que permitem modularizar uma aplicação java de forma organizada e eficiente.
Em uma visão macro, o que tiveram destaque para uma filtragem mais especificas foram o ZEND2 devido a robustez e grande credibilidade de mercado, CodeIgniter devido a grande parte do que saim do desenvolvimento "comum" e passam a ter um primeiro contado com algum tipo de framework, e suas comunidades bastante ativas, e Yii a mais jovens desse framework, porém com um grande crescimento nos últimos anos no meio do desenvolvimento PHP.
Obtive um resultado positivo, pois aderir por uma escolhe bastante objetiva e que hoje tem me dado resultado de usabilidade e tempo.
Palestra realizada durante o VII Encontro de Tecnologia da Informação na FIC. Foi uma palestra muito boa, tive um ótimo retorno. Pena que nos slides não há o demo que eu fiz no NetBeans, acho que foi o mais importante.
Apresentação realizada no dia 13/04/2013, no 29º Guru-SP: gurusp.org/encontros/vigesimo-nono-encontro-do-guru-sp
Versão original em js: https://github.com/nuxlli/12factor-openruko
Nesta apresentação conheceremos a jornada e lições aprendidas de um sysadmin praticando a cultura DevOps ao implantar sistemas monolíticos da forma tradicional e microsserviços usando pipelines no Jenkins
Palestra apresentada no PHPSP + Locaweb com uma Introdução a Frameworks em PHP mostrando o que são frameworks, quais são os diferentes tipos de frameworks, quais as vantagens e desvantagens de cada tipo. Contém ainda um comparativo entre os principais frameworks de mercado e o resultado da pesquisa de avaliação dos frameworks.
Introdução a arquitetura Microservices, como evoluímos das arquiteturas monolíticas até padrões de arquitetura Microservice, onde pequenos serviços distribuídos na rede compõem uma grande peça. Serão abordadas técnicas de distribuição de dados e chamadas remotas, gerenciamento dos serviços distribuídos e como minimizar as dores de cabeça. Toda arquitetura e prática será realizada em cima da plataforma NodeJS.
Apresentação realizada no dia 13/04/2013, no 29º Guru-SP: gurusp.org/encontros/vigesimo-nono-encontro-do-guru-sp
Versão original em js: https://github.com/nuxlli/12factor-openruko
Nesta apresentação conheceremos a jornada e lições aprendidas de um sysadmin praticando a cultura DevOps ao implantar sistemas monolíticos da forma tradicional e microsserviços usando pipelines no Jenkins
Palestra apresentada no PHPSP + Locaweb com uma Introdução a Frameworks em PHP mostrando o que são frameworks, quais são os diferentes tipos de frameworks, quais as vantagens e desvantagens de cada tipo. Contém ainda um comparativo entre os principais frameworks de mercado e o resultado da pesquisa de avaliação dos frameworks.
Introdução a arquitetura Microservices, como evoluímos das arquiteturas monolíticas até padrões de arquitetura Microservice, onde pequenos serviços distribuídos na rede compõem uma grande peça. Serão abordadas técnicas de distribuição de dados e chamadas remotas, gerenciamento dos serviços distribuídos e como minimizar as dores de cabeça. Toda arquitetura e prática será realizada em cima da plataforma NodeJS.
A apresentação aborda sobre a origem e o core do Spring, um framework open-source para desenvolvimento Java, bem como seus principais projetos e porque esse mega projeto de quase 20 anos de idade, ainda hoje é popular do mundo Java. Discutiremos sua arquitetura, funcionalidades e um roadmap dos projetos que estão sendo trabalhados no momento.
Desenvolvimento web - conceitos, tecnologia e tendências.Valmir Justo
O Desenvolvimento de Aplicações WEB nem sempre é uma tarefa trivial. Esta apresentação demonstra diversos conceitos, tecnologias e metodologias que são utilizadas em diversos projetos.
Como DDD e Strategic Design estão nos ajudando a modernizar um LegadoLuiz Costa
O objetivo desta palestra é mostrar como é possível evoluir e reescrever partes de uma aplicação legada com mais 5 anos em produção utilizando técnicas de uma parte Domain Driven Design conhecida como Strategic Design. É uma aplicação web escrita em Python e Django que suporta a operação de um grupo focado em medicina do trabalho, com clínicas espalhadas pelo país.
Nesta palestra vamos mostrar uma abordagem que pode ajudar times que precisam lidar com aplicações legadas grandes e complexas no caminho da modernização.
Java EE no ambiente corporativo: primeiros passos WebLogic 12c
Modularidade na Web com Java: Desenvolvimento OSGI Web com Eclipse Virgo
1. Modularidade na Web com Java:
Desenvolvimento OSGI Web
com Eclipse Virgo
Regis Machado
Equipe de Software – Líder Técnico
regis.neves@gestum.com.br
2. • Régis Machado;
• Formado em Análise e
desenvolvimento de Sistemas,
Faculdade Senac;
• Líder Técnico na Gestum;
• Mais de 3 anos trabalhando com
JavaEE;
4. OSGI? O quê é isso?
• Open Services Gateway Initiative, termo obsoleto.
• Especificação criada e mantida pela OSGI Alliance;
• OSGI Alliance foi fundada em 1999, por empresas como
IBM, SUN, MOTOROLA, entre outras;
• Atualmente empresas como Adobe, Mitsubishi
Electric, Telefônica, Red
Hat, Siemmens, Oracle, VMWare e dezenas de outras
empresas apóiam o desenvolvimento e evolução da
plataforma OSGI;
• A primeira especificação foi lançada no ano de 2000, e
atualmente está na versão 4.3.
• É usado em automóveis, mobiles, servidores, automação
industrial, etc.
5. Os problemas atuais no
desenvolvimento.
• Softwares cada vez mais complexos, devido a
pequenos ciclos de novas implementações que
elevam cada vez mais o custo de se trabalhar
no Software;
- OSGI Alliance – www.osgi.org
6. Então...
O que alguns professores não nos dizem na
faculdade é que alguns sistemas podem ser um
pouco complexos, por exemplo..
7.
8. Os problemas atuais no
desenvolvimento.
• Atualmente desenvolvedores passam mais
tempo adaptando funcionalidades existentes
para rodar/atender à novas
plataformas/serviços;
- OSGI Alliance – www.osgi.org
9. Então...
Um exemplo da criatividade do ser humano
quando está sobre pressão e tem que adaptar
algo para uma nova função/serviço.
10.
11. Os problemas atuais no
desenvolvimento.
• Um grande número de bibliotecas prontas
existem o que tornou complexo a tarefa de
gerenciar estas várias dependências que as
vezes causam incompatibilidades.
• - OSGI Alliance – www.osgi.org
12. Então...
Mesmo a mais simples das aplicações pode ter
uma dezena ou mais de bibliotecas...
15. Depois de todos esses
problemas, o resultado interno...
• Falta de qualidade, devido a complexidade,
altos acoplamentos, estrutura engessada.
• Problemas com clientes, perda de confiança,
prejuízos, cobranças de melhora;
• Perda de produtividade e motivação nas
equipes.
• Então...
16. Depois de todos esses problemas
internos, o resultado externo...
• Após entender as complexidades e fazer as
adaptações, adicionar ou atualizar as
bibliotecas necessárias fazer as validações e
verificações, é só avisar o cliente que você
atualizou o ambiente dele.
• Sorte que as vezes o cliente pode ter só
algumas centenas de usuários online...
• Então...
19. Depois disso tente explicar...
• Que por causa do sistema ter ficado 15 minutos fora do
ar com 1000-1500 pessoas online e acabou
impossibilitando ele de ter 2 ou 3 vendas...
• E que na próxima atualização serão mais 15 minutos se
tudo correr bem.
• Uma atualização por semana...
• 60 minutos, algo como 8 a 12 vendas a menos no fim do
mês...
• Talvez R$ 1.000 de prejuízo para o cliente ou bem mais..
• Só nas atualizações o teu cliente poderia estar te
pagando um pouco mais por esse beneficio de atualizar
sem reiniciar..
20.
21. OSGI
• Especificação que define como componentes
devem ser instalados e gerenciados.
• Os componentes são chamados de Bundles;
• A especificação cria uma camada chamada de
Ambiente OSGI, e possibilita de maneira
transparente o acesso ao ambiente.
22. Será que OSGI é a solução?
• Reduz a complexidade
• Bundles independentes; Esconde as parte Interna;
Expõe interface de serviços bem definida;
• Reuso
• Fácil implantação
• Define o padrão dos Bundles, como devem ser
gerenciados e instalados;
• Dinâmico
• Podem ser instalados, iniciados, parados,
atualizados e desinstalados sem precisar para toda
a aplicação;
24. Outras vantagens
• Seguro, construído sobre a arquitetura de
segurança do Java;
• Adaptabilidade, os componentes podem ver os
serviços disponíveis e se adaptarem a isso;
• Controle de versões, adeus “Jar Hell”;
• Simples, API com menos de 30 classes/interfaces;
• Pequeno, implementado em um Jar com menos de
300kb;
• Rápido, levanta os bundles e carrega as classes
necessários de acordo com as dependências;
• Não intrusivo, os bundles podem ser POJOS;
26. Módulos
• O Framework OSGi providencia uma solução padronizada para
modularização em java;
• Uma unidade modular (componente) é conhecida como Bundle;
• Bundles são Java Archives (Jar), para diferenciar de um jar comum, é
usado o tipo MIME:
• application/vnd.osgi.bundle
• Um Bundle pode conter, classes java, html, imagens, um bundle pode
ter outros jar que podem ser disponibilizados como recursos ou
classes, porém isso não é recursivo.
• Um Bundle possui um manifest com um cabeçalho que define
diversas informações como os pacotes importados e exportados,
capacidades, informações dos fornecedores, nome, versão, i18n,
licença, requisitos. Este manifest fica em localizado em:
• META-INF/MANIFEST.MF
28. Arquitetura de Class Loaders
• Class path de inicialização – contém o pacote
java.* e os seus pacotes de implementação.
• Framework class path – O Framework
normalmente tem um class loader para as
classes de implementação e as interfaces dos
principais serviços;
• Bundle Space – O bundle space consiste do
arquivo JAR associado ao bundle, mais JAR
adicionais que estão muito ligados ao bundle;
32. • Projeto mantido pela Fundação Eclipse e
apoiado pela SpringSource (VMWare);
• Usa o framework OSGI Equinox e integra as
funcionalidades OSGI com o Spring
Framework, tornando o Spring um “First Citizen
class” Framework no ambiente de execução
OSGI;
• Pronto para ser usado em produção, kernel
integrado com o Tomcat ou Jetty;
• Logs coordenado e gerenciado pelo Framework
LogBack;
33.
34. • Bundles continuam sendo POJOS;
• Todo o poder dos header OSGI declarados no
META-INF/MANIFEST.MF;
• Beans Spring podem ser exportados como
serviços OSGI facilmente.
• Simples de migrar aplicações web não OSGI
para OSGI.
35. Exemplo, bean spring declarado:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-
2.5.xsd">
<bean id=“UserService"
class=“br.com.gestum.souwebpel.evento.exemplo.UserService"/>
</beans>
37. Virgo Snaps
• Possibilita verificar se um Bundle está
disponível a partir da view.
• Usa Bundles web, conhecidos como WAB.
• Um dos WAB deve ser o host principal.
39. Virgo Snaps – Configurando
o header dos WAB
Snap-Host:
br.com.gestum.souwebpel.event.wabhost;version="${version:[=.
=.=, =.+1)}"
Snap-ContextPath: /dog
{....} No arquivo META-INF/snap.properties
Podem ser colocadas as propriedades que desejar.
40. Virgo Snaps – Usando a
taglib
<%@ taglib prefix="snaps" uri="http://www.eclipse.org/virgo/snaps"
%>.
{... Seu código aqui}
<!– Procurando por todos os WAB instalados usando o Snaps-->
<snaps:snaps var="snaps">
<c:forEach var="snap" items="${snaps}">
<a href="<c:url
value="${snap.contextPath}${snap.properties['link.path']}"/>">
${snap.properties['link.text']}</a>
</c:forEach>
</snaps:snaps>