Jakarta EE Flashcards

J2EE - JEE - Jakarta EE

1
Q

Qué es Jakarta EE

A

Conjunto de especificaciones que extienden Java SE. Lo soporta la Eclipse Foundation.

Objetivo: Crear aplicaciones empresariales, web y multisuario en lenguaje Java

Objetivo Secundario: Dedicate a lo tuyo

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Que son los JVM Languages. Ejemplos

A

Lenguajes “java friendly” que se programan en su sintaxis pero se compilan a .class y se ejecutan en le JRE

  • Java
  • Kotlin
  • Scala
  • Groovy
  • Clojure
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Perfiles Jakarta

A
  • Core Profile: lo minimo indispensable
  • Web Profile: todos los componentes para el desarrollo de una aplicación web
  • Full Profile / Jakarta entreprise: todos los componentes de la especificación
  • Microprofile: No pertenece a jakarta pero lo integra (Core Profile). Componentes para realizar aplicaciones con microservicios.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Componentes Jakarta EE: Capa de presentacion

A
  • JSP: html + < % codigo java% > + objetos predefinidos. Código incrustado.
  • JSTL: html + taglib presonalizados. Ej.: < report>. Código separado del fichero html.
  • JSF: tags UI predefinidos. Ej: < database> Etiquetas orientadas solo a clase de presentación sin mezclar negocio.
  • Servlets / Filters: Capa de control
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Componentes Jakarta EE: Capa de Negocio

A
  • API EJB (Enterprise JavaBeans)
    • EJB Sesion (Logica de negocio). Con y sin estado.
    • EJB MDB (Logica de negocio async). Listener, reciben mensajes de una cola
  • Web Services (SOAP y REST).
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Componentes Jakarta EE: Servicios definidos App Server

A

Antiguamente nos apoyabamos en frameworks para dar la funcionalidad que faltaba en JEE. Pero las últimas versiones han aumentado los servicios haciendo una especificación mucho más completa.

  • JTA (Servicio de transacciones)
  • JNDI (Servicio de nombres – Arbol de objetos). Objetos que se crean automaticamente y que siempre tenemos disponibles. Ya no se hace new
  • JPA (Servicio de persistencia – ORM)
  • JMS (Servicio de colas de mensajes)
  • JSON-P (Servicio para documentos JSON. bajo nivel) JSON-B (Alto nivel)
  • CDI (Servicio de inyección de dependencias)
  • Jakarta MVC
  • Jakarta NoSQL
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Productos que implementan la especificación Jakarta EE

A
  • JBoss
  • WildFly
  • Payara
  • Weblogic
  • Open Liberty -> sin volverse loco
  • WebSphere Liberty
  • Eclipse GlassFish
  • Apache TomEE
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Servicio JTA

A

Java Transaction Api

Servicio de transacciones distribuidas.

UserTransaction –> begin, commit, rollback

jakarta.transaction.UserTransaction

TP: Transaction Processor. Tiene la inteligencia para mantener la transacción en entornos distintos. Ej.: se hace una operación que guarda parte en Oracle y parte en DB2, pero necesitamos asegurar que la información estará en las dos BBDD o en ninguna, en este caso el que gestiona que se mantenga esa consistencia es el TP.

import javax.transaction.*;

