Resumo Digital

Transcrição

Resumo Digital
J2EE
Uma aplicação típica J2EE:


Camada logica:
o Presentation: the web front end (servlet, JSP, JSF)
o Business logic: webservice, EJB
o Information System: JPA, JDBC
Camada física:
o Application Server
o Database
o Storage
O J2EE é em camadas e é distribuído: suportado em J2SE, arquitectura em camadas, objectivos
diferentes, application server (é o centro e é fornecido em runtime).
Projecto
SVN/GIT
Sistema de controlo de versão ou sistema de controlo de revisão
Repositório de ficheiro, muitas vezes os ficheiros de código fonte de programas de
computador, com acesso monitorizado. Cada mudança no código tem os dados consigo
(repositório do code.ua)

Controlo de versão no J2EE
o Implica definição -> ambiente, regras; implica definir que conteúdos têm de
ser controlados -> código, gestão de scripts de projecto/builders, testes e
configuração
FERRAMENTAS DE GESTÃO DE PROJECT/BUILDERS
Ant -> makefile mais poderoso
Maven -> repositórios de bibliotecas e gestão de dependências;
Queres testas a ligação com logica de negócio?
Ex: Como os dados do negocio são apresentados  Mocks/stubs
Opções técnicas no projecto

Pode ser guardado no SVN e executado no Hudson: Netbeans é integrado com Hudson
e SVN

Context: Que application server? Que database?

Testing: estar aplicação ou framework?

Presentation layer: como testar os pontos de acesso (entrada)( UI e API )?

Bussiness logic:
o os meus serviços estão a trabalhar bem( EJB or webservices)? E eu posso
aceder aos meus serviços?

Data layer:
o o que testar? Transições? Consistência de dados?
Nós não apresentamos:



a solução para realizar o TDD eficientemente
a solução para o deploy do TDD e o ambiente J2EE
uma abordagem para gerir o desenvolvimento completo do software
Nós apresentamos:


conceitos básicos de teste e TDD
alguns avaliação em funcionalidades do TDD

soluções técnicas para suportar a equipa de desenvolvimento da aplicação J2EE que
suporta TDD
TDD – Test Driven Development





escrever testes antes de escrever o código em si
correr todos os testes
Teste falha: desenvolver o código para que passe aos testes
Teste passa: desenvolver e refactor o código
Para cada nova funcionalidade: começar tudo de novo
Testing
O que é testing? É um processo?



É o processo de demonstrar que não há erros presentes
É o processo de estabelecer confiança que o programa faz o que é suposto fazer
É o processo de executar o programa com a intenção de encontrar erros
Verificação: verificação tem a ver com construir o software bem
Validação: validação tem a ver com construir o software certo
Testing não pode provar que o software está conforme a especificação.
Passar a um teste:


O software trabalhou
Deduzir que o teste falou para encontrar bugs
Falhar um teste:

Provar a cima de tudo que o software não vai trabalhar
Unit Testing: Is each module does what it suppose to do?
Integration Testing: Do you get the expected result when the parts are put together?
Validation Testing: Does the program satisfy the requirements?
System testing: Does it work within the overall system?
Recomendações essenciais:







Escrever testes simples e limpos
Os nomes dos métodos de teste devem ser frases
Uma frase simples mantem o método de teste focado
Um nome expressivo de teste ajuda quando o teste falha
Detalhes é com o cliente, o resto é com a equipa
Escreve testes executáveis na linguagem que:
o É a mesma linguagem em que está a ser escrita o programa
Refactor os testes e interfaces assim que vais aprendendo mais coisas
Continuous integration - hudson
Ciclo contínuo:


Integração do trabalho
Testa a aplicação
Permite detecção de erros




Mais rápido quanto possível
A partir do compilador de erros
Configuração das notificações do sistema de gestão
Falhas reportadas
Idealmente a integração é feita automaticamente
 Automação do build e do testing
