1. O que é EJB?
- Enterprise JavaBeans (EJB) é uma especificação da plataforma Java EE (atualmente Jakarta EE) usada para desenvolver aplicativos corporativos robustos, escaláveis e seguros.
- Ele facilita o desenvolvimento de componentes corporativos reutilizáveis, como lógica de negócios, manipulação de transações e acesso remoto.
2. Objetivos principais do EJB
- Simplificar o desenvolvimento de aplicativos distribuídos.
- Gerenciar automaticamente aspectos corporativos, como segurança, transações e persistência.
- Promover modularidade e reutilização de código.
3. Arquitetura EJB
- EJBs são gerenciados pelo Container EJB, que é responsável por:
- Ciclo de vida do bean.
- Controle de transações.
- Gerenciamento de conexões.
- Segurança.
Camadas da arquitetura:
- Cliente: Interage com os EJBs usando proxies gerados automaticamente.
- EJB Container: Proporciona o ambiente para execução dos beans.
- Enterprise Beans: Contêm a lógica de negócios.
- Recursos Corporativos: Como bancos de dados e serviços externos.
4. Tipos de EJB
- Session Beans:
- Usados para implementar lógica de negócios.
- Três subtipos:
- Stateless: Sem estado. Ideal para operações independentes.
- Stateful: Mantêm o estado entre as interações do cliente.
- Singleton: Um único objeto compartilhado por todos os clientes.
- Message-Driven Beans (MDBs):
- Processam mensagens assíncronas (exemplo: JMS).
- Entity Beans(deprecated):
- Antigamente usados para persistência, mas substituídos pelo JPA.
5. Criando o Projeto
Utilizei o NetBeans para criar o projeto.
Foi criado três projetos com o Maven.
6. Código do Servidor
Pom.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>br.com.cursojavanow</groupId> <artifactId>HelloEJBServer</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <dependencies> <!-- Dependência para Jakarta EE --> <dependency> <groupId>jakarta.platform</groupId> <artifactId>jakarta.jakartaee-api</artifactId> <version>11.0.0-M4</version> <scope>provided</scope> </dependency> <dependency> <groupId>br.com.cursojavanow</groupId> <artifactId>HelloEJBInterface</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies> <build> <plugins> <!-- Plugin para compilar o código --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>21</source> <target>21</target> </configuration> </plugin> </plugins> </build> </project> |
7. Código da Interface
Pom.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>br.com.cursojavanow</groupId> <artifactId>HelloEJBInterface</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <dependencies> <!-- Dependência para Jakarta EE --> <dependency> <groupId>jakarta.platform</groupId> <artifactId>jakarta.jakartaee-api</artifactId> <version>11.0.0-M4</version> <scope>provided</scope> </dependency> </dependencies> <build> <plugins> <!-- Plugin para compilar o código --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>21</source> <target>21</target> </configuration> </plugin> </plugins> </build> </project> |
8. Código do Cliente
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
package br.com.cursojavanow; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import java.util.Properties; public class HelloClient { public static void main(String[] args) { try { Properties props = new Properties(); props.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.enterprise.naming.SerialInitContextFactory"); props.put("java.naming.factory.url.pkgs", "com.sun.enterprise.naming"); props.put("java.naming.factory.state", "com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl"); InitialContext ctx = new InitialContext(props); HelloBeanRemote bean = (HelloBeanRemote) ctx.lookup("java:global/HelloEJBServer/HelloBean!br.com.cursojavanow.HelloBeanRemote"); // Chamar o método remoto System.out.println(bean.sayHello("World")); } catch (NamingException e) { System.err.println("Erro ao localizar o EJB remoto. Verifique o nome JNDI e o servidor."); e.printStackTrace(); } } } |
Configuração do Cliente
–add-opens java.base/java.lang=ALL-UNNAMED
Pom.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>br.com.cursojavanow</groupId> <artifactId>HelloEJBClient</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <dependencies> <!-- Dependência para a interface do EJB --> <dependency> <groupId>br.com.cursojavanow</groupId> <artifactId>HelloEJBInterface</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <!-- Dependência para Jakarta EE --> <dependency> <groupId>jakarta.platform</groupId> <artifactId>jakarta.jakartaee-api</artifactId> <version>11.0.0-M4</version> <scope>provided</scope> </dependency> <dependency> <groupId>fish.payara.api</groupId> <artifactId>payara-api</artifactId> <version>6.2023.9</version> </dependency> <dependency> <groupId>org.glassfish.main.appclient</groupId> <artifactId>gf-client</artifactId> <version>7.0.20</version> </dependency> </dependencies> <repositories> <repository> <id>glassfish-repo</id> <url>https://repo.eclipse.org/content/groups/glassfish/</url> </repository> <repository> <id>payara-repo</id> <url>https://maven.payara.fish/repository/payara-artifacts/</url> </repository> <repository> <id>central</id> <url>https://repo.maven.apache.org/maven2</url> </repository> </repositories> <build> <plugins> <!-- Plugin para compilar o código --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>21</source> <target>21</target> </configuration> </plugin> </plugins> </build> </project> |
9. Execução
Estou utilizando o Payara Server
Inicia o servidor.
Execute o cliente.
Se der certo deve aparecer algo assim.
Tarefas da Lição 1
- Configure um servidor de aplicação (ex.: WildFly ou GlassFish) e crie um projeto simples com EJB.
- Implemente o exemplo acima de um Stateless Session Bean.
- Teste o cliente para garantir que a interação entre o cliente e o EJB funcione.
Deixe um comentário