public class JtaExample {
    public static void main(String[] args) {
        try {
            // Get the UserTransaction object
            UserTransaction utx =  (UserTransaction)  new InitialContext().lookup("java:comp/UserTransaction");

            // Begin the transaction
            utx.begin();

            // Perform some transactional operations
            // For example, update data in a database
            // ...
            // ...

            // Commit the transaction
            utx.commit();

            System.out.println("Transaction committed successfully.");
        } catch (Exception e) {
            // Handle exception and rollback the transaction if necessary
            e.printStackTrace();
            try {
                utx.rollback();
                System.out.println("Transaction rolled back.");
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    }
}
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Servicio JNDI

A

Java Naming and Directory Interface

Servicio de directorio.

InitialContext (método lookup(String) / bind(String, Object))

javax.naming.InitialContext

import javax.transaction.*;

public class JtaExample {
    public static void main(String[] args) {
        try {
            // Get the UserTransaction object
						
	   /*********************/
            UserTransaction utx =  (UserTransaction)  new InitialContext().lookup("java:comp/UserTransaction");
            /*********************/
						
            // Begin the transaction
            utx.begin();

            // Perform some transactional operations
            // For example, update data in a database
            // ...
            // ...

            // Commit the transaction
            utx.commit();

            System.out.println("Transaction committed successfully.");
        } catch (Exception e) {
            // Handle exception and rollback the transaction if necessary
            e.printStackTrace();
            try {
                utx.rollback();
                System.out.println("Transaction rolled back.");
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    }
}
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Servicio JDBC

A

Java DataBase Connectivity

Servicio de persistencia de bajo nivel

Driver / DataSource
Connection
Statement / PreparedStatement / CallableStatement
ResultSet

  • java.sql.Driver.
    • Connection
    • Statement
    • PreparedStatement
    • CallableStatement
    • ResultSet
  • javax.sql.dataSource
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Servicio JMS

A

Java Message Service

Servicio de mensajería (colas)

COLA: Relacion 1:1, un emisor y un receptor
TOPIC: Relacion 1:N, un emisor, n receptores

MessageListener (onMessage(Message))
Queue / Topic
Session (createProducer(Destination),createMessage())

jakarta.jms

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Servicio JPA IMPORTANTE

A

Java Persistent API

Servicio de persistencia de alto nivel (ORM - Object Relational Mapping)

EntityManager (métodos persist(), find(), delete())
@Entity / @Table / @Id / @Column / @OneToMany / @OneToOne / @ManyToMany

jakarta.persistence.EntityManager

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Servicio JAX-WS

A

Java API for XML Web Services

Web Services SOAP

@WebService / @WebMethod / @WebParam

jakarta.xml.ws
javax.jws / jakarta.jws

package ee.jakarta.tutorial.helloservice;

import jakarta.jws.WebService;
import jakarta.jws.WebMethod;

@WebService
public class Hello {
    private final String message = "Hello, ";

    public Hello() {
    }

    @WebMethod
    public String sayHello(String name) {
        return message + name + ".";
    }
}
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Servicio JAX-RS

A

Java API for RESTful Web Services

Web Services REST

@Path / @GET / @POST

jakarta.ws.rs

@Path("/hello")
public class HelloResource {

   @GET
   public String sayHello() {
      return "Hello World";
   }

@POST
@Produces(MediaType.TEXT_PLAIN)
@Consumes(MediaType.APPLICATION_JSON)
public String handlePersonRequest(Person person) {
   return person.toString();
}

}
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Servicio CDI

A

Contexts and Dependency Injection

Inyeccion de dependencias

@Inject / @RequestScoped / @Named

jakarta.enterprise.context

NOTA: @Autowired

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Ciclo de vida de un Servlet

A

Ojo!!! el servlet es un interfaz genérico, no asociado en exclusiva a peticiones http. Su ciclo de vida son estos tres métodos:

  • init(config)
  • service(req, res)
  • destroy()
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Métodos HttpServlet

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

Métodos HttpServletRequest

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

Métodos HttpServletResponse

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

Flujo de aplicación web

A
  • req, res –> se crean continuamente por cada petición (junto con su Thread correspondiente)
  • HttpSesión –> se crea por cada usuario conectado (cookie JSESSIONID)
  • Servlet / Filter –> se crea un objeto de cada clase al inicio de la app
  • ServletContext –> se crea un objeto global compartido por todos los servlets
  • Pool de threads (hilos) –> No se crean hilos por cada petición, sino que existe un pool y se van usando. Cuando ya no quedan libre la petición quedara en espera (wait)
21
Q

Empaquetado de una app Jakarta EE

A
  • Parte Web: .war (web container: servlet, filtros, jsp, jspf)
  • Parte EJB: .jar (EJB container)
  • Empaquetado completo war + jar: .ear
22
Q

web.xml

A

Fichero de configuración de los .war

<web-app>
	<filter>
		<filter-name> SecurityFilter </filter-name>
		<filter-class>com.jee.filter.SecurityFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
	</filter>

<!-- Se aplica el filtro a todo el mundo-->
	<filter-mapping>
		<filter-name> SecurityFilter </filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

<!-- Indicamos la url y la clase que lo va a tratar-->
	<servlet>
		<servlet-name>AltaEmpleadoServlet</servlet-name>
		<servlet-class>com.jee.servlet.AltaEmpleadoServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name> AltaEmpleadoServlet </servlet-name>
		<url-pattern>/altaEmpleado</url-pattern>
	</servlet-mapping>

<!-- Reglas de seguridad simple por perfil de usuario-->
	<security-constraint>
		<web-resource-collection>
			<web-resource-name>admin</web-resource-name>
			<url-pattern>/admin/*</url-pattern>
		</web-resource-collection>
		<auth-constraint>
			<role-name>ADMIN</role-name>
		</auth-constraint>
		<user-data-constraint>
			<transport-guarantee>NONE</transport-guarantee>
		</user-data-constraint>
	</security-constraint>
	<login-config>
		<auth-method>FORM</auth-method>
		<form-login-config>
			<form-login-page>/logon.jsp</form-login-page>
		</form-login-config>
	</login-config>
	<error-page>
		<error-code>500</error-code>
		<location>/errors/servererror.jsp</location>
	</error-page>
	<session-config>
		<session-timeout>-1</session-timeout>
	</session-config>
</web-app>
23
Q

Cómo se compone un .war

A
  • html/css/jsp (componentes estáticos)
  • Directorio WEB-INF:
    • classes*.class
    • lib*.jar (librerías de terceros)
    • web.xml (mapeado de url a las clases java)
24
Q

ejb-jar.xml

A

Fichero de configuración de los .jar de EJB’s

<ejb-jar>
	<session>
		<session-type>Stateless</session-type>
		<transaction-type>Container</transaction-type>
		<ejb-class></ejb-class>
	</session>
</ejb-jar>
25
Q

Cómo se compone un .jar de ejb

A
  • Directorio META-INF\ejb-jar.xml
    • *.class
26
Q

application.xml

A

Ficerho de configuracion de los .ear

<module>
       <web>
             <web-uri> admin.war </web-uri>
             <context-root>administracion</context-root>
        </web>
        <ejb>
            calculos.jar
         </ejb>
….
27
Q

Cómo se compone un .ear

A
  • application.xml
  • .war
  • .jar (ejb’s)
28
Q

Métodos principales del EntityManager (JPA)

A

jakarta.persistence

  • persist(obj) –> almacenar nuevas entidades en la BBDD
  • contains(obj) –> comprueba si una entidad está “manejada” por el EM
  • find(pk) –> localizar una entidad a través de un clave primaria
  • flush() –> provoca que los cambios pendientes del EM se sincronicen en la BBDD
  • merge(obj) –> convierte una entidad “no manejada” por el EM en “manejada”
  • remove(ojb) –> eliminar una entidad de la BBDD

Ej.:

@Inject
EntityManager em;

//Creal el SQL, lo lanza contra la BBDD y crea el obj 
//factura 'f' con el resultado
Factura f = em.find("1234");
29
Q

Anotaciones de una entidad (JPA)

A

jakarta.persistence

  • @Entity –> identifica a la clase como una “entidad”
  • @Id –> Clave primaria
  • @Table –> Para elegir la tabla donde guardar el objeto
  • @Column –> Para elegir la columna donde guardar un atributo
  • @OneToMany –> Para especificar relaciones 1:N con otras clases
  • @Transient –> Indica que ese atributo no hay que guardarlo
  • @NamedQuery –> Para especificar consultas JPQL con nombre
  • @Query(value=”código SQL”, nativeQuery=true) Código SQL a pincho

Ej.:

@Entity
@Table("FACT")
public class Factura{
    @id  //Identificador de la tabla
    String id;
    
    @Column("FECHA_FACT") //Columna en BBDD que corresponde
     Date fechaFactura
}
30
Q

@OneToMany / @OneToOne

A

NOTA: Las relaciones @OneToOne, @OneToMany son por defecto de tipo FetchType.LAZY, quiere decir, que no se van a cargar esos objetos relacionados hasta que no haga falta. Fetch.LAZY / Fetch.EAGER

/**
 * @ManyToOne(targetEntity="Cart", cascade={"all"}, fetch="EAGER")
 */

/**
 * @ManyToOne(targetEntity="Cart", cascade={"all"}, fetch="LAZY")
 */

Ej.:

@Entity
@Table("PAG")
public class Pagos{ .... }
....

@Entity
@Table("FACT")
public class Factura{
    @id  //Identificador de la tabla
    String id;
    
    @Column("FECHA_FACT") //Columna en BBDD que corresponde
     Date fechaFactura

     //Obtenemos todos los pagos de la facutura cuando 
     //pidamos la 'factura
     @OneToMany
     List<Pagos> pagos;
}
31
Q

Providers JPA

A
  • Hibernate
  • EclipseLink
  • DataNucleus
  • OpenJPA
32
Q

Estructura de la arquitectura JPA

33
Q

En nuestra aplicación Java, ¿qué paquetes usaríamos para establecer la conexión a la base de datos de NOTIFICACION?

a) java.database

b) javax.naming y javax.sql

c) javax.io y javax.serviet

d) javax.serviet