Prática suportada por:
o
o
o
Melhoras:
código para utilizador é integrado num repositório comum
cada integração é verificada por um build automated (incluindo testes)
detecção erros de integração
o
feedback, detecção de erros, colaboração, integração do sistema
Reduziu:
o
o
o
nº de mudanças paralelas que são necessárias
nº de erros encontrados durante os testes
risco técnico e de gestão
Hudson –
Recebe do Sistema de Controlo de revisão os : Tests, Code, a configuração
O hudson faze ele próprio o: build, tests e reports
E faz com o application server o: deploy
O hudson é um servidor de continuos integration: build, deploys, runs e tests projects
automaticamente
Automated Testing
Automação:



repete testes sempre que o codigo é alterado
retira o tédio de testes extensivos
faz o teste mais extensível possível (?)
Precisamos de:


Test Driver -> automatiza o processo de correr o conjunto de testes
Test stub -> simula parte do programa chamado de unit-under-tests
Refactoring
Nome: uma mudança feita na estrutura interna do software ser mais fácil de entender e mais
barato de modificar sem mudar o seu comportamento observável
Verbo: restruturar o software aplicando series de refactoring sem mudar o seu
comportamento observável
Primeiro, o propósito de refactorar é fazer com o software seja mais fácil de perceber e
modificar. Podes fazer muitas mudanças no software que fazem pequenas ou nenhumas
mudanças no comportamento observável. Apenas as mudanças feitas no software para fazer
com que seja mais fácil de entender são os refactoring, e não são notadas essas mudanças
para o utilizador.
O trabalho é feito removendo bits que não estão no sitio certo, reduzindo a quantidade do
codigo, eliminando duplicados.
Refactoring ajuda a encontrar bugs e a programar mais rápido.
Refactoring:



Decomposição de objectos maiores em mais pequenos
Fazer mudanças pequenas e metódicas
Seguir os design patters
Retestar depois de todas as mudanças


Fazendo rerunnig dos unit tests
Se algo breaks, é mais fácil de ver a causa do erro
Requirements
Smart
Specific -> sem all, never, allways
Measurable -> sem best ou worst
Attainable -> completo
Realistic(Relevant) -> preciso
Time-Bound -> sem fast, soon
Functional vs. Non-Functional
Requisitos funcionais descrevem o que o sistema deve fazer e os requisitos não funcionais são
restrições globais no sistema de software.
Funcionais: capturados em use cases, analisados por escrita de diagrama de sequencias
Não funcionais: chamados de software qualities, e normalmente não podem ser
implementados num modulo único do programa
Design Patterns
(the design view)
Creational (criacional)





Abstract Factory -> cria instancia de familia de classes
Builder -> separa construção da representação
Factory Method –> cria instância de classes derivadas
Prototype -> uma instância completamente inicializada para ser copiada ou clonada
Singleton -> uma classe onde existe uma e só uma instância
Structural







Adapter -> combina interfaces de classes diferentes
Bridge -> separa a interface do objecto da sua implementação
Composite -> uma estrutura árvore de objectos simples e compostos
Decorator -> adiciona responsabilidades aos objectos dinamicamente
Facade -> uma classe unica (single) representa um subsistema inteiro
Flyweight -> uma instância usada para partilha eficiente
Proxy -> um objecto representa outro objecto
Behavior




Chain of responsibility -> maneira de passar um request entre uma cadeia de objectos
Command -> encapsula um pedido de comandos como se fosse um objecto
Interpreter -> uma caneira de incluir elementos da linguagem no programa
Iterator -> aceder sequencialemtne a elementes de uma colecção







Mediator -> define comunicação simples entre classes
Memento -> captura estado interno do objecto
Observer -> uma maneira de notificação mudanças a classes
State -> altera o comportamente do objecto quando o estado muda
Strategy -> encapsula os algoritmos dentro da classe
Template method -> adiar passos do algoritmo para uma subclasse
Visitor -> nova operação dentro da classe sem mudanças
SIMILARS
 Abstract Factory , template method, flyweight, singleton --> diversos
 Builder , state, bridge, observer --> hierarquia de herança
 Factory Method , strategy e visitor --> herança - promove interface para classe base e
enterra implementações alternativas em derivadas
 Prototype , command, iterator, mediator, memento --> nuvem - promove X para
