Você está na página 1de 12

Universidad Autónoma del Estado de México

Facultad de ingeniería

Materia: Diseño de Sistemas

Proyecto: Aplicación de JEE y EJB

Alumno: Cristian Cedillo Jiménez

19 de enero del 2019

1
INDICE

Tema No
Introducción 3
Objetivo 3
Análisis de requisitos 4
Requisitos del sistema 4
Desarrollo de la aplicación 4
Codificación del módulo EJB 5
Creando Bean dirigido por mensaje 6
Creando la sesión Facade 8
Creación de la NewListServelet 9
Creando el servelet postMesagge 9
Ejecución del proyecto 11
Referencias 12

2
Introducción.
En este proyecto se craa una aplicación empresarial a un usuario publicar y recuperar mensajes de una
base de datos . La aplicación tiene un módulo EJB y uno web, donde el módulo EJB contiene na clase
de identidad un facade de sesión para la clase entidad y un bean controlado por mensaje.

El módulo web contiene servlets para mostrar y publicar mensajes y un bean de sesión singleton que
cuenta el número de usuarios en la sesión.

La estructura de la aplicación es la siguiente:

- Web Teir. El Nivel Web contiene la lógica de presentación de la aplicación y se ejecuta en un servidor
Java EE. En la aplicación NewsApp, el nivel web está representado por el módulo web y contiene
servlets que acceden a la lógica de negocios en el módulo EJB.

- Business Teir. Las aplicaciones de nivel empresarial también se ejecutan en servidores Java EE y
contienen la lógica empresarial de la aplicación. En la aplicación NewsApp, el nivel de negocio está
representado por el módulo EJB. El módulo EJB contiene el código que maneja las solicitudes de los
clientes del Nivel Web y administra las transacciones y cómo los objetos se conservan en la base de
datos.

EIS Teir. El nivel EIS es la capa de almacenamiento persistente de la aplicación. En la aplicación


NewsApp, este nivel está representado por la base de datos donde se almacenan los mensajes.

Objetivo.
El objetivo de este sistema es realizar una aplicación que ocupe la tecnologia de JEE y el EJB para el
manejo de mensajes en una base de datos por medio de un servidor en una página web.

3
Análisis de requisitos

Requisitos del sistema:

> Una computadora para el servidor


> Servidor GlassFish 5
> JDK 1.8
> Un navegador de internet
> Base de datos MySQL
> Modulo JEE
> Modulo EJB
> NetBeans 8.2

Desarrollo de la aplicación
La aplicación inicia desarrollando el módulo EJB y el módulo web, también se crea el servidor
GlassFish 5. en la figura 1 se muestra la creación de dichos módulos.

En este momento el proyecto solo contiene la configuración y empaquetado de la aplicación, al


momento de crearla la IDE crea una archivo EAR o de escucha y lo implementa al servidor, cuando se
crea una aplicación empresarial con JEE se implementa GlassFish Server. La figura 2 muestra los
módulos que se han creado

4
Figura 2 Módulos creados

Codificación del módulo EJB.


Para esto primero se creará una nueva clase Entity para genarar una tabla de base de datos, una vez
creada con la anotación @Entity creara campos en la clase para representar los datos que se desean en
la tabla.

Cada clase va a tener una clave primaria con la anotaicón @Id agregada por la IDE al momento de
crear @Entity y también agrega la anotación @GeneratedValue y especifica la estrategia de generación
de claves.

En la figura 3 se muestra la creación de NewsEntity con n paquete EJB y el jdbc smaple para la base de
datos

Una vez
creado
el nuevo
@Entity
se debe
agregar
en la
clase
NewsEn
tity, las
siguient
es lineas
de
Figura 3 Creacion de una nueva Entity
5
código

private String title;


private String body;

Con este código se crear getters y setters para los diferentes campos

Creando el Bean dirigido por mensaje

En este paso se creara el bean de mensajes y los recursos necesario del JMS el cual aydará a la
comunicación asíncrona de JEE entre el servidor y el cliente. . El bean controlado por mensajes recibe
y procesa los mensajes enviados a la cola por un servlet en el módulo web. La figura 4 muestra la
creación del Bean dirigido por mensaje.

Figura 4 imagen muestra la creación del bean de


mensajes

Una vez realizado esto en la clase NewsEntity se agrego la anotación @MessageDriven y se configura
la clase con las siguientes linea de código.

