JavaEE – Framework para o desenvolvimento de aplicações

Propaganda
Tecnologias de Distribuição e Integração
Application Server
JavaEE – Framework
para o
Servlets
Web
desenvolvimento
de
aplicações distribuídas
Session
DBMSs
JSP
Client
Beans
em JavaJSFcom 3 camadas
Message
Driven
Beans
Web Container
Rich client
application
Message
Queues
EJB Container
Connectors
Brokers
Entity
Entity
Classes
Classes
Client app container
Presentation Tier
Logic Tier
Resource tier
TDIN - MIEIC - 2008/2009 - Nuno Flores - FEUP
2
EJBs
Session Beans – Objecto sem persistência permanente contendo a
interface para a lógica de negócio. Deve ser o tipo de objecto
directamente invocado pela camada de apresentação
Message-driven Beans – Actuam como receptores de mensagens
(JMS) em arquitecturas assíncronas. Geralmente aparecem como
intermediários entre os clientes (que enviam mensagens) e Session
Beans
Entities – Objectos com persistência que representam a
informação necessária à lógica de negócio (na forma de objecto).
Implementam uma ligação a uma base de dados
Síncronos
Entities
Assíncronos
Session
Message
Driven
CMP
BMP
Stateless
Stateful
Outrora considerados EJBs e correndo num EJB container, passam (a
partir da versão 1.5) a ser independentes e a constituirem uma API
autónoma (JPA).
TDIN - MIEIC - 2008/2009 - Nuno Flores - FEUP
CMP – Container managed persistence (automática)
BMP – Bean managed persistence
3
TDIN - MIEIC - 2008/2009 - Nuno Flores - FEUP
4
External
Client
Application
Server
Comunicação síncrona
Session
Bean
Remote
Interface
WS
Endpoint
Cliente
Local
Client
MDB
JVM
Queue
Local
Interface
Web Service
Client
EJB
EJB
container
WS
Entity
DB
Comunicação assíncrona
IS
TDIN - MIEIC - 2008/2009 - Nuno Flores - FEUP
5
import javax.ejb.Local;
import javax.ejb.Stateless;
@Local
public interface NameBeanLocal {
….. local methods …..
}
@Stateless
public class NameBean implements NameBeanLocal,
NameBeanRemote {
public NameBean () {
…
}
Anotações
TDIN - MIEIC - 2008/2009 - Nuno Flores - FEUP
JNDI – Java Naming and
Directory Interface
registo dos diversos
recursos disponíveis
num JavaEE
application server
….. implementação das interfaces …..
}
import javax.ejb.Stateful;
import javax.ejb.Remote;
@Remote
public interface NameBeanRemote {
….. remote methods …..
}
6
@Stateful
Utilização de recursos
@Resource
Intercepções
@PostConstruct
@PreDestroy
@PreActivate (stateful)
@PrePassivate (stateful)
@Remove (stateful)
TDIN - MIEIC - 2008/2009 - Nuno Flores - FEUP
7
TDIN - MIEIC - 2008/2009 - Nuno Flores - FEUP
8
Executam num ambiente especial, designado de “Application Client
Container”
Dependente do Application Server particular (exemplos no Glassfish):
Comunicam com o servidor usando RMI ou RMI-IIOP e o serviço JNDI
javac -classpath %GLASSFISH_HOME%\lib\javaee.jar -d ./classes *.java
Através de uma anotação:
Lookup explícito:
import javax.naming.*;
import javax.naming.*;
@EJB NameBean nb;
NameBean nb;
…..
InitialContext ic;
ic = new InitialContext();
….
nb. …..
….
Compilação:
não necessário se
instalado no
application server
Packaging (colocar em arquivo .jar as classes do EJB):
EJB
Deploying:
%GLASSFISH_HOME%\bin\asadmin deploy --host localhost --port 4848 --user admin
--passwordfile %GLASSFISH_HOME%\passfile --upload=true --target server
…….\NameBean.jar
…..
InitialContext ic;
ic = new InitialContext();
nb = (NameBean) ic.lookup(
NameBean.class.getName() );
….
nb. …..
….
Quando da compilação do cliente é necessário colocar em classpath:
javaee.jar (do AS) e as classes dos EJBs referenciados
cliente
Running:
Executam com “appclient –client ….jar” (em Glassfish)
TDIN - MIEIC - 2008/2009 - Nuno Flores - FEUP
@WebService
@WebMethod
%GLASSFISH_HOME%\bin\appclient -client ….\Client.jar
9
TDIN - MIEIC - 2008/2009 - Nuno Flores - FEUP
• Publisher/Subscriber
Subscriber
No glassfish:
Construir proxy com o comando wsimport:
Publisher
Topic
%GLASSFISH_HOME%\bin\wsimport -keep -d ….. http:// …. ?wsdl
@Stateless
@WebService
Public class ……… {
public ……… () {
…
}
@WebMethod
public ………… ( … ) {
…
}
}
10
Os serviços de mensagens em Java usam a especificação JMS (Java
Messaging Service) – implementada por vários fornecedores e ASs
Usar as anotações para classe e métodos
Cliente (via proxy):
Import javax.ejb.Stateless;
Import javax.jws.WebMethod;
Import javax.jws.WebService;
jar cvf …..
Subscriber
…
WSSessionBeanService service = new WSSessionBeanService();
WSSessionBean port = service.getWSSessionBeanPort();
JMS
String result = port.hello("world");
…
• Point to point
Receiver
obtenção da instância do proxy
Sender
Queue
Dentro de um “application client container”:
Receiver
@WebServiceRef(wsdlLocation = "http:// …. ?wsdl")
private static WSSessionBeanService service;
WSSessionBean port = service.getWSSessionBeanPort();
String result = port.hello("world");
TDIN - MIEIC - 2008/2009 - Nuno Flores - FEUP
JMS
Os MDBs podem funcionar nos dois modelos
11
TDIN - MIEIC - 2008/2009 - Nuno Flores - FEUP
12
@MessageDriven(mappedName = "jms/TestQueue", activationConfig = {
@ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue") })
@Resource(name = "jms/TestQueue")
private static Queue testQueue;
@Resource(name = "jms/TestQueueFactory")
private static ConnectionFactory testQueueFactory;
public class QueuedBean implements MessageListener {
public QueuedBean() { }
Connection connection = null;
Session session = null;
Message msg = null;
public void onMessage(Message message) {
if (message instanceof TextMessage) {
TextMessage msg = (TextMessage) message;
String stMsg = msg.getText();
...
}
}
}
connection = testQueueFactory.createConnection();
session = connection.createSession(false, javax.jms.Session.AUTO_ACKNOWLEDGE);
MessageProducer messageProducer = session.createProducer(testQueue);
Tipos de Mensagens:
ByteMessage MapMessage ObjectMessage StreamMessage TextMessage -
array de bytes (serialização manual)
conjunto de nomes/valores
objecto (serializável)
sequência de valores de tipos primitivos
um string
TDIN - MIEIC - 2008/2009 - Nuno Flores - FEUP
Pooling de objectos
Transacções em entity beans e MDBs
Persistência – em stateful session beans e entity beans
(automática nos CMPs)
Segurança – pode ser orientada aos métodos expostos
Messaging – em message driven beans
TDIN - MIEIC - 2008/2009 - Nuno Flores - FEUP
msg = session.get...Message();
...
messageProducer.send(msg);
13
TDIN - MIEIC - 2008/2009 - Nuno Flores - FEUP
14
ATM
Web Banking
or
Bank teller
Uma aplicação bancária
15
TDIN - MIEIC - 2008/2009 - Nuno Flores - FEUP
16
Download