"estado do objecto cheio (?)"
 Adapter , facade e proxy --> há relação entre entidades
 Composite , decorador, chain of responsability, Interpreter --> composição recursiva
Introdução
Aplicação web based
Service Provider: servidor web/application



Coordenação: gerir pedidos, conceitos de sessão
Concorrência: gerir pedidos e acessos a recursos
Ex: base de dados, messaging
Client Provider: um simples client



Coordenação: depende da aplicação, cliente só faz pedidos
Concorrência: a concorrência do cliente não é um problema para o provider
Ex: usa serviço usando API por um endpoint público
A aplicação J2EE
É um conjunto de componentes logicas



Interfaces para aceder a funcionalidades: web, http e IIOP
Serviços que fornecem as funcionalidades e/ou contêm a logica: EJB, web services,
REST
Recursos que podem ser usados: persistence, comunicação
Corre no servidor de aplicação

Em runtime e fornece os meios para os objectivos
Pode ser orquestrada
Actor principal: Glassfish -> application server


É um produto componente-based que reside no meio da arquitectura central do
servidor. Fornece serviços de middleware para segurança e gestão, como o acesso a
dados e persistência.
Ambiente de runtime e recursos fornecidos
Running elements in J2EE
Running in J2EE: EJB e Message EJB
Running in WS: web-services e REST
Codigo
JUnit
(introdução)
Testes -> mudança nos requisitos



O teste anterior estava ok, mas ainda não testamos a mudança do requisito
o assertTrue( search("horses","denver") )
Precisamos de refactorar o teste (modificar ou adicionar)
o assertEquals( search("horses","denver colorado") , search("horses","denver") )
O assertEquals() verifica que as duas operações são iguais, e se não são, o teste falha
Uma razão para dar mais importância a interfaces e não a classes reais é:
-- a interface pode permanecer como estava no início
-- a implementação pode mudar e sem refactorada
JUnit




É uma framework para escrever testes repetíveis. É uma instância da arquitectura
xUnit para unit testing a frameworks
É uma ferramenta do software para suportar unit testing
É para ser usado
Não é para ser entendido em todos os detalhes
JUnit tem tags especiais para identificação que métodos são para executar e quando
– @BeforeClass – oneTimeSetUp
– @Before – setUp
– @Test – testEmptyCollection
– @After – tearDown
– @Before – setUp
– @Test – testOneItemCollection
– @After – tearDown
– @AfterClass – oneTimeTearDown
O conceito básico:




Given …
o O que deve lá estar antes dos testes
o Para assegurar que as condições “given” estão ok
When …
o O código no método de teste para fazer acontecer
Then …
o Asserções para verificar o que lá está
Precisamos de limpar? Depois
Conclusão:
Precisamos de saber o que é o nosso sistema para testá-lo
E não precisamos de implementação para definir testes
É basicamente o TDD em prática
TDD e J2EE
Introdução de alguns conceitos: testing, tdd, mock, refactor
Apresentar algumas frameworks: testing, control version, software metrics
É preciso conhecer algumas técnicas: para as configurações do desenvolvimento da framework
Alguns problemas entre processo e tecnologia: alguns não são exclusivos do TDD e do J2EE
JMOCK
What is a mock?


Testes mock a um objecto fingindo os seus vizinhos
Mock Objects:

o São objectos falsos
o Trabalham como é suposto na interacção
o Trabalham de acordo com as nossas espectativas
Extremamente leves
Ajuda a isolar a componente que está a ser testada dos seus componentes que ela depende.
Criando stubs das componentes e o seu comportamento esperado. Ajuda a desenhar e testar
as relações entre objectos em redor de todo o sistema. Os stubs imitam o comportamente de
objectos reais de maneira controlada.
Tudo por interfaces (everything by interfaces):


Interacção inter-objectos deve ser feita por interfaces
Esta imatação extra pode fazer o código difícil de seguir nos primeiros passos
Injecção de dependência (Dependency Injection):


