Springframework - PowerPoint PPT Presentation

About This Presentation
Title:

Springframework

Description:

Springframework Jobson Ronan {jrjs_at_cin.ufpe.br} – PowerPoint PPT presentation

Number of Views:28
Avg rating:3.0/5.0
Slides: 47
Provided by: Jobs7
Category:

less

Transcript and Presenter's Notes

Title: Springframework


1
Springframework
  • Jobson Ronan jrjs_at_cin.ufpe.br

2
O que é o Springframework?
  • Spring é um framework leve de inversão de
    controle(IOC) e orientação a aspectos(AOP)
  • Torna o desenvolvimento de aplicaçõesmais fácil
    e mais interessante!

3
Como assim?
  • Como Spring ajuda os desenvolvedores J2EE
  • Oferece um container leve de JavaBeans que
    elimina a necessidade de escrever códigos
    repetitivos de encanador como lookups
  • Oferece um framework de inversão de controle que
    permite as dependências dos beans serem
    descobertas durante a instanciação
  • Permitir que cross cutting concers como
    gerenciamento de transações ser aplicado aos
    beans como Aspectos ao invés ser escrito no
    objeto de negócio
  • Oferecer camadas de abstração sobre tecnologias
    populares como JDBC e Hibernate que facilite seu
    uso e organize o gerenciamento de configuração

4
Como assim?
  • Tudo isso seguindo alguns principios
  • O Código de sua aplicação não deve depender da
    API do Spring
  • Spring não deve competir com boas soluções
    existentes mais sim promover integração
  • Escrever código testável é crítico e o container
    deve ajudar(não interferir) nesse objetivo
  • Usar o Spring deve ser um prazer!

5
Visão geral
6
Sobre a arquitetura
  • Spring pode ser usado em uma variedade de
    situações
  • Aplicações web
  • Aplicações que envolvem EJBs ou outros serviços
  • Aplicações que acessem uma ou mais recursos(BDs)
  • Apesar disso, Spring lidera os chamados
    frameworks para o Desenvolvimento leve de
    aplicações J2EE
  • Realmente precisamos de serviços pesados, como
    EJB, providos pelos tradicionais Servidores de
    aplicação J2EE?

7
Relembrando o que é IoC?
  • Um modo de remover as dependências entre os
    objetos injetando as referências para os
    colaboradores sobre demanda (Dependency
    Injection)
  • O framework de IOC determina como os objetos
    serão injetados, normalmente através de um
    arquivo de configuração XML

8
Modo tradicional
... private AccountService accountService
null public void execute(HttpServletRequest
req, ...) throws Exception Account account
createAccount(req) AccountService service
getAccountService() service.updateAccount(a
ccount) private AccountService
getAccountService() throws ... if
(accountService null) Context ctx
new InitialContext() Context env
(Context)ctx.look p("javacomp/env")
Object obj env.lookup("ejb/AccountServiceHome")
AccountServiceHome home
(AccountServiceHome)
PortableRemoteObject.narrow(env,Acco
ntService.class) accountService
home.create() return
accountService ...
9
Modo Spring
  • Com Spring, o container de IOC ira cuidar da
    injeção de uma apropriada implementação

.. private AccountService accountService
null public void setAccountService(AccountServic
e accountService) this.accountService
accountService public void execte(HttpServletR
equest req, ...) throws Exception Account
account createAccount(req)
accountService.updateAccount(account) ...
10
O Container de Beans
  • É o núcleo do Spring famework
  • Usa IOC para gerenciar os componentes que compõem
    uma aplicação
  • Componentes são expressos como simples Java Beans
  • O Container gerencia as relações entre os Beans e
    é responsável por sua configuração
  • O Container gerencia o ciclo de vida dos Beans

11
Tipos de Containers
  • Bean Factory
  • Dá suporte básico a injeção de dependência
  • Configuração e gerenciamento do ciclo de vida
  • Application Context
  • Construido sobre o Bean Factory adicionando
    serviços de
  • Resolução mensagens através de arquivos de
    propriedades para internacionalização
  • Carregamento de recursos genéricos
  • Publicação de eventos

12
Bean Factory
public interface Greeting String
greeting() public class WelcomeGreeting
implements Greeting private String
message public void setMessage(String
message) this.message message
public String getGreeting()
return message
13
Bean Factory
lt?xml version"1.0" encoding"UTF-8"?gt lt!DOCTYPE
beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http//www.springframework.org/dtd/spring-beans.d
td"gt ltbeansgt ltbean idgreeting
classWelcomeGreetinggt ltproperty
namemessagegt ltvaluegtBem vindoslt/valuegt
lt/propertygt lt/beangt lt/beansgt
  • ...salvo em um arquivo chamado, por exemplo,
    myapp.xml

