Você está na página 1de 37

UNAMA Universidade da Amaznia PR-REITORIA DE PESQUISA, PS-GRADUAO E EXTENSO PS-GRADUAO LATO SENSU Curso de Especializao em Desenvolvimento de Sistemas Baseado

o em Software Livre

UNID 4

- Enterprise JavaBeans (EJB) Parte 2


Prof. Cludio Martins claudiomartins2000@gmail.com

Desenvolvimento de Aplicaes Multicamadas

Assuntos
Entity Beans Beans baseados em mensagem Injeo de recursos e o JNDI Interceptadores Segurana Servios Web

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

Entity Beans

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

O que so Entity Beans


So componentes de negcio com mecanismos

de persistncia de dados.
O estado pode ser persistido em um banco de

dados relacional, arquivos XML ou outros tipos de repositrios de dados.


O estado mantido alm do tempo de vida da

aplicao ou do servidor de aplicao J2EE.


Veremos mais detalhes na Unidade 5 (Persistncia

com JPA).

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

Beans baseados em mensagem

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

Um Sistema Orientado a Mensagens permite que um sistema

O que um Sistema Orientado a Mensagens?

receba ou envie mensagens para outros sistemas de forma assncrona.

Alm disso, o sistema que envia uma mensagem no precisa

conhecer os sistemas que a recebero. Da mesma forma, que os sistemas que recebem uma mensagem no precisam conhecer o sistema que a enviou.
Essas caractersticas permitem que os sistemas sejam

integrados com baixo acoplamento.

A plataforma JavaEE define o funcionamento de um

Middleware Orientado a Mensagens atravs da especificao Java Message Service JMS.


Leia o pdf EJB-Message-Driven-Bean.pdf para mais

detalhes.
Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

Injeo de recursos e o JNDI

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

JNDI Java Naming and Directory Service


O servidor JEE gerencia vrios recursos e

componentes que podem esta localizados tanto na prpria mquina em que est rodando ou em outra mquina ou mesmo em outro servidor JEE.
Para localizar um determinado recurso o JEE

utiliza um servidor de nomes (Naming Service) , que consiste de uma espcie de lista de telefnica onde os vrios recursos so acessados atravs de um nome.
O servio que implementa esta lista chamado

de JNDI (Java Naming and Directory Interface).


Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

Funes de um servio de nomes


A principal funo de um servio de nomes permitir a associao

de um nome a recursos computacionais como banco de dados, componentes, arquivos, etc.


As duas funes bsicas de um servio de nomes (JNDI) so:
Associar (mapear) um nome a um recurso Para utilizar um determinado recurso, como um banco de

dados ou um componente Session Bean, devemos registrlo no JDNI. Localizar um recurso a partir de seu nome
Outros componentes para utilizarem o recurso iro obt-lo

do JNDI, passando o nome com o qual foi registrado. O JNDI fornece um modo unificado de localizao de recursos no JEE. Esse processo chama-se lookup
Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

A injeo de dependncia permite que um

Uso de injeo de dependncia para acessar recursos

objeto (componente) use anotaes para solicitar recursos externos diretamente.


O resultado um cdigo mais limpo, porque no

mais necessrio sobrecarregar o cdigo com a criao de recursos e cdigo de pesquisa.


Voc pode usar injeo de recursos em

componentes EJB, contineres da Web e clientes.

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

10

Como funciona a Injeo de Dependncia?

Injeo de Dependncia diminui o esforo de localizao de objetos/recursos os quais sua classe depende.
Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

11

Injeo de dependncia no JEE


Para solicitar a injeo de um recurso, um componente

usa a anotao @Resource


no caso de alguns recursos especializados, as anotaes

@EJB e @WebServiceRef.

Entre os recursos que podem ser injetados esto:


Objeto SessionContext Objeto DataSources Interface EntityManager Outros Beans empresariais Servios Web Filas de mensagem e tpicos Fbricas de conexo para adaptadores de recursos
Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

12

Exemplo de Injeo de Dependncia no servidor JEE


Em um servidor JEE (Glassfish, Jboss) os nomes dos servios devem ser

registrados em uma configurao global (vista por todas as aplicaes).

A figura a seguir mostra como possvel fazer o lookup direto (em cdigo

Java) e o equivalente utilizando a injeo de dependncia (com anotao @Resource), para ter acesso ao um objeto de fonte de dados (banco MySql).