Os colaboradores do objecto devem saber o que é o objecto
O objecto NÃO deve ter colaboração por si só (itself)
JMOCK
Mockery context = new Mockery();
..new Expectations()
assert(..);
SUMMARY
 “Tell, don’t ask” , como abordagem OO





Objectos desempenham papéis (roles)
São perguntados para desempenhar papéis
Focus na comunicação e interacção
Interfaces
Mudanças no código não mudam logica
 Estado VS interacção baseada em testes
 Mocking e stubs


“test double” para ver se o mock faz o que é esperado
Não há a complexidade dos objectos reais
WebServices
Web Services são aplicações de cliente e servidor que comunicam no WWW por http. WS
fornece um padrao de significados de inter-operação entre aplicações de software correndo
numa variedade de plataformas e frameworks.
SOA – Service Oriented Architecture


Estilo Arquitectura
o Construção de sistemas distribuídos
o Componentes que não estão ligados fortemente
Objectivos
o Remover dependências artificiais para o mínimo
o Ser capaz de reutilizar
Principais conceitos SOA


Serviço
o Fornece um endpoint visível
o Auto contido – so depende deles e de mensagem
o Pode ter policias/contractos – segurança, vocabulário
Mensagem
o Descritiva – deve ter toda a informação necessária
o Idempotente – apenas receber a copia da mensagem, ignora os outros
o Interface simples – codigo
o Extensível
SOA deve ter um mecanismo que permite um consumidor descobrir um prestador de serviço
no contexto do serviço procurado pelo consumidor. O mecanismo pode ser muito flexível e
não tem de ter registro centralizado.
WebServices : web services(1) or Rest(2)
(1)
SOAP, WSDL, UDDI são peças fundamentais da infrastrutura SOA



WSDL - é usado para descrever o serviço
UDDI – para registrar e olhar pelos serviços
SOAP – é a camada de transporte para enviar mensagens entre consumidor e
fornecedor de serviço
Enquanto SOAP é um mecanismo por omissão para web services, há alternativas.
A XML baseado em SOA
o
O consumidor por procurar pelo serviço no registro UDDI, get o WSDL para o
serviço que tem a descrição, e invocar o serviço usando XML baseado em
mensagens (SOAP) em http.
O desenho baseado em SOAP tem de incluir elementos como:
o
WSDL usado para descrever detalhes do contrato das interfaces que o webservice
oferece;
Aqui:
A invocação da operação de web service é representada por um protocolo XML, como SOAP.
A especificação SOAP define a estrutura, as regras, e convenções para representar invocações
e respostas do web servisse. Estas chamas e respostas são transmitidas como mensagens
SOAP (XML files) por http.
(2)
REST – rest é bem adequado para o basico, cenários de integração ad-hoc. Restfull web
services, muitas vezes melhor integrados com http do que com SOAP, não quererem
mensagens XML nem definições de WSDL.
Rest é mais apropriado quando:

O web service é completamente stateless. Um bom teste é considerar se a interecção
pode sobreviver ao restart do servidor.
O ambiente:

Glassfish; broker e endpoint (WSDL); tipicalmente suportado em servlet
A mensagem: codificada em xml/json
A comunicação: por http, protocolo baseado em texto; webservices usa SOAP
http e servlets