A

b) javax.naming y javax.sql

34
Q

Se quiere desarrollar un microservicio para que el personal funcionario pueda consultar el estado de una notificación enviada. ¿Qué especificación de la comunidad, alineada con Jakarta EE Core Profile, es la indicada para desarrollarlo?

a) Jakarta Authentication

b) Jakarta Batch

c) Microprofile

d) Jakarta Connectors

A

c) Microprofile

35
Q

En JAVA podemos utilizar el interface PreparedStatement para:

a) Inicializar las variables locales del programa con valores preestablecidos.

b) Preparar los valores que introduciremos en un archivo de texto externo al programa.

c) Permitir ejecutar muchas veces una sentencia SQL.

d) Administrar el consumo de memoria que utilizan los objetos creados.

A

c) Permitir ejecutar muchas veces una sentencia SQL.

36
Q

En el contexto de Java EE (ahora Jakarta EE), ¿en qué paquete se encuentran las clases e interfaces de Enterprise JavaBeans?

a) java.ejb2

b) javax.ejb

c) javax.persistence.ejb

d) java.transaction.ejb

A

b) javax.ejb

jakarta.ejb

37
Q

Spring Boot es:

a) Una plataforma de desarrollo móvil basada en Javascript que permite desarrollo de apps muliplataforma.

