Java web

Preview:

Citation preview

Java WEB no STI

Funcionário: Marcos CôrtesE-mail: marcoscortes@id.uff.br

Agenda

● Apresentação● Conhecimentos Básicos● Frameworks

○ JSF○ Spring○ Hibernate

Aplicações Java STI

CPD

Aplicações Java STI

● Nossas aplicações Web são compostas por:

○ JSF como front-end

○ Spring como controlador de serviços e transações

○ Hibernate como ORM

ArquiteturaView ModelController DB

Conceitos BásicosIOC / IC

FrameworkEscopo

IOC - Inversion Of Control

● O fluxo de controle da aplicação é da biblioteca e não ao programador

● Uma biblioteca deste tipo pode ser considerado um framework

Exemplo:

Jogo extends JogoFramework{ @Override public void update(){ …. }

@Override public void draw(){ …. }}

DI - Dependency Injection

O programador não deve se preocupar em criar a estrutura da aplicação, cabendo ao framework construí-la usando arquivos de configuração (XML) ou anotações

Exemplo:class pessoa{ @Inject List<Objetos> listObjetos;}

DI (exemplo)

Aplicação

ImpressaoService

EmailService

DI (exemplo)

class Aplicacao{Impressora impressora;Email email;void main(String[] args){

impressora = new Impressora(a, b, ?, ?); email = new Email(?, #, %, …);

impressora.imprime(x); email.envia(x);}

DI (exemplo)

class Aplicacao{@Inject Impressora impressora;@Inject Email email;

main(){impressora.imprime(x);email.envia(x);

}

DI - Container

Container

impressora

email

@Inject

retorna objeto

DI - Tempo de Vida

“Quanto tempo” vive um objeto no container?● Sempre é criado um novo;● Enquanto existe uma criação no banco;● Durante toda a aplicação;● Enquanto meu personagem está no mesmo

cenário;

DI - Exemplos

● O CDI é a especificação de DI de java definida pelas JSR-299 e JSR-330

Implementação Foco Limitações

Spring Framework Web com DI

● Não implementa totalmente o CDI● Containers de Aplicação não o

suportam nativamente● Pode ser muita coisa para quem só

deseja usar DI

Guice Somente DI ● Containers de Aplicação não o suportam

● Pode ser pouca coisa se você quer algo além de DI

Weld Implementação de referência CDI

● Quase ninguém usa

JSF, Spring e Hibernate

O que é JSF?

Framework stateful e orientado a componentes para camadas view e controller

de aplicações web

Vantagens/Desvantagens

● Poderoso● Flexível● Abstração das

tecnologias web● Facilidade em criar

ferramentas● Biblioteca de

componentes● Suporta acessibilidade,

internalização e multilinguística

● Padrão definido na industria

● Complexo e as vezes desnecessário

● Padrão diferente dos frameworks por ação (Rails, Struts, …)

● Não aproveita REST do HTTP

● Somente a versão 1.2 foi estável.

● Por ser stateful, é mais lento e consome mais memória

Des-mytifying Java ServeFaces - Ed Burns

Vantagens/Desvantagens

● “Simula” uma aplicação desktop, onde existe estado da View

● Componentes prontos. Se não há necessidade de customização. O desenvolvimento é acelerado

● Pode ter problemas de desempenho ao manter o estado da View

● Dificuldade de customização de componentes

Arquitetura JSF

FacesServlet

Front-Controller

Manager Beans(Controllers)

XHTML/Facelets(Views)

Fases JSFRestore

View

Apply Request Values

Process Validations

Update Model Values

Invoke Application

Render Response

Managed Bean

LoginController

String nome;String senha;

public void login(String nome, String senha);

Facelets

Escopo

Req

uest

Sco

pe

Ses

sion

Sco

pe

App

licat

ionS

cope

Vie

wS

cope

O que é Spring?

Spring

“Spring Framework is a Java platform that provides comprehensive infrastructure support for developing Java applications. Spring handles the infrastructure so you can focus on your application.”

http://docs.spring.io/spring/docs/3.0.x/reference/overview.html

Spring

O que usamos?● DI● Controlar Transações e Wrapper do

Hibernate

Spring - Bean

Bean no Spring é um POJO que é carregado no contexto de aplicação do Spring (container DI) e terá seu ciclo de vida gerenciado de acordo com um scopo determinado

● singleton – Return a single bean instance per Spring IoC container● prototype – Return a new bean instance each time when requested● request – Return a single bean instance per HTTP request. *● session – Return a single bean instance per HTTP session. *● globalSession – Return a single bean instance per global HTTP session. *

Spring - Transaction

O Spring abstrai o conceito de transação permitindo definir métodos transacionais com a anotação @Transactional

@Transactionalpublic void doSomething(){…}

HIbernate

Primeiro ORM em java e o mais usado atualmente

Hibernate@Entity(name = "conta")public class Conta implements Serializable { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Integer id;

@Column private String nome; //GETTER E SETTERS}

Hibernate

obtemContas(){Session s = getSessionFactory().

getCurrentSession();

return s.createQuery("FROM pessoa").list();

}

Obrigado!Dúvidas?

Marcos Côrtesmarcoscortes@id.uff.br