Prévia do material em texto
declarativa. Os desenvolvedores das aplicações não precisam implementar a lógica de segurança pois ela faz parte da arquitetura. • RReemmoottaabbiilliiddaaddee: Aplicações EJB podem ser acessadas remotamente através de diversos protocolos de comunicação. Consequentemente, é possível desenvolver aplicações clientes de diversos tipos. • MMuullttiitthhrreeaaddiinngg ee CCoonnccoorrrrêênncciiaa: A arquitetura EJB permite que as aplicações sejam acessadas por múltiplos usuários simultaneamente de maneira controlada. A concorrência é controlada pelo AS. • PPeerrssiissttêênncciiaa: Persistência através da especi�cação JPA. • GGeerreenncciiaammeennttoo ddee OObbjjeettooss: Mecanismos de injeção de dependências e controle de ciclo de vida são oferecidos aos objetos de uma aplicação EJB. A escalabilidade de uma aplicação é garantida através deste mecanismo. • IInntteeggrraaççããoo: A arquitetura EJB é fortemente integrada com os componentes da plataforma Java EE. 22 SSTTAATTEELLEESSSS SSEESSSSIIOONN BBEEAANNSS Um objeto é geralmente composto de estado e comportamento, entretanto, em muitas situações encontramos procedimentos, regras de negócio e �uxos que representam somente um comportamento e não precisam de estado. Você já está familiarizado com esse conceito ao utilizar algumas classes da plataforma Java que possuem métodos estáticos. Um exemplo é demonstrado na �gura a seguir, onde se pode perceber que a classe Integer não precisa de instanciação e não possui estado. Ao solicitar que a String seja convertida para um inteiro, basta chamar o método estático que o mesmo retornará o resultado, sem que o objeto mantenha estado. FIGURA 114 – MÉTODOS ESTÁTICOS Unidade 3 - Tópico 1 Livro Digital - Programação para Web II https://livrodigital.uniasselvi.com.br/ADS27_programacao_para_web_ii... 2 of 17 26/06/2024, 16:27 FONTE: Adaptado de K19 (2015) Os métodos dentro desta interface são chamados de métodos de negócio. O próximo passo seria a implementação dos métodos de negócio propriamente ditos e a de�nição das características do stateless session bean através de annotations, conforme a �gura que segue. É importante perceber que nem toda a aplicação se bene�cia destas facilidades oferecidas pelo AS. Remotabilidade, concorrência e transações distribuídas podem ser úteis em alguns cenários, mas a complexidade da con�guração e de�nição destes serviços no AS pode não compensar sua utilização em cenários mais simples. FIGURA 116 – STATELESS SESSION BEAN Unidade 3 - Tópico 1 Livro Digital - Programação para Web II https://livrodigital.uniasselvi.com.br/ADS27_programacao_para_web_ii... 4 of 17 26/06/2024, 16:27 FIGURA 117 – STATELESS SESSION BEAN REMOTO FONTE: Adaptado de K19 (2015) 22..22 EEJJBB 33..11 Na versão 3.1, quando o acesso ao stateless session bean é local, não é mais necessário de�nir a interface nem utilizar a anotação @Local, bastando anotar uma classe com @Stateless, conforme a �gura a seguir. FIGURA 118 – STATELESS SESSION BEAN, VERSÃO 3.1 Unidade 3 - Tópico 1 Livro Digital - Programação para Web II https://livrodigital.uniasselvi.com.br/ADS27_programacao_para_web_ii... 6 of 17 26/06/2024, 16:27 FONTE: Adaptado de K19 (2015) Agora é hora de paramos um pouco para entender o que aconteceu. A linha 16 traz a anotação que de�ne a URL de seu servlet, cuja função, essencialmente é receber dois doublés como parâmetro via request (a e b) para então exibir um html com o resultado da operação de soma. O detalhe interessante é que na linha 20 anotamos o tipo Calculadora como um EJB. Mas por que de�nimos como calculadora ao invés de calculadora Bean? Vou esperar 30 segundos para lhe dar a resposta. Vá em frente... pense e responda que eu aguardo. É isso mesmo! De�nimos como Calculadora porque a Calculadora Bean implementa a interface Calculadora e, esta é uma boa prática, como você já viu em disciplinas anteriores. Voltando ao EJB, a anotação utilizada faz com que o ciclo de vida deste objeto seja completamente gerenciado pelo AS. Sua criação, utilização e destruição não é responsabilidade do desenvolvedor, que pode gastar seu tempo com coisas mais úteis, como por exemplo, implementar regras de negócio ou jogar Playstation 4. Uma característica bastante interessante é que, digamos que cada instância da calculadora pode atender a um usuário de cada vez e, ocorra que 11 usuários estejam tentando acessar seu importante serviço de cálculo ao mesmo tempo. O Unidade 3 - Tópico 1 Livro Digital - Programação para Web II https://livrodigital.uniasselvi.com.br/ADS27_programacao_para_web_ii... 8 of 17 26/06/2024, 16:27 Até agora trabalhamos somente com os stateless session beans sendo acessados localmente por aplicações web e através da anotação @EJB. Isso ocorre somente quando o EJB é instalado no mesmo AS onde seus acessos são feitos, ou seja, a aplicação que faz chamadas ao componente deve estar no mesmo AS. Quando o acesso é remoto, em outro servidor de aplicação, não dispomos do recurso de injeção de dependência. Por este motivo, todo stateless session bean implantado em um servidor de aplicação deve receber um nome único, que é utilizado para se obter a referência remota a este componente. Conforme K19 (2015), antes da versão 3.1, os nomes dos sessions beans não seguiam nenhum padrão, o que di�cultava o desenvolvimento em servidores de aplicação distintos. A partir da versão 3.1 os nomes são padronizados e, portanto, portáveis entre os servidores de aplicação. Uma aplicação remota deve acessar o serviço de nomes (JNDI) do AS no qual o EJB que ela deseja utilizar está implantado, conforme a Figura 121. Uma vez com a referência do stateless session bean, o acesso remoto ocorre exatamente como o local, de forma transparente para a aplicação. Logicamente, como o acesso ocorre em outro servidor, o tempo de resposta geralmente é mais lento. As regras para nomenclatura podem ser acessadas em: <jjccpp..oorrgg//eenn//jjssrr//ddeettaa iill??iidd==331188>. FIGURA 121 – LOOKUP DO NOME DO EJB 2.4 CICLO DE VIDA 22..44 CCIICCLLOO DDEE VVIIDDAA Unidade 3 - Tópico 1 Livro Digital - Programação para Web II https://livrodigital.uniasselvi.com.br/ADS27_programacao_para_web_ii... 10 of 17 26/06/2024, 16:27 https://jcp.org/en/jsr/detail?id=318 https://jcp.org/en/jsr/detail?id=318 https://jcp.org/en/jsr/detail?id=318 https://jcp.org/en/jsr/detail?id=318 de aplicação, o EJB Container pode destruir instâncias que estejam no estado PRONTO, levando-as ao estado NÃO EXISTE. 22..55 EESSCCAALLAABBIILLIIDDAADDEE,, PPOOOOLL EE CCAALLLL--BBAACCKKSS K19 (2015) coloca que as características dos stateless session beans favorecem a escalabilidade da aplicação pois, de acordo com a demanda, o EJB Container cria novas instâncias e cada instância pode atender vários clientes. O EJB Container administra as instâncias criadas através de um Pool. Cada servidor de aplicação oferece con�gurações especí�cas para melhorar a e�ciência no atendimento das chamadas. Por exemplo, o Glass�sh permite que uma quantidade máxima de instâncias de um determinado stateless session beans seja de�nida pela aplicação (K19, 2015). Através dos call-backs podemos associar algoritmos nas transições de estado dos stateless session beans. Isso ocorre através de anotações de�nidas para esta �nalidade, conforme demonstrado nas Figuras 122 e 123. FIGURA 122 – ANOTAÇÃO @POSTCONSTRUCT Unidade 3 - Tópico 1 Livro Digital - Programação para Web II https://livrodigital.uniasselvi.com.br/ADS27_programacao_para_web_ii... 12 of 17 26/06/2024, 16:27 método assíncrono para agendar a entrega. Neste contexto, assíncrono signi�ca que será atendido em algum momento próximo. Em geral, o servidor de aplicação coloca a execução destes métodos em pilhas e os executa em sequência. Observe que isto não signi�ca um atraso de dias ou semanas na execução, mas sim de minutos. Nem todas as operações podem ou devem ser colocadas para executar de formaassíncrona. O modelo de negócios deve ser avaliado para ver se permite este tipo de �exibilidade. Para utilizarmos os métodos assíncronos, basta anotar a classe ou o(s) método(s) que deve(m) ser de�nido(s) como assíncrono(s) através da anotação @Asynchronous (Figura 124). Podemos observar que o retorno dos métodos assíncronos é feito através da interface Future, pertencente ao pacote jjaavvaa..uuttiill..ccoonnccuurrrreenntt. Através desta interface é possível veri�car se a tarefa já foi concluída pelo método isDone() e também recuperar o resultado através do método get(). FIGURA 124 – MÉTODOS ASSÍNCRONOS FONTE: Adaptado de K19 (2015) Unidade 3 - Tópico 1 Livro Digital - Programação para Web II https://livrodigital.uniasselvi.com.br/ADS27_programacao_para_web_ii... 14 of 17 26/06/2024, 16:27 Responder Responder 2 Faça o mesmo que foi solicitado na questão 1, utilizando JSF. Você deve implementar a interface através de um xhtml e o managed bean que fará a interação com o stateless session bean. 3 Descreva detalhadamente o ciclo de vida de um stateless session bean. Unidade 3 - Tópico 1 Livro Digital - Programação para Web II https://livrodigital.uniasselvi.com.br/ADS27_programacao_para_web_ii... 16 of 17 26/06/2024, 16:27