b) Una plataforma que permite el desarrollo de aplicaciones web “autocontenidas” que llevan embebido el contenedor de serviets.

c) Una plataforma que permite, entre otras cosas, la conexión lógica entre bases de datos relacionales clásicas y bases de datos NOSQL.

d) Una plataforma que permite automatizar las pruebas de software para aplicaciones con lenguaje de programación JAVA.

A

b) Una plataforma que permite el desarrollo de aplicaciones web “autocontenidas” que llevan embebido el contenedor de serviets.

38
Q

¿Cuál de los siguientes NO es un ORM (Mapeador Objeto-Relacional)?

a) ADO.NET Entity Framework

b) Ruby Hibernation

c) NHibernate

d) Hibernate

A

b) Ruby Hibernation

39
Q

Para la construcción de servicios web en Java podría usar la API Java denominada:

a) JPA

b) Java DOM

c) SOAP

d) JAX-WS

40
Q

¿Cual es la clase principal que se usa para acceder a un arbol JNDI?

A

clase InitialContext –> javax.naming

Metodos:

  • Object lookup(String etiqueta) –> Buscar en el árbol
  • void bind(Name name, Object obj) –> para registrar un objeto en el árbol

NOTA: Los componentes/objetos que se registran en el árbol automaticamente, o bien por configuración del server, o bien por configuración de la aplicación web, serian:

  • Datasources (pool de conexiones)
  • EJB’s
  • JavaMail
  • JMS (colas / topics)
  • JTA (user transaction)
41
Q

¿Qué tipos de EJB’s existen?

A
  • Tipo Sesión (@Statefull o @Stateless). Desde 3.1 EJB @Singleton
  • Tipo MDB (Receptores de mensajes)

NOTA: De un EJB el servidor crea un pool de instancias. En el caso de Singleton solo tenemos UNA instancia

42
Q

¿Cuál es la utilidad del interface Datasource? ¿Cómo se utiliza el contexto de un servidor JEE?

A
  1. Crear/Definir un objeto que representa un pool de conexiones. NOTA: Su método más importantes es getConnection()
  2. Tenemos que ir al árbol JNDI a por el (lookup). Se configura por un admin en la consola del servidor
43
Q

¿Cual es la anotacion que se usa para definir una entidad JPA?

A

@Entity
NOTA: otras anotaciones–> @Table, @Column, @OneToMany, @Id, @Transient

44
Q

En JAX-RS, ¿qué anotacion se utiliza para especificar la URL base de un recurso REST?

45
Q

¿Cuál de las siguientes es una especificación Java EE para trabajar con colas de mensajes?

46
Q

¿Cuál es el interface principal para acceder a las funcionalidades de JPA?

A

Interface EntityManager (jakarta.persistence)

NOTA: métodos importantes–>

  • persist
  • find
  • merge
  • remove
47
Q

¿Qué tipo de bean de EJB se recomienda para gestionar datos compartidos entre multiples usuarios?

A

@Singleton –> es un subtipo nuevo de EJB de tipo sesion

48
Q

¿Qué tecnologíaJava EE proporciona una interfaz para desarrollar vistas web basadas en componentes?

A

JavaServerFaces (API JSF)

Implementaciones típicas de JSF –> PrimeFaces, ICE Faces, ZK

49
Q

¿Cuál de las siguientes anotaciones de JPA se usa para especifcar una clave primaria generada automaticamente?

A

@GeneratedValue(strategy=SEQUENCE, generator=”CUST_SEQ”), especificamos que es valor automatico y con esa secuencia.

NOTA: Con @Id especificamos que el atributo es clave primaria
NOTA: El objeto CUST_SEQ se ha tenido que crear en BBDD con el comando SQL –> CREATE SEQUENCE CUST_SEQ ……