renuncia: não há intenções de explicar o http em detalhe
web services recebem pedidos http
Pedidos são:
o GET – pedido “pequeno”
o POST – pedido com “anexos”
o PUT – normalmente não é usado
o DELETE – normalmente não é usado
As servlets ficam com estes pedidos
o No J2EE/netBeans usando Servlets extended Classes
Servlet - a servlet é um programa, que recebe e responde a pedidos do client web
(normalmente através de http, ou seja, estas comunicações são realizadas sobre http)
Servlets -> maven ; add form -> servlet
@WebServlet(name = "CalcServlet(nome)", urlPatterns = {"/CalcServlet"}(path))
public class CalcServlet extends HttpServlet {
..
protected void processRequest(HttpServletRequest request(request), HttpServletResponse
response)
throws ServletException, IOException { (http handler)
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter(); (response)
NOTA: devemos criar primeiro o web.xml (todo suportado por servlets) e depois adicionar a
servlet
(Maven - Servlets)
Sample REST example:
-> path
- " @Path("/orders/") "
-> lifecycle
- " @Interceptors(CallAudit.class) "
-> an EJB
- " @Stateless "
-> using EJB
- " @EJB BillingService billing;
@EJB DeliveryService delivery;
@EJB Warehouse warehouse; "
-> http response
- @PUT
@Produces({"application/xml","application/json"})
@Consumes({"application/xml","application/json"})
@GET
@Path("{orderid}/")
@Produces({"application/xml","application/json"})
-> using JPA
- @PersistenceContext
EntityManager em;
Order found = this.em.find(Order.class, orderId);
O que escolher: ws ou rest?
WS -> para requisitos QoS avançados, que ocorre em computação empresarial.. através dos
protocolos fornece segurança e rentabilidade
RS –> é mais fácil de escrever em aplicações web
Criar um webservice
maven -> new webservice
REST resource is a Facade
- Pode representar dados reais, pode seconder processos e usar interface normalizada
Notas:



Tudo isto pode ser feito sem IDE;
WS e REST são soluções técnicas e não a solução
Precisamos de saber e decidir:
o Quais são as funcionalidades da aplicação (uses cases, requirements)
o Como vamos publica-los (REST, WS)


Quando compilamos: o codigo está sinteticamente correcto
Correr: 1º fazer o pack (war), fazemos o deploy do servidor, pelo cliente invocamos o
WS, web page.. e corre no browser e no servidor
• Webservices and REST
– são codificados como stateless EJB (at least in Glassfish)
– com anotações extra
• EJB are not webservices
– EJB usa IIOP – binary, RMI based interface
– Webservices usa SOAP – text, http-based
– REST usa XML/JSON – text, http-based
• O servidor da aplicação gera as diferentes “facets”
(webservice @Stateless and @WebService)
__
WebService
@WebService(serviceName = "NewWebService") (nome)
@WebMethod(operationName = "hello") (operação)
public String hello( (parametros)
txt) {
return "Hello " + txt + " !";
}
@WebParam(name = "name")
(parametros)
String
REST is not SOA/Web Services
REST: a different approach
• Noun – Recursos, referenciavel
• Verb – Operation; Standard HTTP("define some resources and they will have these
methods".): -- GET,PUT,POST, DELETE; Uniform semantic
• Contents – format – Semantics on the programmer
EJB
Enterprise beans corre no container EJB, com glassfish. O enterprise beans é uma componente
server-side que encapsula a logica de negocio da aplicação e implementa a tecnologia EJB.
Corre no container EJB com application server e fornece serviços de system-level
Session Bean -> client único dentro servidor de aplicação, logo só tem um utilizador. Não é
partilhado e não é persistente (dados não são guardados na BD)
Annotations
@PostConstruct
@PrePassivate
@PostActivate
@Remove
@PreDestroy
Stateless: não mantem o estado com o cliente, só preserva o estado a invocação
Statefull: o estado é retido durante toda a sessão
Singleton Session Beans: é instanciado um por aplicação e existe por todo o ciclo de vida da
aplicação
EJB based webservices:



Aplicação web padrão não é suportada por containers EJB
Usando maven
Opções: ou procurar projecto semelhantes ou enterprise application com IDE
(fazer no netbeans)
Maven - Enterprise Application - New WebService...
• Now replicate the servlet and form
– In the web application
• Create the EJB and WS
– In the EJB module
...web service - web service client - call web service operation
JSF – Java server faces
Camada de apresentação: gateway para o sistema pelo exterior; outside vs inside; ..
A tecnologia JSF fornece um modelo de programação bem definido e bibliotecas. Com isto é
mais fácil construir e manter a aplicação web com interface de utilizador server-side.
Com esforço mínimo podes:






Criar a pagina web;
Drop componentes na pagina adicionando tags
“Bind components on a page to server-side data.”
“Wire component-generated events to server-side application code”
Guardar e restaurar o estado da aplicação
Reusar componentes
Outside ? Web front-end -> Glassfish com internet explorer, mozila, chrome..
JSF:

Java framework para construção de aplicações web

Abordagem component-centric : “drag and drop” UI design; colecção de components;
usa MVC design pattern (model-view-controler): o runtime gera as dependências e os
eventos
O que é a aplicação JSF?




Conjunto de paginas JSP, de backing beans;
Uma configuração de recursos: regras
A deployment descriptor (web.xml)
Objectos comuns como components, validators
Java Server Page (JSP) é um document de texto que contem 2 tipos de texto: dados estáticos e
elementos JSP. A tecnologia jsp é considerado a tecnologia “velha” para jsf.
Dados estáticos – podem ser em html, xml..
Elemento JSP – constroem dinamicamente o contente
Facelets é uma parte de especificação de jsp e também a tecnologia preferida para construção
de aplicações de JSF. É uma pagina poderosa mas leve que é usada para construir as views JSF
usando o estilo html. Ou seja:


Facelets usam xhtml para criar paginas web
Templating para componentes e paginas
Front end: Servlet + JSP





Front end http
Contentes dinâmicos no lado do cliente: scripting
Servlet: lida com o pedido http
JSP: estrutura de componentes IU; Mapeia componentes UI em codigo
Beans gerido: lida com UI e logica de negocio
JPA – Java Persistence API
J2EE define JPA como solução de persistência além da opção fornecida pelo java (que é a JDBC)
JPA fornece a desenvolvedores de java um objecto de mapeamento racional para gestão
racional de dados nas aplicações java
4 areas:




A JP API
A linguagem da query
A java persistence criteria API
Object/relational mapping metadata
Entities
É um objecto leve do domino da persistência. Representa uma tabela na base da dados
relacional, e cada instancia da entidade corresponde a uma coluna da tabela.
O primeiro artefacto é o entity class.
O estado de persistência de uma entidade é representado por campos ou propriedade
persistentes (anotações).
Requisitos para entity classes:






A classe tem de ter anotado a anotação de javax.persistence.Entity
A classe tem de ter um construtor sem argumentos e ser publica ou protegida (e pode
ter outros construtores)
A classe não pode ser declarada com final, bem como metodos os instancias
persistentes
É preciso implementar a interface seriazable se uma instancia da entity é passada por
valor
Entities devem extender classes entity e não entity, e as classes não entity devem
extender a classe entity
As instancias da entity devem ser privadas, protegidas para serem acessidas só pelos
metodos da entity class.
Relações:



One-to-one
o Cada instancia da entidade é relacionada para uma única instancia de outra
entity. (javax.persistence.OneToOne anotação)
One-to-many
o uma instancia da entidade pode ser relacionada com múltiplas instancias de
outras entidades (javax.persistence.OneToMany annotation)
Many-to-one
o

Múltiplas instancias da entity podem relacionar-se com uma única instancia de
outra entity (javax.persistence.ManyToOne annotation)
Many-to-many
o As instancias da entidade podem ser relacionadas com múltiplas instancias de
outras entity (javax.persistence.ManyToMany annotation)
J2EE
A Arquitetura J2EE
Componentes de Aplicação
Aplicações J2EE são compostas de componentes. Para nós, um componente é uma unidade
autocontida de software que pode ser composta numa aplicação em tempo de design (sem
compilação). Componentes J2EE são escritos em Java.
Componentes J2EE na Camada de Apresentação
-Os seguintes componentes podem existir na camada de apresentação:
- "Application client" (cliente não-Web)
-- Tipicamente usa Swing como User Interface (UI)
-- Também chamado "Console Application"
- Applets
Componentes J2EE na Camada Web
Componentes da camada Web podem incluir vários módulos, incluindo:
- Páginas HTML/XML estáticas
- Servlets - Programas em Java que rodam no servidor Web e que processam pedidos
gerando respostas dinâmicas
- Java Server pages (JSP)
-- Templates HTML mais fáceis de criar, mas contendo "scriplets" (trechos em
Java) para a geração de conteúdo dinâmico
-- São convertidas em servlets quando acedidas pela primeira vez
- JavaBeans - Componentes tradicionais em Java que podem ser usados em servlets e
JSPs
Componentes J2EE na Camada de Aplicação
Componentes da camada de aplicação são chamados Enterprise Java Beans (EJB)
-> Há vários tipos de EJBs:
- Session Beans
-- Representam uma conversação transiente com um cliente
-- Quando o cliente termina, a session bean desaparece
- Entity Bean
-- Representam dados persistentes gravados na base de dados (tipicamente
uma linha de uma tabela) -> entity classes
- Message-Driven Bean
-- Uma combinação de um session bean com um Listener de mensagem Java
Message Service (JMS)
-- Permite que um componente de aplicação (o message bean) receba
mensagens assíncronas
-- Isso significa que podemos acoplamento muito fraco entre pedaços da
aplicação: importante quando máquinas remotas estão envolvidas e podem nem estar no ar,
ou pelo menos, poderão não responder de forma síncrona a chamadas remotas
A camada de dados
-> Observe que a camada de chamamos "de dados" pode ser um banco de dados ou outra
coisa:
- Por exemplo, pode ser um sistema ERP, CRM ou outro sistema legado
- Por esse motivo, a camada frequentemente é chamada de "camada EIS"
A ARQUITETURA J2EE
Containers e Serviços
A chave da arquitetura J2EE é que muito trabalho normalmente feito pelo programador é
poupado, já que é feito automaticamente pelo middleware
- O programador se concentra no Business Logic
-> A entidade que faz essa magia é o Container
-> Um container "envolve" um componente de forma a capturar mensagens dirigidas ao
componente e fornecer serviços automáticos a este
-> Portanto, antes de ser usado, um componente (seja cliente, Web ou EJB) deve:
- Ser montado numa aplicação
- Ser "deployed" (implantado) dentro de um container
-> O container pode ser configurado em tempo de deployment
- Com declarative programming, isto é, mudança de atributos
->Exemplos do que se faz no deployment ao configurar um container:
- Estabelecer segurança
- Estabelecer o tratamento transaccional
- Mapear nomes entre a aplicação e os recursos disponíveis
-> O container também gera serviços não configuráveis:
- O lifecycle dos componentes (achar, criar, destruir, ...)
- Pooling de recursos (conexões de bancos de dados, por exemplo)
- Persistência de dados
Tipos de Containers
-> Os seguintes tipos de containers existem e executam no servidor J2EE:
- Container EJB: um tal container para acolher algumas ou todas as Enterprise Beans
(EJBs) de uma aplicação
- Web container: um tal container para acolher algumas ou todas as JSPs e servlets de
uma aplicação
-> Os seguintes tipos de containers existem e executam na máquina cliente:
- Application Client Container: para executar uma aplicação "console"
-> Observe que servlets e JSPs podem executar sem um "J2EE server" completo
- Podem executar num servidor Web com suporte especial sem ter suporte a EJB
- Por exemplo: Apache Tomcat
-> Portanto, na figura abaixo, onde se vê "J2EE server", podemos ter, na realidade, máquinas
diferentes
http://jacques.dsc.ufcg.edu.br/cursos/j2ee/html/intro/j2ee-11.jpg
As APIs do J2EE
-> Java 2 Platform, Standard Edition (J2SE™) - O antigo JDK
-> Enterprise JavaBeans Technology
-> JDBC API Para aceder à base de dados
-> Java Servlet Technology
-> JavaServer Pages (JSP) Technology
-> Java Message Service (JMS) - Para comunicação assíncrona distribuída, fracamente acoplada
e confiável
-> Java Transaction API (JTA) - Para a demarcação de transações
-> JavaMail™ Technology - Para que aplicações possam enviar mail
-> Java API for XML Processing (JAXP) - Para implementar B2B, relatório XML, etc.
-> J2EE Connector Architecture - Para se conectar de forma simples a vários sistemas de
informação corporativos (ERP, BD
-> Java Authentication and Authorization Service (JAAS) - Para prover serviços de autenticação
e autorização

Documentos relacionados