Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouYago Chico Alterado mais de 9 anos atrás
1
Springframework Jobson Ronan {jrjs@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ções mais 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(account); } private AccountService getAccountService() throws... { if (accountService == null){ Context ctx = new InitialContext(); Context env = (Context)ctx.look p("java:comp/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(AccountService accountService){ this.accountService = accountService; } public void execte(HttpServletRequest 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...salvo em um arquivo chamado, por exemplo, myapp.xml <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> Bem vindos
14
Bean Factory Saída no console: > Bem vindos... 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()); }
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.executeUpdate(); } 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,...}; 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)); //... 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... <bean id=“sessionFactory” class=“org.springframework.orm. hibernate3.LocalSessionFactoryBean”> org.hibernate.dialect.MySQLDialect Customer.hbm.xml...
25
Integração ao Hibernate Exemplo de configuração (cont) com.mysql.jdbc.Driver jdbc:mysql://localhost/jea sa
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 T1SuspensaT1 T2 SuspensaT1 T3 Início A=0 B=0 C=0 A=5 sucesso A=5 B=3 falha C=8C=0 Fim A=5 B=0 C=0 B=0
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 PROPAGATION, ISOLATION, readOnly, -Exceptions, +Exception Comportamento de propagação Grau de isolamento [opcional] Transação somente de leitura? [opcional] Regras de Rollback [opcional] Os atributos são declarados no arquivo de definição dos beans
37
Transações com Spring Exemplo... <bean id=“customerService” class=“org.springframework.transaction. interceptor.TransactionProxyFactoryBean”> PROPAGATION_REQUIRED, readOnly PROPAGATION_REQUIRED...
38
Transações com Spring Exemplo (cont)... <bean id=“transactionManager” class=“org.springframework.orm. hibernate3.HibernateTransactionManager”>...
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 AccountService example.AccountService 1199
42
Spring Remoting Para acessar nosso serviço remoto basta usar um RmiProxyFactoryBean E pronto! rmi://HOST:1199/AccountService example.AccountService
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@cin.ufpe.br}
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.