@MessageDriven(mappedName = "jms/NewMessage", activationConfig = {


@ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue =
"Auto-acknowledge"),
@ActivationConfigProperty(propertyName = "destinationType", propertyValue =
"javax.jms.Queue")
})
public class NewMessage implements MessageListener {

Se agrega la información de recursos JMS a glassfish-resources.xml los cuales se crean en el servidor


de la aplicación.

6
Estas especificaiones de EJB permiten usar anotaciones para introducir recursos de forma directa a una
clase. Ahora usará anotaciones para introducir el recurso MessageDrivenContext en su clase y luego
inyectará el recurso PersistenceContext que será utilizado por la API EntityManager para administrar
las instancias de entidad persistente

Inyección de MessageDrivenContext

public class NewMessage implements MessageListener {

@Resource
private MessageDrivenContext mdc;

se introduce el administrador de entidades en la clase y en esta se agrega la anotación


@PersistenceContext el cual mantendrá los datos en los objetos JAVA

@PersistenceContext(unitName = "NewsApp-ejbPU")
private EntityManager em;

Se modifica el método Massage agregando el siguiente código

public void onMessage(Message message) {


ObjectMessage msg = null;
try {
if (message instanceof ObjectMessage) {
msg = (ObjectMessage) message;
NewsEntity e = (NewsEntity) msg.getObject();
save(e);
}
} catch (JMSException e) {
e.printStackTrace();
mdc.setRollbackOnly();
} catch (Throwable te) {
te.printStackTrace();
}
}

Creando la sesión Facade

7
Se creará para la clase NewsEntity, por medio de la cual sin hacer uso de una interfaz los clientes
usarán los servlets en la aplicación web accederán al bean a través de una vista sin interfaz. La figura 5
muestra la creación de la sesión Facade.

Codificación del modulo web

Creando el bean singlenton de sesión:

La especificación EJB 3.1 introduce la anotación @Singleton que le permite crear fácilmente beans de
sesión singleton. EJB 3.1 también define anotaciones adicionales para configurar las propiedades de los
beans de sesión singleton, como cuando se crea una instancia del bean.

Después de que se haya instanciado el bean de sesión Singleton, existe para el ciclo de vida de la
aplicación. Como su nombre lo indica, solo puede haber una instancia única de un bean de sesión
Singleton en la aplicación. Al igual que los beans de sesión sin estado, los beans de sesión singleton
pueden tener varios clientes. En la figura 7 se muestra la creacion del singlenton de sesión.

8
Después se agrega la anotación @WebListener y se implementa HttpSesionListener

@Singleton Figura 7 creación del


@LocalBean
@WebListener Singlenton
public class SessionManagerBean implements HttpSessionListener{

se agrega el contenedor de campo estático y se establece el valor inicial en cero

@LocalBean
@WebListener
public class SessionManagerBean implements HttpSessionListener{
private static int counter = 0;

Creación de la NewList Servelet

Se creara un servelet simple para mostrar los mensajes almacenados. Utilizará anotaciones para llamar
a NewsEntityFacade de enterprise bean desde el servlet.

El IDE agregara la anotación @EJB para inyectar el enterprice bean, esto mostrará las siguientes
lieneas de código

@WebServlet(name = "ListNews", urlPatterns = {"/ListNews"})


public class ListNews extends HttpServlet {

@EJB
private SessionManagerBean sessionManagerBean;
@EJB
private NewsEntityFacade newsEntityFacade;

En el siguiente es para reiniciar y contar el numero de visitantes


out.println("<a href='PostMessage'>Add new message</a>");

out.println("<br><br>");
out.println(sessionManagerBean.getActiveSessionsCount() + " user(s) reading the
news.");

out.println("</body>");

Creando el servelet PostMessage


Utilizará anotaciones para inyectar los recursos JMS que creó directamente en el servlet, especificando
el nombre de la variable y el nombre al que se asigna. Luego agregará el código para enviar el mensaje
JMS y el código del formulario HTML para agregar un mensaje.

@WebServlet(name="PostMessage", urlPatterns={"/PostMessage"})

9
public class PostMessage extends HttpServlet {
@Resource(mappedName="jms/NewMessageFactory")
private ConnectionFactory connectionFactory;

@Resource(mappedName="jms/NewMessage")
private Queue queue;

Se agrega el código para enviar los mensajes JMS

response.setContentType("text/html;charset=UTF-8");
// Add the following code to send the JMS message
String title=request.getParameter("title");
String body=request.getParameter("body");
if ((title!=null) && (body!=null)) {
try {
Connection connection = connectionFactory.createConnection();
Session session = connection.createSession(false,
Session.AUTO_ACKNOWLEDGE);
MessageProducer messageProducer = session.createProducer(queue);

ObjectMessage message = session.createObjectMessage();


// here we create NewsEntity, that will be sent in JMS message
NewsEntity e = new NewsEntity();
e.setTitle(title);
e.setBody(body);

message.setObject(e);
messageProducer.send(message);
messageProducer.close();
connection.close();
response.sendRedirect("ListNews");

} catch (JMSException ex) {


ex.printStackTrace();
}
}

PrintWriter out = response.getWriter();

Se agrega las siguientes líneas de código al método processRequest para agregar el formulario web
para agregar un mensaje.

out.println("Servlet PostMessage at " + request.getContextPath() +


"</h1>");
// The following code adds the form to the web page
out.println("<form>");
out.println("Title: <input type='text' name='title'><br/>");
out.println("Message: <textarea name='body'></textarea><br/>");
out.println("<input type='submit'><br/>");
out.println("</form>");

out.println("</body>");

10
Ejecución del proyecto

Para ejecutar el proyecto por primera vez se cra una lista nueva en el campo de text URL después el
proyecto se ejecuta dando clic derecho y seleccionando la opción RUN ina vez echo esto se inicia el
servidor y el servelet ListNew se abre en un navegador de internet. Al inicio se verá vasio puesto que
no tiene mesnajes escritos ya que la base de datos no tiene datos, pero se puede agregar mensajes y
estos se irán guardando en la base de datos.

Cuando agrega un mensaje con el servlet PostMessage, el mensaje se envía al bean controlado por
mensajes para escribir en el almacenamiento persistente y se llama al servlet ListNews para mostrar los
mensajes en la base de datos. La lista de mensajes en la base de datos recuperada por ListNews a
menudo aún no contiene el nuevo mensaje porque el servicio de mensajes es asíncrono. La figura 8
muestra la aplicación en ejecución.

La fiugra 9 muestra la aplicación con mensajes escritos anteriormente y la figura 10 muetra la parte de
la aplicación donde se redacta el mensaje y el titulo

11

Figura 9 aplicación con mensajes escritos


Figura 10 redacción de mensajes para enviar a la base de datos

Referencias

https://netbeans.org/kb/docs/javaee/javaee-entapp-ejb.html#

12

Você também pode gostar