Download public void

Document related concepts
no text concepts found
Transcript
PRÁCTICA 3:
COMPONENTES
Javier Sánchez Pérez
Arquitectura del Software
Grado en Informática
Contenidos
• Java EE
• Enterprise Java Beans
• Stateless Session Beans
• Stateful Session Beans
• Singleton Session Beans
• Message-driven Beans
• Práctica 3: Componentes
Java EE
Aplicaciones
Applets
Páginas Web
Nivel Cliente
Servlets
Java Server Pages
Java Server Faces
Nivel Web
EJBs
DDBB
Nivel Negocio
Nivel EIS
Java EE
Contenedor
Applet
Contenedor Web
Contenedor
EJB
Applet
Servlet, JSF, JSP
EJB
Contenedor
Cliente
Applicación
Enterprise Java Beans
• Desarrollo por componentes
• Componentes en el servidor
• Simplifican el desarrollo
• Aplicaciones cliente más sencillas
• Reutilizables
Enterprise Java Beans
Servidor de Aplicaciones
Contenedor EJB
Conjunto de EJB
Servicio de
Transacciones
Servicio de Directorio
Gestión Ciclo de Vida
Persistencia
Conexiones
Hilos
Servicio de Seguridad
Enterprise Java Beans
• Tipos de EJBs
• Session Beans (Stateless, Stateful, Singleton)
• Message-driven Beans
• Anotaciones (local)
• @EJB, @Remote, @Local, @Stateless
• JNDI lookup (remoto)
• java:global[/application]/module/ejb[/interface]
• java:app[/module]/ejb[/interface]
• java:module/ejb[/interface]
• Tipos de cliente:
• Remoto, local o Web Service
Enterprise Java Beans
• Declaración
@Session
public class Bean { ... }
• Interfaces de Negocio
@Local
public interface Interface { ... }
@Local(Interface.class)
public class Bean implements Interface{...}
Enterprise Java Beans
• Interfaces de Negocio
@Remote
public interface Interface { ... }
@Remote(Interface.class)
public class Bean implements Interface {...}
Enterprise Java Beans
• Acceso local por anotaciones
@EJB
Bean miBean;
• Acceso local por JNDI
Bean miBean=(miBean)InitialContext.lookup
("java:module/Bean");
Enterprise Java Beans
• Acceso remoto por JNDI
miBean=(Interface)InitialContext.lookup
("java:global/application/Bean");
Session Beans
• Interacción con un cliente
• Mantiene su información
• Media entre cliente y otros componentes
• Dos tipos
• Stateless
• Stateful
Stateless Session Beans
• Ciclo de vida
PostConstruct
No existe
Ready
PreDestroy
@PostConstruct
@PreDestroy
Stateless Session Beans
//en el servidor
@Stateless
public class ConverterBean {
private float yenRate = 83.0602;
private float euroRate = 0.0093016;
public float dollarToYen(float dollars) {
return dollars * yenRate;
}
public float yenToEuro(float yen) {
return yen * euroRate;
}
}
Stateless Session Beans
//en el cliente utilizando anotaciones
...
@EJB
Bean miBean;
float conv = miBean.dollarToYen(dolares);
...
Stateful Session Beans
• Ciclo de vida
PrePassivate
PostConstruct
No existe
Ready
PreDestroy
@PostConstruct
@PrePassivate
@PostActivate
[cliente] – @Remove
@PreDestroy
Passive
PostActivate
Stateful Session Beans
//la interfaz de negocio
@Remote
public interface Cart {
public void addBook(Book book);
public void removeBook(Book book);
public void remove();
}
//en el servidor
@Stateful
public class CartBean implements Cart {
...
public void addBook(Book book) {...}
public void removeBook(Book book) {...}
@Remove
public void remove() {...}
}
Stateful Session Beans
//en el cliente
...
CartBean miBean=(CartBean)InitialContext.lookup
("java:global/application/CartBean/Cart");
miBean.addBook(book1);
...
miBean.remove();
...
Singleton Session Beans
• Ciclo de vida
PostConstruct
No existe
Ready
PreDestroy
@Startup
@PostConstruct
@PreDestroy
Singleton Session Beans
//en el servidor
@Startup
@Singleton
public class StatusBean {
...
@PostConstruct
void init() {...}
@lock(LockType.READ)
public State getState() {...}
@lock(LockType.WRITE)
public State setState() {...}
}
Message-driven Beans
• Se activan por mensajes
• Java Message Service (JMS)
• Asíncronos
• Tiempo de vida corto
• Stateless
• No tienen interfaces
Message-driven Beans
• Ciclo de vida
onMessage
PostConstruct
No existe
Ready
PreDestroy
@PostConstruct
@PreDestroy
Message-driven Beans
//en el servidor
@MessageDriven
public class MessageBean implements MessageListener{
...
@PostConstruct
void init() {...}
public void onMessage(Message m) {...}
}
Message-driven Beans
//en el cliente
...
@Resource(mappedName="jms/ConnectionFactory")
private static ConnectionFactory connectionFactory;
@Resource(mappedName="jms/Queue")
private static Queue queue;
...
connection = connectionFactory.createConnection();
session = connection.createSession(false,
Session.AUTO_ACKNOWLEDGE);
messageProducer = session.createProducer(queue);
...
message = session.createTextMessage();
message.setText("This is a message");
messageProducer.send(message);
Práctica 3: Componentes
• Objetivos:
• Desarrollo Componentes del Nivel de Negocio
• Separación de los niveles (Cliente, Web, Negocio)
• Tareas:
• Cargar distintas fases con Stateful Bean
• Guardar puntuación y mostrar ranking con Stateless Bean
• Opcional
• Visualización de estadísticas con Singleton Bean
• Envío de mensajes Cliente-Servidor con Message-driven EJB
Práctica 3: Componentes
CLIENT TIER
<<JApplet>>
Principal
PhaseConnection
PhaseLoader
+loadPhase(p: int): Drawable
Se conecta a un
Stateful Session Bean
SceneController
Ranking
-scores: List
ScoreSaver
+getScores(): List
+saveScore(id: String, score: Integer): Ranking
Score
-score: Integer
+getScore(): Integer
ScoreConnection
Se conecta a un
Stateless Session Bean
Brick
CollisionListener
+onCollision(d: Integer)()
Práctica 3: Componentes
WEB TIER
<<Servlet>>
PhaseServlet
BUSINESS TIER
<<Stateful Session Bean>>
PhaseBean
-currentPhase: Integer
DBPhase
+nextPhase(): Drawable
+@Remove finish()
PhaseLoader
+loadPhase(p: int): Drawable
<<Servlet>>
ScoreServlet
<<Stateless Session Bean>>
ScoreBean
+saveScore(id: String, score: Integer): Ranking
Ranking
-scores: List
+getScores(): List
DBScore
ScoreManager
+saveScore(id: String, score: Integer)
+loadRanking(): Ranking
Práctica 3: Componentes [opcional]
WEB TIER
BUSINESS TIER
<<Singleton Session Bean>>
StatisticBean
<<Servlet>>
StatisticServlet
-id_users: List
-execution_times: List
-user_state: List
Estadística de cuántos usuarios
se han conectado, durante
cuánto tiempo y cuál es su
estado.
+getStatistics(): List
<<Message-driven Bean>>
MessagesBean
+onMessage(message: Message)
Recibe mensajes de texto del
cliente y los guarda a disco.
Referencias
• E. Jendrock et al., “Java EE 6 Tutorial”, Oracle, 2012