14
Bean Factory
... public static void main(String args)
BeanFactory factory new XmlBeanFactory(
new FileInputStream(foo.xml)) Greeting
greeting (Greeting) factory.getBean(greeting)
System.out.println(greeting.getGreeting())
  • Saída no console
  • gt Bem vindos

15
Bean Factory
  • Características dos managed beans
  • Singletons por default
  • Propriedades setadas por Dependency Injection
  • Referência para outros managed beans
  • Strings
  • Tipos primitivos
  • Coleções (lists, sets, map, props)
  • Inner Beans
  • Parâmetros podem ser extraídos para arquivos de
    propriedades

16
Spring DAO Spring ORM
  • Spring como suporte a camada de negócio

17
O que temos?
  • Uma camada de abstração para persistência de
    dados utilizando um ou mais das seguintes
    tecnologias
  • JDBC
  • Hibernate, OJB
  • JDO
  • iBatis
  • Uma robusta infra-estrutura para o gerenciamento
    de transações de forma declarativa que suporta
    tanto transações locais como transações
    distribuídas através da JTA
  • Uma camada simplificadora para tecnologias de
    distribuição incluindo EJBs, RMI, e Web Services
  • Útil suporte a JNDI, JMS, email, e agendamento de
    tarefas(task scheduling)

18
Spring DAO
  • Possui uma API de acesso a dados que ajuda a
    isolar e melhorar o modo como o dado é servido
    pela camada de negócio
  • Uma consistente e rica hierarquia de exceções
    suficiente para mapear exceções específicas
    dependentes de tecnologia para outras exceções
    genéricas
  • Além de uma série de templates e wrapper classes
    para se trabalhar com JDBC, Hibernate, JDO, etc.

19
JDBC Tradicional
public void updateCustomer(Customer customer)
Connection conn null PreparedStatement ps
null try conn getConnection() ps
conn.prepareStatement(update customer set
firstName ?, lastName ?,
...) ps.setString(1, customer.getFirstName())
ps.setString(2, customer.getLastName()) ps.e
xecuteUpdate() catch (SQLException e)
log.error(e) finally try if (ps !
null) ps.close() catch (SQLException e)
log.error(e) try if (conn ! null)
conn.close() catch (SQLException e)
log.error(e) private Connection
getConnection() //... Mais código de
encanador
20
Spring DAO
  • Usando um template jdbc do spring
  • O jdbcTemplate pode ser injetado pelo container...

public void updateCustomer(Customer customer)
String sql update customer set
firstName ?, lastName ?, ...)
Object params new Object
customer.getFirstName(), customer.getLastName(
), ... int types new int
Types.VARCHAR, Types.VARCHAR, ...
jdbcTemplate.update(sql, params, types)
21
Spring DAO
  • Operações também podem ser modeladas como objetos

public class UpdateCustomer extends SqlUpdate
public UpdateCustomer(DataSource ds)
setDataSource(ds) setSql(update customer
set values (?,?..)) declareParameter(new
SqlParameter(Types.VARCHAR))
declareParameter(new SqlParameter(Types.VARCHAR))
//... compile() public int
update(Customer customer) Object params
new Object customer.getFirstName(),
customer.getLastName()
return update(params)
22
Spring DAO
  • Usando o objeto UpdateCustomer
  • A classe UpdateCustomer pode ser uma inner class

public class JdbcCustomerDao extends
JdbcDaoSupport implements CustomerDao
private UpdateCustomer updateCustomer
protected void initDao() throws Exception
super.initDao() updateCustomer new
UpdateCustomer(getDataSource()) public
void updateCustomer(Customer customer)
updateCustomer.update(customer)
23
Integração ao Hibernate
  • Spring prove um bean SessionFactory que
    simplifica a configuração e o gerênciamento de
    sessões em objetos de negócio
  • Uma classe HibernateTemplate
  • Uma classe HibernateDaoSupport que pode ser
    herdada para maior abstração
  • Gerenciamento e mapeamento das HibernateException
    s
  • Facilmente plugável ao framework de Transações do
    Spring

24
Integração ao Hibernate
  • Exemplo de configuração

... ltbeansgt ltbean idsessionFactory
classorg.springframework.orm. hibernate3.Lo
calSessionFactoryBeangt ltproperty
namedataSourcegt ltref beandataSource/gt
lt/propertygt ltproperty namehibernateProperties
gt ltpropsgt ltprop keyhibernate.dialectgt
org.hibernate.dialect.MySQLDialect
lt/propgt lt/propsgt lt/propertygt ltproperty
namemappingResourcesgt ltlistgtltvaluegtCustomer
.hbm.xmllt/valuegtlt/listgt lt/propertygt lt/beangt ...
25
Integração ao Hibernate
  • Exemplo de configuração (cont)