Em http://resumotecnico.blogspot.com.br/2011/06/lookup-jndi-no-java-ee-6.html
Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

13

Exemplo de Injeo de Dependncia em um componente SessionBean

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

14

Criando e configurando o servio MySQL no Glassfish 3.x

A seguir veremos como criar e configurar o

servio de acesso ao MySQL (DataSource) no servidor GlassFish.


1. Baixe o driver (JBDC) do MySQL 2. Copie o driver Jar (mysql-connector-java-x.x.x-

bin.jar) para a pasta lib (dentro da pasta domains) onde est instalado o Glassfish .
3. Entre no console de administrao do servidor

GlassFish (http://localhost:4848/ ).
4. No menu Common Task abra o menu

Resources (Recursos).
Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

15

Criando e configurando o servio MySQL no Glassfish (2)


5. Abra JDBC e clique em Connection Pools (Grupos/Pools

de Conexo).

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

16

Criando e configurando o servio MySQL no Glassfish (3)


6. Clique em New (Novo) e entre com o nome do pool de

conexo JDBC. Selecione javax.sql.ConnectionPoolDataSource em Resource Type e escolha o tipo MySQL em Database vendor.

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

17

Criando e configurando o servio MySQL no Glassfish (4)


7. Clique em Next (prximo) e preencha os detalhes da

conexo, com pelo menos os seguintes campos:


DatabaseName (nome do banco) Password (senha do usurio de banco)

URL (o formato jdbc:mysql://localhost:3306/test) test o nome do banco de dados ServerName User

Clique em Finish (Finalizar). Retorne para a pgina

Connection Pools.

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

18

Criando e configurando o servio MySQL no Glassfish (5)


Clique no Connection Pool que foi criado. Abra a pgina para

editar a configurao (Edit Connection Pool ).

Clique em Ping. Se a conexo estiver corretamente

configurada uma mensagem (Ping Succeeded) surgir na pgina.

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

19

Criando e configurando o servio MySQL no Glassfish (6)


Agora clique em JDBC Resorces no menu JDBC. Clique em New (novo). Entre com no nome do JNDI (no exemplo: jdbc/mysqltest) e

selecione o pool que foi criado em Pool Name.

Clique em OK.
Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

20

Teste de acesso ao servio MySQL


Para testar a conexo usando o nome (JNDI) do

DataSource (MySql), use o cdigo em uma aplicao (JEE):

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

21

Interceptadores

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

22

O que so Interceptadores?
Interceptadores de mtodos do Java EE um

poderoso recurso que permite interceptar um mtodo antes que ele seja executado, permitindo que altere parmetros de envio, valores de retorno e muito mais. (PlainOld Java Object) que tem a capacidade de interceptar tanto chamadas de mtodos de negcio quanto os eventos de ciclo de vida de um EJB. injeo de dependncia, utilizando, por exemplo, a anotao @Resource para receber um objeto de sesso (SessionContext). Aspectos.

Um Interceptador (Interceptor) uma classe POJO

Cada interceptador pode receber quaisquer recursos por

Esse recurso semelhante tcnica de Orientao a


Veja mais em http://docs.oracle.com/javaee/6/tutorial/doc/gkeed.html
Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

23

Segurana

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

24

Segurana na arquitetura Java EE


Segurana um aspecto muito importante em

aplicaes corporativas
No ambiente Java EE, o controle de segurana

atua em trs nveis de preocupaes:


Em nvel de protocolo de transporte: tecnologias

com base em (SSL Security Sockets Layer)

Autenticao e Autorizao Em nvel de troca de mensagens (Message Security

Level - para Web Services, que implementado em alguns servidores, como o GlassFish )

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

25

Autenticao
A autenticao verifica a identidade de um

determinado usurio, normalmente, exigindo que o usurio informe um nome e senha.


No ambiente de Java EE, a autenticao

associado com o conceito de realm (domnio).


O realm (domnio) pode armazenar informaes

de identidade do usurio de muitas maneiras, incluindo arquivos, diretrios LDAP, e at mesmo bancos de dados acessados atravs de JDBC.
Abra o console do administrador do Glassfish para criar e editar

as propriedades de domnios e papis de segurana.

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

26

Autorizao
A autorizao o processo que concede

permisses de controle de acesso com base nas funes que o software oferece, bem como na identidade do usurio autenticado para usar o software.
Cada vez que um usurio faz logon (autenticao), ele

recebe um conjunto de permisses para a aplicao.

Veja como implementar segurana em aplicaes web no Java EE em http://netbeans.org/kb/docs/javaee/ecommerce/security.html


Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

27

Segurana no Java EE 6
Na verso JEE 6, a segurana da aplicao

definida em 5 anotaes:
javax.annotation.security.PermitAll javax.annotation.security.DenyAll javax.annotation.security.RolesAllowed javax.annotation.security.DeclareRoles jvax.annotation.security.RunAs

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

28

Anotaes de segurana
As anotaes @PermitAll , @DenyAll e

@RolesAllowed so definidas para as permisses de especificao dos mtodos de negcio do EJB.


@DeclareRoles e @RunAs so anotaes que

tipificam o nvel de segurana das classes, definidas em funes de metadados relacionados.

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

29

Anotaes de segurana
@PermitAll - Indica que o mtodo ou todos os mtodos de negcio do EJB so acessveis por todos. @DenyAll - Indica que o mtodo indicado no EJB no pode ser acessado por nenhum usurio. @RolesAllowed - Indica que o mtodo indicado ou todos os mtodos de negcio no EJB podem ser acessados por usurios associados lista de papis (roles). @DeclareRoles - Define papis para checagem de segurana.
Para ser usado por EJBContext.isCallerInRole, HttpServletRequest.isUserInRole, e WebServiceContext.isUserInRole.

@RunAs - Especifica o papel para executar como para os componentes indicados.


Leia mais em http://java.sun.com/developer/technicalArticles/J2EE/security_annotation/
Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

30

Exemplo de Controle de Segurana


Neste exemplo, o mtodo hello() acessvel por todos,

e o mtodo bye() acessvel por usurios com o papel javaeeUser.


@Stateless @RolesAllowed("javaeeUser") public class HelloEJB implements Hello { @PermitAll public String hello(String msg) { return "Hello, " + msg; } public String bye(String msg) { return "Bye, " + msg; } }
Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

31

Servios Web

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

32

O que so Servios Web (Web Services)?


Servios Web (ou Web Services) uma tecnologia

(protocolo) que permite a troca informaes entre aplicaes independente da plataforma ou linguagem em que essas aplicaes foram construdas.
Web Services funciona no protocolo HTTP e utiliza o

padro XML para estruturar os dados das mensagens trocadas entre os sistemas (o cliente e o fornecedor do servio)

Na prtica, uma aplicao corporativa pode definir um

servio web especificando um contrato bsico a partir de uma funo do sistema, que prover como servio a ser consumido pelos clientes. Esse contrato estabelece detalhes da funo que fornecida pelo servio e as mensagens trocadas como parte dessa funo.
Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

33

Especificao da tecnologia Web Services


A organizao W3C (www.w3c.org) define alguns

padres para definir o funcionamento de um web service.


A especificao Java diretamente relacionada a

Web Services que seguem os padres da W3C a Java API for XML-Based Web Services JAXWS.
A JAX-WS depende fortemente de outra especificao Java, a JAXB Java Architecture for XML Binding.

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

34

JAX-WS e EJB
Os recursos da arquitetura EJB podem ser

utilizados juntamento com os recursos definidos pela especificao JAX-WS.


Podemos expor um Stateless Session Bean ou

um Singleton Session Bean como um Web Service que segue os padres da W3C pois a duas especificaes, EJB e JAX-WS, esto relacionadas.
Do ponto de vista da aplicao, basta aplicar a

anotao @WebService na classe que implementa um Stateless Session Bean ou um Singleton Session Bean.
Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

35

Exemplo de WS
O exemplo a seguir mostra um componente

Stateless SessionBean que publica seus mtodos como servios em um Web Service.
A classe Random fornece o mtodo next como web

service para um gerar nmero randmico.

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

36

Referncias
BURKE, Bill and MONSON-HAEFEL, Richard.

"Enterprise JavaBeans 3.0". O'Reilly. 5 ed. 2006. 760 p.


Tecnologia JEE: http://docs.oracle.com/javaee/ Tutorial do JEE 6 :

http://docs.oracle.com/javaee/6/tutorial/doc/

Desenvolvimento de Aplicaes Multicamadas Prof. Cludio Martins

37

Você também pode gostar