b3t6 - JEE Flashcards
Qué es JEE?
Java Enterpries Edition.
Es la versión empresarial de Java. Consiste en un conjuto de APIs (componentes y servicios)
En el mundo java, qué es una JSR
Java Specification Request: solicitud formal que plantea una especificación nueva o la modificación de alguna ya existente por el programa Java.
Por ejemplo, JPA 2.2 se corresponde con la JSR-338
Qué empresa controlaba Java y JEE hasta 2018?
Y a partir de ese año?
Hasta 2018 la controlaba Oracle
Tras 2018 pasa a controlarla la Eclipse Foundation
Cómo continúa el desarrollo de JEE, a partir de 2018, bajo la Eclipse Foundation?
Con un desarrollo con un flujo de trabajo ágil y abierto llamado JESP (Jakarta EE Specification Process)
Qué es JESP
(Jakarta EE Specification Process) → Proceso con el que se sigue desarrollando JEE en la Eclipse Foundation
Qué versiones hay de JEE en los últimos años y en qué año salieron?
JEE 7 → 2013
JEE8 → 2017
Jakarta EE 8 → 2018
Jakarta EE 9 → 2020
Jakarta EE 10 → 2022
Qué versiones de Java han salido estos últimos años y en qué año salieron?
Java 8 → 2014
Java 11 → 2018
Java 15 → 2020
Java SE 17 (LTS) → 2021
Java 19 → 2022
Cómo se convirtieron los paquetes javax. de JEE8 en la versión Jakarta EE 8?
No se convirtieron, se mantuvieron con javax.*
Cómo se convirtieron los paquetes javax. de Jakarta EE 8 en la versión Jakarta EE 9?
Pasaron de javax.* a jakarta.*
Desaparecen los paquetes javax.* y los xml cambian de nombre
Qué dos perfiles ofrece Jakarta EE y qué tienen cada uno?
- Web profile: tiene todo lo más básico ahora mismo, por ejemplo
- REST
- Seguridad
- JPA
- EJB
- JTA
- CDI
- …
- Full profile: además del Web profile tiene lo relacionado con
- WS Soap
- Batch
- JMS (mensajes)
- Autorización
- …
Sobre JEE, ¿conceptualmente qué es? ¿qué ofrece?
- Es una capa que corre sobre el JRE en los servidores de aplicaciones
- Un servidor de aplicaciones tiene que implementar todas las APIs de JEE
- Define los componentes de tu aplicación
- Define servicios que ofrece el servidor de aplicaciones
El API que ofrece JEE se divide en componentes y servicios del AppServer. ¿En qué dos capas se dividen los componentes? Nombra varios tipos de componentes de cada capa
- Capa de Presentación
- JSP (JavaServerPages)
- JSTL (JavaServerTagLibraries)
- JSF (JavaServerFaces)
- Servlets
- Capa Negocio
- EJB Sesion
- EJB MDB
- Web Services (SOAP y REST)
El API que ofrece JEE se divide en componentes y servicios del AppServer. ¿Qué servicios ofrecerá el AppServer? Nombra varios
- JTA (Servicio de transacciones)
• JNDI (Servicio de nombres – Arbol de objetos)
• JPA (Servicio de persistencia – ORM)
• JMS (Servicio de colas de mensajes)
• JSON-P (Servicio para documentos JSON)
• CDI (Servicio de inyección de dependencias)
• Jakarta MVC
• Jakarta NoSQL
Qué son Apache, Apache Tomcat y Apache TomEE?
Apache → Servidor web HTTP
Apache Tomcat → Contenedor de servlets
Apache TomEE → Servidor de aplicaciones JEE
Nombra algunos productos compatibles con JEE
- Jboss
- WildFly
- JRun
- WebLogic
- WebSphere Liberty
- Open Liberty
- Apache TomEE
- Payara
- Eclipse GlassFish
- Manage Fish
- Apusic
Qué es JTA? Qué objeto principal usa? Qué dos métodos?
Java Transacation Api: Para manejar transacciones distribuidas
Objeto principal → UserTransaction
métodos commit() y rollback()
Qué es JNDI? Qué objeto y método principal para buscar recursos tiene?
Servicio de directorio, para obtener recursos
Usa el objeto InitialContext y el método lookup(String) para buscar recursos en el árbol
Qué es JDBC? Qué objetos maneja?
Servicio de persistencia a bajo nivel
Driver / Datasource
Connecton
Statement / PreparedStatement / CallableStatement
Resulset
Qué es JMS? Qué objeto y método maneja?
Servicio de mensajería (colas de mensajes)
MessageListener (onMessage(Message))
Queue / Topic
Qué es JPA?
Qué clase principal usa y qué métodos y etiquetas usa?
Servicio de persistencia de alto nivel (ORM)
Usa la clase EntityManager (se crea con una EntityManagerFactory que hay que crear antes)
métodos persist(), find(), remove()
@Entity / @Table / @Id / @Column / @OneToMany
Se pueden hacer sql de tres tipos
sql nativa, de oracle por ejemplo
o sql JPQL, que puede ponerse directamente o establecerla como una @NamedQuery con una anotacion en la clase del modelo, (donde se especifican además el resto de anotaciones de JPA
Qué es JAX-WS?
Qué anotaciones usa?
Para webservices SOAP
@WebService / @WebMethod / @WebParam
Qué es JAX-RS? Qué métodos usa?
Para web services REST
@Path / @GET / @POST
Qué es CDI? Qué métodos usa?
Inyección de dependencias, como framework Spring
@Inject / @RequestScoped / @Named
Qué es un servlet conceptualmente? Qué dos objetos maneja principalmente?
Es un elemento de la arquitectura JEE que sirve como capa de control antes de dar paso a la capa de negocio. Es el que recibe la petición http y devuelve la respuesta http
httpServletRequest
httpServletResponse
Puede haber varios por aplicación, y todos ellos comparte el mismo ServletContext, que es uno por aplicación
Qué tres métodos gestionan el ciclo de vida de un servlet?
init(config) → La primera vez que se crea la aplicación
service(req.res) → Cada vez que se recibe una petición
destroy() → cuando se apaga el servidor de aplicaciones
Cómo se llaman también los productos que implementan JPA? Ejemplos de productos
Se llaman también ORM
Hibernate
TopLink (ahora EclipseLink)
OpenJPA
NHibernate
En JPA, Qué hacen los metodos principales de EntityManager (EM):
• persist(obj)
• contains(obj)
• find(pk)
• flush()
• merge(obj)
• remove(ojb)
- 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
En JPA, cuáles son las anotaciones principales de una “entidad”:
• @Entity
• @Id
• @Table
• @Column
• @OneToMany
• @Transient
• @NamedQuery
• @Query
- @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)
En JPA, por defecto cómo son las relaciones @OneToOne, @OneToMany son por defecto en cuanto a su carga en memoria de las entidades relacionadas?
De tipo FetchType.LAZY, quiere
decir, que no se van a cargar esos objetos relacionados hasta que no haga falta
Otro tipo que se puede especificar es FetchType.EAGER para sí que se carguen los objetos relacionados
Qué estructura interna tiene un servidor web que implemente JEE?
- WebContainer → Servlet, JSP, …
- EJBContainer → EJB (Session, Entity, MDB, …)
- Motor WebService (Soap, REST)
- Servicios J2EE
Sobre la JRE
Qué tipo de paquete se despliega en un servidor de aplicaciones JEE? Qué contiene?
El paquete EAR (Enterprise ARchive)
Contiene:
- application.xml
- 1 o más WAR (Web ARchive), que contienen cada uno una aplicación web completa
- Opcionalmente puede tener JARs (Java ARchive) que contiene los EJBs
Qué contiene un WAR?
Contiene una aplicación web completa
- archivos .html, .css, .js, .jsp, …
- WEB-INF → clases.class, librerías.jar, web.xml
De qué clase es un objeto servlet? De qué clase hereda esta clase?
HttpServlet
Hereda de GernericServlet
Los objetos httpResponse y httpRequest que manejan los servlets, qué interfaces implementan respectivamente?
HttpServletResponse
HttpServletRequest
Ambas a su vez heredan de las interfaces ServletResponse y ServletRequest
Cuantas instancias del servlet hay en memoria en el WebContainer para cada aplicación iniciada?
Una sola instancia de cada servlet por cada aplicación. Al arrancar la aplicación se crea con .init(config), recibe las llamadas por .service(request) y cuando se apaga la aplicación se elimina con .destroy()
Qué es el http session en un servlet?
Objeto con la información de sesión del usuario, se crea una por cada usuario conectado a la aplicación
Qué es un servlet context en un SERVLET?
Equivale a la “global”, hay uno por cada aplicación
Cómo es la conversación típica entre html/jsp.. con los servlets y el negocio?
En el WEB.xml se configura cada servlet con una acción (nombre o url)
El flujo puede entrar al servlet desde un submit de una página o una url en el navegador
El servlet en su método doGet suele hacer dispatcher a la página que tiene asociada
this.getServletContext().getRequestDispatcher(“/WEB-INF/jsp/datosEconomicos.jsp”).forward(req, resp);
El servlet en su método doPost suele recoger datos de la request y al final redireccionar a otra accion del WEB.xml (al GET otro servlet)
resp.sendRedirect(“confirmacionAlta.accion”);
Leer guia rápida JEE
https://zbrain-academy.es/pluginfile.php/76224/mod_resource/content/1/dzone-rc-java-ee-7.pdf
Cuál es la estructura interna de un WAR?
- Tiene los archivos de presentación (html, css, js, jsp)
- Tiene un dierctorio WEB-INF que dentro tiene: Clases, librerías jar y el fichero web.xml
Qué es el fichero web.xml de un WAR?
Es un fichero que lee y analiza el WebContainer (Tomcat por ej) del servidor de aplicaciones
En él se configuran:
- Servlets y filters
- Parámetros (típicas constantes de configuración)
- Tiempo de sesión
- Parámetros de Seguridad
Cuáles son las etiquetas en el web.xml para:
indicar el método de autenticación
forzar https
indicar que un sevlet se cargue en memoria al desplegar el war, en lugar de en la primera petición
auth-method
transport-garantee
load-on-startup
Qué métodos tiene el componente HttpServletRequest para:
Obtener las cookies del cliente
obtener un parámetro de la cabecera
obtener un parámetro de la url
obtener un atributo
guardar un objeto como atributo
obtener el objeto HttpSession del usuario
getCookies
getHeader(parámetro)
getParameter(parámetro)
getAttribute(atributo)
setAttribute(“atributo”, objeto)
getSession()
Qué métodos tiene el componente HttpServletResponse para:
añadir una cookie
añadir un parámetro a la cabecera
establecer el tipo mime
redireccionar al navegador a otra url
addCookie()
addHeader()
setContentType(tipoMime)
sendRedirect(url)
Qué 3 métodos principales tiene la clase abstracta HttpServlet?
doGet()
doPost()
getServletContext()
Qué métodos principales tienen los componentes HttpSession y ServletContext?
HttpSession (se saca de HttpServletRequest.getSession())
- getAttribute()
- setAttribute()
ServletContext (se saca de HttpServlet.getServletContext())
- getAttribute()
- setAttribute()
- getRequestDispatchetr(path) → luego se le hace un .forward(req,resp) en el servlet para redirigir a otra jsp
Qué tres modos de autenticación se pueden configurar en el fichero web.xml del war?
- BASIC: ventana del navegador auto_
- FORM: Una página que haces tú
- CLIENT-CERT: El servidor le pedirá al cliente un ciertificado
Qué tres modos de autenticación se pueden configurar en el fichero web.xml del war?
- BASIC: ventana del navegador auto_
- FORM: Una página que haces tú
- CLIENT-CERT: El servidor le pedirá al cliente un ciertificado
Si se configura la autenticación BASIC en el fichero web.xml del WAR de una aplicación web que corre en el Web Container de un servidor de aplicaciones, ¿cómo es el flujo de esa autenticación entre el usuario y el servidor)
- El usuario a través del navegador solicita una página
- El servidor devuelve un 401 y redirige a una página (pop-up) estándar para introducir usuario y contraseña
- El usuario lo rellena y envía, lo que genera otra petición get con un header que contiene el authorization:basic (cadena base64 con “usuario:contraseña”)
Qué interfaces o librerías de implementación de servicios web SOAP?
JAX-WS es el api, pero las implementaciones o productos que implementan ese api son:
Eclipse metro
Axis2
Glassfish
Apache CXF
Jboss en wildfly
¿Existe algun estandar para JSON? ¿En java hay algun API? ¿y librerias?
- Estandar ECMA 404
- En Java el API se llama JSON-P y las librerias mas usadas son Jackson y GSON
En JEE, ¿a que se refiere el API JTA? ¿Que tipo producto hay detras de este API y para que sirve?
Sirve para poder usar el servicio de transacciones distribuidas.
Detras de este API el producto se denomina “monitor de transacciones” (JBossTS, Atomikos)
Qué tipo de producto es Jetty?
Sólo es un contenedor WEB, no es un servidor de aplicaciones JEE
Cómo se llama la cookie que se genera en jee?
JSESSIONID
Qué métodos tiene el componente HttpServletRequest para:
Obtener las cookies del cliente
obtener un parámetro de la cabecera
obtener un parámetro de la url
obtener un atributo
guardar un objeto como atributo
obtener el objeto HttpSession del cliente
getCookies
getHeader(parámetro)
getParameter(parámetro)
getAttribute(atributo)
setAttribute(“atributo”, objeto)
getSession()