ltbean idcustomerDao classHibernateCustomerDao
gt ltproperty namesessionFactorygt ltref
beansessionFactory/gt lt/propertygt lt/beangt ltbea
n id"myDataSource" class"org.apache.commons.dbcp
.BasicDataSource" destroy-method"close"gt
ltproperty name"driverClassName"gt
ltvaluegtcom.mysql.jdbc.Driverlt/valuegt
lt/propertygt ltproperty name"url"gt
ltvaluegtjdbcmysql//localhost/jealt/valuegt
lt/propertygt ltproperty name"username"gt ltvalu
egtsalt/valuegt lt/propertygt ltproperty
name"password"gt ltvaluegtlt/valuegt lt/propertygt lt/
beangt
26
Integração ao Hibernate
  • Customer DAO...
  • Simples e limpo!
  • O uso do HibernateTemplate é bastante semelhante
    ao do objeto Session do hibernate
  • Existe suporte semelhante para outras tecnologias
    ORM como iBatis, JDO e OJB

public class HibernateCustomerDao extends
HibernateDaoSupport implements CustomerDao
public void updateCustomer(Customer
customer) getHibernateTemplate().update(
customer)
27
Transações com Spring Motivação
  • Ambientes gerenciados com EJBs permitem uma
    tratamento declarativo de transações
  • Fora do código, descreve-se, para cada método
    transacional, suas características transacionais
  • Ex método x da classe br.org.citi.XYZ deve
    representar uma transação
  • Elimina uma grande quantidade de código
    repetitivo
  • Facilita a manutenção
  • Entre outros

28
Transações com Spring Motivação
  • Porém, já falamos muito mal dos EJBs neste curso
    ?
  • Queremos ter os mesmo benefícios... Mas só os
    benefícios

29
Transações com Spring
  • Suporte para gerenciamento programático e
    declarativo de transações
  • Transações locais são delegadas pelo Spring para
    o gerente de transações do data-source
  • Quando múltiplos recursos estão envolvidos
    (transações distribuídas), Spring delega para o
    gerente de transações JTA obtido através do JNDI
  • Apenas algumas pequenas mudanças são necessárias
    para trocar entre local e JTA

30
Transações com Spring
  • Gerenciamento Declarativo ()
  • Usa AOP para encapsular chamadas a objetos
    transacionais com código de begin e commit de
    transações
  • Comportamento de propagação
  • Mandatory, Never, Not Supported, Required,
    Requires New, Support, Nested
  • Similar a EJBs
  • Também suporta níveis de isolação
  • Default, Read Uncommitted, Read Committed,
    Repeatable Read, Serializable

31
Modelo transacional
  • Normalmente o modelo flat transactions
  • Se método é chamado dentro de uma transação, ele
    pode continuar transação anterior
  • Se ele falhar, transação inteira é revertida
  • Se nova transação for iniciada no método que já
    faz parte de uma transação, ela é independente
  • Se falhar, pode sinalizar rollback() para
    desfazer transação externa (ou não, e permitir
    que transação externa continue)
  • O possível rollback da transação externa não
    afetará outras transações (T2) cujos resultados
    já foram cometidos

32
Modelo transacional
Fim A5 B0 C0
T1
Suspensa
T1
Suspensa
T1
Início A0 B0 C0
T2
T3
falha
sucesso
A5
33
Comportamento de propagação
  • Mandatory
  • Indica que o método só pode ser chamado no escopo
    de uma transação do cliente
  • Se o método for chamado fora de uma transação,
    ele causará uma exceção
  • Never
  • Indica que o método nunca pode estar dentro de
    uma transação
  • Se o cliente que chama o método for parte de uma
    transação, ele causará uma exceção

34
Comportamento de propagação
  • NotSupported
  • Indica que o método não suporta transações
  • Se o método for chamado pelo cliente no escopo de
    uma transação, a mesma será suspensa enquanto
    durar a chamada do método (não haverá propagação
    de transações do cliente)
  • Required
  • Indica que o escopo de uma transação é requerido
    pelo método
  • Se não existe transação, uma nova é criada e dura
    até que o método termine (é propagada para todos
    os métodos chamados)
  • Se já existe uma transação iniciada pelo cliente,
    o bean é incluído no seu escopo durante a chamada
    do método

