Prévia do material em texto
• TTrraannssaaççõõeess: A arquitetura EJB de�ne um suporte para utilização de transações. Esse suporte é integrado com a Java Transaction API (JTA), incluindo a possibilidade de realizar transações distribuídas. • SSeegguurraannççaa: Suporte para realizar autenticação e autorização de forma ENTERPRISE JAVA BEANS (EJB) E CONTEXT AND DEPENDENCY INJECTION (CDI) UNIDADE 3 SSTTAATTEELLEESSSS SSEESSSSIIOONN BBEEAANNSS TTÓÓPPIICCOO 11 11 IINNTTRROODDUUÇÇÃÃOO Nas tecnologias da família EJB é que percebemos a verdadeira extensão das capacidades do JAVAEE. Conforme K19 (2015), muitos sistemas corporativos são desenvolvidos seguindo a arquitetura de�nida pelo padrão EJB. Ao utilizar esta arquitetura, alguns recursos são disponibilizados automaticamente pelo AS. Entre estes recursos, podemos destacar: Unidade 3 - Tópico 1 Livro Digital - Programação para Web II https://livrodigital.uniasselvi.com.br/ADS27_programacao_para_web_ii... 1 of 17 26/06/2024, 16:28 FONTE: O autor Para exempli�car, vamos considerar um sistema bancário, onde os empréstimos, transferências, saques, depósitos, cobranças etc. são as regras de negócio. Cada aplicação possui suas próprias regras de negócio, consequência do ramo de atuação e do contexto da mesma. Ao utilizar a arquitetura EJB para implementar estas regras de negócio, cada regra ou conjunto de regras é implementada em componentes especí�cos, conhecidos como stateless session beans, cuja principal característica é a não manutenção de estado conversacional. 22..11 EEJJBB 33..00 Conforme K19 (2015), o primeiro passo para implementar um stateless session bean é de�nir os métodos de negócio através de uma interface. Considerando um componente para a realização de operações matemáticas, uma possível interface é demonstrada na �gura a seguir. FIGURA 115 – INTERFACE DE NEGÓCIOS Unidade 3 - Tópico 1 Livro Digital - Programação para Web II https://livrodigital.uniasselvi.com.br/ADS27_programacao_para_web_ii... 3 of 17 26/06/2024, 16:28 FONTE: Adaptado de K19 (2015) Como esta classe implementa a interface Calculadora, somos obrigados a fornecer implementação para todos os métodos que nela forem de�nidos, conforme pode ser observado nos métodos soma, subtrai, multiplica e divide (linhas 13 a 27). As anotações de�nidas nas linhas 10 e 11 é que caracterizam a classe como um stateless session bean. A anotação @Stateless especi�ca a característica de não manutenção de estado conversacional, enquanto a anotação @Local de�ne que este é um EJB local que implementa os métodos de negócio de Calculadora.class. Um stateless session bean pode implementar várias interfaces, porém, apenas os métodos das interfaces que estiverem dentro da anotação são considerados como métodos de negócio. Caso o stateless session bean deve ser utilizado também na forma remota, a anotação muda, conforme pode ser visto na �gura a seguir. Ao marcá-lo desta forma, estamos permitindo que a aplicação possa ser colocada em instâncias diferentes do AS. Em termos práticos, essa prática auxilia a colocação de uma aplicação na nuvem, pois a escalabilidade é atingida de forma transparente para o desenvolvedor. Uma instância do AS pode �car em uma máquina e ser responsável pela interface web e mobile em android ou html, enquanto outra instância mantém os ejb e uma terceira máquina poderia ser responsável pelo banco de dados. Unidade 3 - Tópico 1 Livro Digital - Programação para Web II https://livrodigital.uniasselvi.com.br/ADS27_programacao_para_web_ii... 5 of 17 26/06/2024, 16:28 FONTE: Adaptado de K19 (2015) 22..33 TTEESSTTAANNDDOO OO EEJJBB Considerando que os stateless session beans são utilizados para a implementação das regras de negócio que não necessitam de estado conversacional, precisaremos de uma interface para testá-los. Para simpli�car o acesso ao EJB, faremos seu acesso através de servlets. Nosso stateless session bean pode ser injetado em um servlet através da anotação @EJB. A �gura a seguir traz a implementação do servlet propriamente dito. Apesar dos servlets não fazerem parte do escopo deste caderno, eles são extremamente importantes no ecossistema JAVAEE. Maiores detalhes sobre os servlets podem ser acessados em: <ccaaeelluumm..ccoomm..bbrr//aappoossttiillaa--jjaavvaa--wweebb//ssee rrvvlleettss//>. FIGURA 119 – MENSAGENS DE VALIDAÇÃO Unidade 3 - Tópico 1 Livro Digital - Programação para Web II https://livrodigital.uniasselvi.com.br/ADS27_programacao_para_web_ii... 7 of 17 26/06/2024, 16:28 https://www.caelum.com.br/apostila-java-web/servlets/ https://www.caelum.com.br/apostila-java-web/servlets/ https://www.caelum.com.br/apostila-java-web/servlets/ https://www.caelum.com.br/apostila-java-web/servlets/ que acontece? O AS automaticamente instância um novo objeto para atender a estes 10 usuários. Isso pode ser con�gurado no AS, de forma que sua classe atenda mais ou menos do que 10 usuários simultâneos, bem como o número de instâncias que serão geradas. Outra característica relevante é que tudo isto faz parte da especi�cação, ou seja, se você escolher GlassFish, Wild�y, WebLogic ou qualquer outro servidor de aplicação que obedeça à especi�cação EJB, esta característica de controle do ciclo de vida vem embutida. Se você achou isso legal, espere até chegarmos no CDI. Os EJB são desconectados da interface grá�ca e da persistência (a�nal, podemos utilizar JPA), o que permite que ao invés de HTML puro com um servlet, criemos um JSF conectado a um Managed Bean que declara o EJB, conforme ilustrado na �gura a seguir. FIGURA 120 – MANAGED BEAN INJETANDO O EJB FONTE: Adaptado de K19 (2015) Na linha 6 está a anotação @Named, que faz o bind entre o arquivo JSF e managed bean. Na linha 9, da mesma forma que no servlet, injetamos a calculadora com a anotação EJB. O restante do comportamento é o mesmo que foi exempli�cado anteriormente. Unidade 3 - Tópico 1 Livro Digital - Programação para Web II https://livrodigital.uniasselvi.com.br/ADS27_programacao_para_web_ii... 9 of 17 26/06/2024, 16:28 1. Uma única instância de um SLSB pode atender às chamadas de diversos clientes. 2. Uma instância de um SLSB não atende a duas chamadas ao mesmo tempo. 3. O EJB Container pode criar várias instâncias do mesmo SLSB para atender mais rapidamente às chamadas dos clientes. As instâncias dos stateless session beans são administradas pelo EJB Container dentro do servidor de aplicação. Devemos entender o ciclo de vida desses objetos para utilizar corretamente a tecnologia EJB. Três aspectos fundamentais dos stateless session beans ajudam a entender o ciclo de vida das instâncias (K19, 2015). O ciclo de vida das instâncias de um stateless session bean possui apenas dois estados: NÃO EXISTE e PRONTO onde as variações de estado são as seguintes (K19, 2015): NNÃÃOO EEXXIISSTTEE -->> PPRROONNTTOO Antes de ser criada, dizemos que uma instância de um SLSB se encontra no estado NÃO EXISTE. Neste estado, uma instância não pode atender a chamadas dos clientes. De acordo com a quantidade de chamadas e critérios de cada servidor de aplicação, o EJB Container pode criar novas instâncias de um SLSB. Cada instância criada passa para o estado PRONTO, onde pode começar a receber chamadas. PPRROONNTTOO -->> PPRROONNTTOO Quando uma chamada é realizada, o EJB Container seleciona uma instância entre as que estejam no estado PRONTO para realizar o atendimento. Enquanto uma instância está atendendo a uma chamada ela não pode atender a outras chamadas. Depois de �nalizar o atendimento, a instância volta para o estado PRONTO podendo receber outras chamadas. PPRROONNTTOO -->> NNÃÃOO EEXXIISSTTEE Novamente, de acordo com a quantidade de chamadas e critérios de cada servidor Unidade 3 - Tópico 1 Livro Digital - Programação para Web II https://livrodigital.uniasselvi.com.br/ADS27_programacao_para_web_ii... 11 of 17 26/06/2024, 16:28 FONTE: Adaptado de K19 (2015) FIGURA 123 – ANOTAÇÃO @PREDESTROY FONTE:Adaptado de K19 (2015) Na linha 15 da Figura 122, colocamos a anotação @PostConstruct. Como o nome indica, o objetivo desta anotação é fazer com que este método execute quando uma nova instância é criada. Já na linha 32 da Figura 123, o objetivo da anotação @PreDestroy é executar o que estiver de�nido no método logo antes da instância ser destruída pelo AS. Ambas as anotações somente podem ser colocadas antes de métodos. 22..66 MMÉÉTTOODDOOSS AASSSSÍÍNNCCRROONNOOSS A partir da versão 3.1 dos EJBs, é possível de�nir métodos assíncronos. Tais métodos são utilizados para implementar tarefas longas que não podem bloquear o resto da aplicação até que sejam encerradas. Por exemplo, um processo de compra on-line possui alguns passos que não podem ser assíncronos como a seleção dos produtos, o fechamento da conta e o processo de pagamento. Já a comunicação do sistema de compra com a parte de logística não precisa ser síncrona. É possível, após a realização da compra de um produto, chamar um Unidade 3 - Tópico 1 Livro Digital - Programação para Web II https://livrodigital.uniasselvi.com.br/ADS27_programacao_para_web_ii... 13 of 17 26/06/2024, 16:28 RREESSUUMMOO DDOO TTÓÓPPIICCOO • Muitos sistemas corporativos são desenvolvidos seguindo a arquitetura de�nida pelo padrão EJB. Ao utilizar esta arquitetura, alguns recursos são disponibilizados automaticamente pelo servidor de aplicação. • Os dois principais tipos de EJB são os stateless session beans e os statefull session beans. • Transações, segurança, remotabilidade e concorrência são alguns dos recursos disponibilizados automaticamente pelo servidor de aplicação. • A principal característica dos stateless session beans é a não manutenção de estado conversacional. • Os stateless session beans podem ser locais ou remotos. • Os EJBs podem ser injetados em aplicações web, independentemente de se utilizar Servlets ou Managed Beans no back end. AAUUTTOOAATTIIVVIIDDAADDEESS NNeessttee ttóóppiiccoo vvooccêê vviiuu qquuee: Unidade 3 - Tópico 1 1 Implemente uma interface web para a calculadora do exemplo utilizando html. A interface deve permitir a utilização de todas as operações. Unidade 3 - Tópico 1 Livro Digital - Programação para Web II https://livrodigital.uniasselvi.com.br/ADS27_programacao_para_web_ii... 15 of 17 26/06/2024, 16:28 Responder Unidade 2 Tópico 2 Conteúdo escrito por: Todos os direitos reservados © Prof. Cristiano Roberto Franco Unidade 3 - Tópico 1 Livro Digital - Programação para Web II https://livrodigital.uniasselvi.com.br/ADS27_programacao_para_web_ii... 17 of 17 26/06/2024, 16:28 https://livrodigital.uniasselvi.com.br/ADS27_programacao_para_web_ii/unidade2.html?topico=2 https://livrodigital.uniasselvi.com.br/ADS27_programacao_para_web_ii/unidade2.html?topico=2 https://livrodigital.uniasselvi.com.br/ADS27_programacao_para_web_ii/unidade2.html?topico=2 https://livrodigital.uniasselvi.com.br/ADS27_programacao_para_web_ii/unidade2.html?topico=2 https://livrodigital.uniasselvi.com.br/ADS27_programacao_para_web_ii/unidade2.html?topico=2