Prévia do material em texto
Curso de Desenvolvimento de Software para Concursos Profs. Diego Carvalho e Leon Sólon – Aula 06 Profs. Diego Carvalho e Leon Sólon www.estrategiaconcursos.com.br Pág. 4 de 55 Eu sei que cês entenderam a t ria, mas eu gostaria ue cês internalizassem a deia principal! Em vez de os carregadores dependerem dos dispositivos, os dispositivos estão dependendo dos carregadores. Isso não soa absurdo? É o mais importante dependendo do menos importante; é o essencial dependendo do acessório; é o “poste mijando no cachorro”. Bem, um dos princípios do Spring Framework é a Inversão de Controle (ou Inversão de Dependência). É a rma de verter ssa lógica! mos fazer classes de aixo í el dependerem de c asses de lto nível. Vamos programar para interfaces e, não, para implementações. Como podemos fazer isso, professor? Por meio da Injeção de Dependências (não confundam, são conceitos independentes!). Professor, o que seria a injeção de dependências? Trata-se e padrão e desenvolvimento e oftware t zado ara rter ntroles anter aixo acoplamento entre os módulos de s ema. Ela visa remover dependências desnecessárias entre as classes ou torná-las mais suaves, e ajuda a ter um design de software que seja mais fácil de manter e de evoluir. Lembram-se do exemplo anterior? Para eu utilizar uma classe de e-mail na classe de usuário, eu teria que instanciar a classe de e-mail dentro da classe de usuário. Ora, isso á coplaria s classes, fazendo com que a asse de ário dependesse Curso de Desenvolvimento de Software para Concursos Profs. Diego Carvalho e Leon Sólon – Aula 06 Profs. Diego Carvalho e Leon Sólon www.estrategiaconcursos.com.br Pág. 7 de 55 O Módulo ORM fornece camadas de integração para mapeamento objeto- relacional com tecnologias como JPA, Hibernate, etc. O Módulo JMS fornece a possibilidade de produzir e consumir mensagens, com integração nativa com JMS. Galera, vamos falar pouco gora bre g curity! ata-se de framework que rnece iversos serviços de segurança plicações Java EE. Ele faz isso de maneira amigável e flexível para o desenvolvedor, aderindo às práticas bem estabelecidas e introduzidas pelo Spring Framework. Ele tenta endereçar todas as camadas de gurança entro a plicação. Além disso, vem com um conjunto de opções de configuração que o torna bastante poderoso. Sua principal função é fornecer autenticação e autorização sobre o Spring Framework. Apenas para lembrar esses conceitos, a autenticação é o processo de estabelecer se alguém é quem afirma ser, e a autorização é o processo de decidir se alguém pode ou não realizar alguma ação em uma aplicação. Ele pode er lizado em conjunto m aplicações web u standalone. Além disso, é capaz de proteger de ataques como: session fixation, clickjacking, cross site request forgery, etc. Ele é apaz de dar om diversos modelos e utenticação so ito atrativo para esenvolvedores. Pode fornecer segurança em nível de visões, métodos, serviços, URL, domínios, etc. Antes que eu me esqueça, ele é open- source – claro, é parte dos Projetos Spring, junto com Spring Batch, Spring Integration, Spring Web Services, Spring Social, Spring Web Flow e Spring Data. As configurações de segurança são realizadas no arquivo applicationContext-security.xml no diretório WEB-INF. Para que qualquer página ou diretório sejam seguros, é necessário adicionar sse rquivo lemento <intercept-url>. Como, professor? Mais ou menos assim: <intercept-url pattern="/something" access="hasRole('ROLE_USER')"/>. É isso, galera! Acredito que isso seja suficiente... Curso de Desenvolvimento de Software para Concursos Profs. Diego Carvalho e Leon Sólon – Aula 06 Profs. Diego Carvalho e Leon Sólon www.estrategiaconcursos.com.br Pág. 11 de 55 RUTS Apache t uts ramework livre aberto, extensível, moderno gil para criação e plicações Web ava equenas ou grandes. Ele é resultado da junção do Struts com WebWork. Ele preconiza convenções acima de configurações e facilita o gerenciamento, reutilização e manutenção de código. Vamos ver agora algumas características importantes do Struts 2: Linguagem Java: utiliza infraestrutura oferecida pelas bibliotecas do Java e se concentram mais em negócios e menos em detalhes de infraestrutura. Aproveita-se da maturidade da linguagem para construir aplicações mais robustas e multiplataforma. Plug-ins: permite a utilização de plug-ins disponibilizados por terceiros, dessa forma o framework Struts 2 oferece em si apenas funcionalidades básicas e se utiliza de outras funcionalidades fornecidas por terceiros (Ex: REST, Hibernate, jQuery, Rome, JFreechart, etc). Convenções ao és de onfigurações: sempre que possível a configuração foi eliminada do Struts 2. Ao não usar configurações, nomes de classes podem oferecer mapeamento de ações, e valores de resultados retornados podem oferecer nomes para a páginas JSP serem renderizadas. Anotação o s e nfiguração X seguindo a tendência de todos os frameworks atuais, o Struts 2 disponibiliza anotações para serem utilizadas nas classes, reduzindo a configuração XML e mantendo a configuração mais perto da classe de ação. Conversão e ados: a conversão de valores de campos de formulários baseados em String em objetos ou tipos primitivos é tratada pela estrutura de suporte (e vice-versa), removendo a necessidade de prover este código de infraestrutura na classe da ação. Curso de Desenvolvimento de Software para Concursos Profs. Diego Carvalho e Leon Sólon – Aula 06 Profs. Diego Carvalho e Leon Sólon www.estrategiaconcursos.com.br Pág. 12 de 55 Injeção de ependência: seguindo mais um padrão que está sendo utilizado pela maioria dos frameworks, o Struts 2 suporta a injeção de dependências, reduzindo assim o acoplamento entre as camadas do aplicativo, tornando-o muito mais simples e mais fácil de testar. Testabilidade: em uma época em que o TDD se torna quase uma obrigação em qualquer projeto de software de médio e grande porte, o Struts 2 facilita a vida dos desenvolvedores, tornando mais simples o teste das ações, interceptadores e outras classes do Struts 2. Como ostra a magem acima, Struts 2 possui em sua base duas importantes tecnologias! No coração de todas as aplicações, encontram-se as trocas entre cliente e servidor do Protocolo HTTP. A API Servlet funciona como uma abstração de comunicação entre o Framework Struts 2 e o Protocolo HTTP, facilitando troca de requisições e respostas Entendido? Curso de Desenvolvimento de Software para Concursos Profs. Diego Carvalho e Leon Sólon – Aula 06 Profs. Diego Carvalho e Leon Sólon www.estrategiaconcursos.com.br Pág. 14 de 55 View (Result): o resulta retorna a página para o navegador. Essa ágina a interface que presenta uma epresentação o estado da plicação o suário. Em geral, trata-se de Páginas JSP. É muito simples: a View traduz o estado da aplicação em uma representação visual em que seja possível a interação com o usuário. Esse é bem simples... Curso de Desenvolvimento de Software para Concursos Profs. Diego Carvalho e Leon Sólon – Aula 06 Profs. Diego Carvalho e Leon Sólon www.estrategiaconcursos.com.br Pág. 19 de 55 implementações fornecem extensiva segurança integrada (Certificação Digital, Criptografias, etc). Sobre as estratégias de envio de mensagens citadas acima, temos ponto-a-ponto e publish/subscribe – ambas são bastante parecidas. No rimeiro o missor cria u a a e ensagens no servidor e envia as mensagens para essa a. O receptor se registra no servidor para receber as mensagens enviadas para essa fila. Há um relacionamento um-para-um (Unicast) entre o cliente emissor e o cliente receptor. Nesse caso,apenas um receptor irá ler a mensagem. Como se trata de uma comunicação assíncrona, não é necessário que o emissor esteja em execução no momento em que o consumidor lê a mensagem. Da mesma forma, não é necessário que o eceptor steja m xecução mento m que produtor envia nsagem. Quando lida a mensagem, o receptor envia um aviso para o emissor. No s gundo a o missor ia pico no s rvidor publica nsagens para esse ópico. Os receptores se registram (i.e., dão subscribe) no servidor para receber mensagens por tópico. Há um relacionamento um-para-muitos (Multicast) entre o emissor e os receptores. Dessa forma, diversos receptores podem ler a mensagem publicada no servidor. Existe t mbém uma dependência t mporal entre missor o eceptor e tópico. O receptor deve permanecer continuamente ativo para receber mensagens. Uma observação de nomenclatura: no primeiro caso, chamamos o emissor de produtor e o receptor de consumidor; no segundo caso, chamamos o emissor de publicador e o receptor de assinante (subscriber). Curso de Desenvolvimento de Software para Concursos Profs. Diego Carvalho e Leon Sólon – Aula 06 Profs. Diego Carvalho e Leon Sólon www.estrategiaconcursos.com.br Pág. 20 de 55 A Arquitetura JMS possui três elementos principais: Provedor: sistema de mensagem que implementa Interfaces JMS e fornece componentes administrativos e de controle. Cliente: programas ou componentes, escritos em Java, que produzem e consomem mensagens. Qualquer aplicação Java EE pode ser um cliente. Mensagem: trata-se dos objetos que comunicam informações entre Clientes JMS – os dados em si. Curso de Desenvolvimento de Software para Concursos Profs. Diego Carvalho e Leon Sólon – Aula 06 Profs. Diego Carvalho e Leon Sólon www.estrategiaconcursos.com.br Pág. 25 de 55 diferentes. Os usuários que precisam acessar um diretório LDAP usam a mesma API que os usuários que desejam acessar um diretório NIS ou diretório da Novell. Todas as operações de diretório são feitas pela interface da JNDI, o que fornece uma estrutura comum. Agora s ver lguns benefícios: Você só precisa aprender uma única API para acessar todos os tipos de informações do serviço de diretório, como credenciais de segurança, números de telefone, endereços eletrônico e de rede, preferências, etc. A JNDI isola a aplicação em relação ao protocolo e aos detalhes de implementação. Ademais, pode utilizá-la para utilizar a JNDI para ler e gravar objetos Java inteiros a partir de diretórios. É possível vincular diferentes tipos de diretórios, como um diretório LDAP com um NDS, e fazer com que a combinação pareça um diretório grande, federado, o qual aparece para o cliente como um único diretório contíguo. No Java EE, você ode ar DI para itos propósitos! Você pode utilizá-lo para adquirir uma referência para a interface Java Transaction API (JTA) User- Transaction; você pode utilizá-lo para conectar-se às fábricas de recursos, como drivers de JDBC ou de Java Message Service (JMS); ou, por fim, você pode utilizá- lo para pesquisar outros beans. A JNDI é composta por metades: a API cliente e a Service Provider Interface (SPI). A primeira permite que o código Java realize operações de diretório. Essa é uniforme para t dos os tipos de diretórios. Você gastará a maior parte do tempo utilizando a API cliente. A JNDI SPI é uma interface à qual os fornecedores de serviços de nomeação e de diretório podem se conectar. A SPI é o oposto da API: enquanto esta permite que os clientes codifiquem uma única interface unificada, a SPI possibilita aos fornecedores de serviço de nomeação e de diretório ajustarem seus protocolos proprietários particulares no sistema. Isso permite que digo de liente lavanque os serviços de meação e e iretório proprietários m Java enquanto t m um alto í l de portabilidade de ódigo. Por fim, gostaria de falar também sobre contextos e sistemas de nomes! Um contexto é um conjunto de conexões nome-objeto, i.e., um objeto que tem zero ou mais ligações. Se o objeto contido no contexto for também um contexto, ele Curso de Desenvolvimento de Software para Concursos Profs. Diego Carvalho e Leon Sólon – Aula 06 Profs. Diego Carvalho e Leon Sólon www.estrategiaconcursos.com.br Pág. 26 de 55 será um subcontexto4. Um sistema e mes é njunto t rligado e contextos que espeitam a sma convenção e possuem um njunto omum e operações. A imagem abaixo apresenta a Arquitetura JNDI em camadas: 4 Eマ さっ┌ゲヴっHキミっテ;┗;ざが usr é contexto, bin é subcontexto de usr, etc; Curso de Desenvolvimento de Software para Concursos Profs. Diego Carvalho e Leon Sólon – Aula 06 Profs. Diego Carvalho e Leon Sólon www.estrategiaconcursos.com.br Pág. 42 de 55 em um deles, a dependência é resolvida por meio de um construtor do objeto a receber o objeto dependente. Este tipo é conhecido por: a) Bean Injection. b) Setter Injection. c) Factory Injection. d) Constructor Injection. Curso de Desenvolvimento de Software para Concursos Profs. Diego Carvalho e Leon Sólon – Aula 06 Profs. Diego Carvalho e Leon Sólon www.estrategiaconcursos.com.br Pág. 49 de 55 d) O JSTL permite ao programador escrever páginas JSPs sem necessariamente utilizar códigos Java, facilitando a integração entre webdesigners e programadores.