35
Comportamento de propagação
  • Requires New
  • Indica que o método requer uma nova transação
  • Estando ou não o cliente no escopo de uma
    transação, o bean irá iniciar uma nova transação
    que iniciará e terminará no bean.
  • Support
  • Indica que o método suporta transações
  • Será incluído no escopo da transação do cliente
    se existir
  • Se ele for chamado fora do escopo de uma
    transação ele realizará suas tarefa sem
    transações e pode chamar objetos que não suportam
    transações

36
Transações com Spring
  • Declarando atributos

Transação somente de leitura? opcional
Comportamento de propagação
PROPAGATION, ISOLATION, readOnly, -Exceptions,
Exception
Grau de isolamento opcional
Regras de Rollback opcional
Os atributos são declarados no arquivo de
definição dos beans
37
Transações com Spring
  • Exemplo

... ltbeansgt ltbean idcustomerService
classorg.springframework.transaction. interc
eptor.TransactionProxyFactoryBeangt ltproperty
nametransactionManagergt ltref
beantransactionManager/gt lt/propertygt
ltproperty nametargetgt ltref
beancustomerServiceTarget/gt lt/propertygt
ltproperty nametransactionAttributesgt
ltpropsgt ltprop keygetgtPROPAGATION_REQUIRE
D, readOnlylt/propgt ltprop keystoregtPROPAG
ATION_REQUIREDlt/propgt lt/propsgt
lt/propertygt ltbeangt ...
38
Transações com Spring
  • Exemplo (cont)

... ltbean idcustomerServiceTarget
classCustomerServiceImplgt ltproperty
namecustomerDaogt ltref beancustomerDao/gt
lt/propertygt lt/beangt ltbean idtransactionManager
classorg.springframework.orm. hibernate3.H
ibernateTransactionManagergt ltproperty
namesessionFactorygt ltref
beansessionFactory/gt lt/propertygt lt/beangt ltbea
n idcustomerDao classHibernateCustomerDaogt
ltproperty namesessionFactorygt ltref
beansessionFactory/gt lt/propertygt lt/beangt ...
39
Transações com Spring
  • E pronto!
  • Nada de código com begin, commit e rollback!

40
O que mais?
  • Spring Remoting
  • Distribuição com RMI, WebServices e outros
    extremamente facilitada
  • Considere as seguintes classes

// Account service public interface
AccountService public void
insertAccount(Account acc) public List
getAccounts(String name)
// ... and corresponding implement doing nothing
at the moment public class AccountServiceImpl
implements AccountService public void
insertAccount(Account acc) // do something
public List getAccounts(String name)
// do something
41
Spring Remoting
  • Exportando nosso objeto como uma serviço RMI
  • Usa-se o RmiServiceExporter

ltbean id"accountService" class"example.AccountSe
rviceImpl"gt lt!-- any additional properties,
maybe a DAO? --gt lt/beangt ltbean
class"org.springframework.remoting.rmi.RmiService
Exporter"gt ltproperty name"serviceName"gtltvalue
gtAccountServicelt/valuegtlt/propertygt ltproperty
name"service"gtltref bean"accountService"/gtlt/prope
rtygt ltproperty name"serviceInterface"gt
ltvaluegtexample.AccountServicelt/valuegt
lt/propertygt lt!-- defaults to 1099 --gt
ltproperty name"registryPort"gtltvaluegt1199lt/valuegtlt
/propertygt lt/beangt
42
Spring Remoting
  • Para acessar nosso serviço remoto basta usar um
    RmiProxyFactoryBean
  • E pronto!

ltbean id"accountService"
class"org.springframework.remoting.rmi.RmiProxyFa
ctoryBean"gt ltproperty name"serviceUrl"gt ltval
uegtrmi//HOST1199/AccountServicelt/valuegt
lt/propertygt ltproperty name"serviceInterface"gt
ltvaluegtexample.AccountServicelt/valuegt
lt/propertygt lt/beangt
43
Spring Remoting
  • Isso que é distribuição transparente!
  • A camada de distribuição desapareceu do código
    Java!
  • Agora é só XML!

44
Conclusões
  • O spring é um framework para todas as a camadas
  • O seu uso aumenta a manutenibilidade do sistema
    consideravelmente
  • Ainda existe um framework, ageci, sub-projeto do
    Spring, para gerenciamento de segurança
    declarativo!

45
Exercícios
  • Altere a camada de dados da nossa aplicação com o
    Spring (usar Spring DAO Spring ORM).
  • Altere o gerenciamento de transações de nossa
    aplicação para usar o framework de transações do
    Spring.
  • Transforme sua fachada em um serviço remoto.
  • Teste tudo!

46
Springframework
  • Jobson Ronan jrjs_at_cin.ufpe.br
Write a Comment
User Comments (0)
About PowerShow.com