Publicado el 19 de Octubre del 2019
525 visualizaciones desde el 19 de Octubre del 2019
965,1 KB
103 paginas
Creado hace 17a (17/10/2007)
J2EE
Visión Arquitectónica
Jose A. Espinosa
ÍNDICE
● ¿Qué es arquitectura?
● Plataforma Java
● ¿Qué es J2EE?
● APIs J2EE
● Contenedores J2EE
● Internacionalización
● Otras “tecnologías”
● Caso de estudio
Arquitectura
● La arquitectura de software, tiene que ver con el diseño y la
implementación de estructuras de software de alto nivel. Es
el resultado de ensamblar un cierto número de elementos
arquitectónicos de forma adecuada para satisfacer la mayor
funcionalidad y requerimientos de desempeño de un
sistema, así como requerimientos no funcionales, como la
confiabilidad, escalabilidad, portabilidad, y disponibilidad.
(Philippe Kruhten)
● Una Arquitectura Software, también denominada
Arquitectura lógica, consiste en un conjunto de patrones y
abstracciones coherentes que proporcionan el marco de
referencia necesario para guiar la construcción del software
para un sistema de información.
● La arquitectura software establece los fundamentos para
que analistas, diseñadores, programadores, etc. trabajen en
una línea común que permita alcanzar los objetivos y
necesidades del sistema de información.
El arquitecto
● ¿Qué hace un arquitecto software?
Un desarrollador se preocupa de qué hará
la aplicación cuando un usuario apriete
un botón, un arquitecto lo hace sobre
qué pasará cuando lo aprietan miles.
El arquitecto debe...
● Liderar el desarrollo para asegurar que
se siga la arquitectura
● Tomar todas las decisiones que afecten
a la arquitectura del sistema
● Comunicarse con desarrolladores y
diseñadores constantemente
● Vigilar activamente el cumplimiento de
los requisitos no funcionales
Requisitos de nivel de servicio
● Rendimiento
● Escalabilidad
● Fiabilidad
● Disponibilidad
● Ampliabilidad
● Mantenibilidad
● Gestionabilidad
● Seguridad
Plataforma Java
J2EE
● J2EE es una plataforma para desarrollar
aplicaciones distribuidas empresariales.
● J2EE consiste en:
– Plataforma
– Implementación de referencia
– Test de compatibilidad
– Planos de APM (Aplication Programming
Model)
J2EE APIs
● JSP
● JMS
● JNDI
● JTA
● JavaMail
● JAF
● J2SE
● JDBC
● RMI-JRMP
● Java IDL
● RMI-IIOP
● EJB
● Servlets
Componentes J2EE
● Aplicación Java
● Applets
● Servlets y JSP
● EJB
Componentes / API
● Cada componente ha de cumplir una
serie de APIs
J2SE JDBC JRMP JIDL RMI-IIOP
EJB
Servlets
JSP JMS JNDI
JTA JavaMail JAF
Aplicación
Applet
Servlets/jsp
EJB
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
J2SE
● Java Platform, Standard Edition o Java
SE (antes J2SE), es una colección de
APIs del lenguaje de programación Java
útiles para muchos programas de la
Plataforma Java.
● J2SE 1.4 (Merlin), Java Community
Process. JSR 59
● J2SE 5.0 (Tiger) = JSR 176 especificó
● Java SE 6 (Mustang) = JSR 270.
Librerías J2SE
● Generales
– java.lang
– java.io
– java.math
– java.net
– java.text
– java.util
Librerias J2SE (II)
● Propósito especial
– java.applets
– java.beans
– java.awt
– java.rmi
– java.security
– java.sql
– javax.rmi
– org.omg.CORBA
– javax.swing
JDBC
● Java Database Connectivity
● API que permite interactuar con fuentes
de datos, independientemente del
fabricante
● Conjunto de definiciones de acceso y
gestión de controladores
JDBC (ex.)
● Cargar Drivers
try{
Class.forName("nombreDelDriver").newInstance();
} catch (ClassNotFoundException cnfe) {
Cnfe.printstacktrace();
}
● Abrir conexión
Connection c = DriverManager (url, "usuario", "password");
● Cerrar conexión
if (¡c.isClosed())
c.close();
JDBC (ex2)
● Ejecutar sentencias SQL
Statement stmt = conn.createStatement();
try {
ResultSet rs = stmt.executeQuery( "SELECT * FROM MyTable" );
try {
while ( rs.next() ) {
int numColumns = rs.getMetaData().getColumnCount();
for ( int i = 1 ; i <= numColumns ; i++ ) {
System.out.println( "COLUMN " + i + " = " +
rs.getObject(i) );
}
}
} finally {
rs.close();
}
} finally {
stmt.close();
}
JDBC (transacciones)
● JDBC tiene soporte para transacciones
try {
con.setAutoCommit(false);
// run some SQL
stmt.executeUpdate("UPDATE INV SET OH = 10 WHERE ID = 5");
stmt.executeUpdate("INSERT INTO SHIP (QTY) VALUES (5)");
con.commit();
}
catch (SQLException e) {
con.rollback(); //undo the results of the transaction
}
JDBC (proc. almacenados)
● JDBC se puede usar para ejecutar
procedimientos almacenados
CallableStatment
cstmt = con.prepareCall("{call sp_interest(?,?)}");
cstmt.registerOutParameter(2, Types.FLOAT);
cstmt.setInt(1, accountID);
cstmt.setFloat(2, 2343.23);
cstmt.execute();
out.println("New Balance:" + cstmt.getFloat(2));
JDBC 2.0
● JDBC 1.0 – Mayo 1998
● JDBC 2.0 – 1999
– Mejora en la lectura de los resultsets
– Actualizaciones batch
– Soporte OODBMS
– BLOBS y CLOBS
JDBC 3.0
● JDBC 3.0 – 2002 (JSR-54)
– Savepoints en las transacciones
– Recuperación de claves autogeneradas
– Actualización BLOB y CLOB
– Multiples resultset abiertos
– Recuperación de metadatos de parámetros
–
Drivers JDBC
● Existen drivers para casi todas las BBDD
del mercado, los drivers pueden ser:
– Tipo 1, puente JDBC-ODBC
– Tipo 2, Driver de API Nativa
– Tipo 3, Driver de protocolo de red
– Tipo 4, Drivers de protocolo nativo
– Interno, driver JDBC embebido con el JRE
– URL JDBC, cadena de conexión
RMI-JRMP
● Java Remote Method Protocol
● Protocolo específico para Java
● Permite referencias objetos remotos
● Es un protocolo que corre sobre TCP/IP
bajo RMI.
● Se puede sustituir por IIOP o por otros
desarrollados por terceros.
Java IDL
● Tecnología de objetos distribuidos
● Basado en "Common Object Request
Brokerage Architecture" (CORBA)
● Permite intercomunicar sistemas escritos
en lenguajes distintos
● Proporciona un broker (ORB) Object
Request Broker
● idltojava para generar stubs y skeletons
Java IDL (ii)
● Comunicación CORBA:
RMI-IIOP
● IIOP (Internet Inter-Orb Protocol)
● Permite interoperar aplicaciones
diseñadas para RMI con otras CORBA.
● RMI no requiere declaracion de IDL
● Presente desde Java 1.3
● Pretende simplificar los desarrollos
CORBA
Servlet
● Un servlet es un objeto que se ejecuta en un
contenedor web
● Fue diseñado para servir páginas dinámicas
web
● Su nombre surge como contraposición a
applet.
● Un servlet es un objeto Java que implementa la
interfaz javax.servlet.Servlet o hereda
alguna de las clases más convenientes para un
protocolo específico (ej:
javax.servlet.HttpServlet).
Ejecución Servlet
● Cargar instancia
● Inicializar
● Servir peticiones (todo el tiempo)
● Destruir
● Descargar
Servlet (ex.)
● El servlet “Hola Mundo”
public class HelloWorldServlet extends HttpServlet {
protected void service (HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
ServletOutputStream out = response.getOutputStream();
out.println("<html><body><h1>Hello
}
World</h1></body></html>");
}
JSP
● Los servlets son muy tediosos para
generar código html
● Java Server Pages se diseñó para
generar la capa de presentación en
forma de scripts
● Se permite “embeber” código java dentro
de una página html o xhtml y que sea
interpretada dinámicamente
● Se puede sustituir el código Java por
etiquetas (TagLibs)
Ciclo de vida de un JSP
JSP (ex.)
<%@ page errorPage="myerror.jsp" %>
<%@ page import="com.foo.bar" %>
<html>
<head>
<% int serverInstanceVariable = 1;%>
<% int localStackBasedVariable = 1; %>
</head>
<body>
<table>
<tr>
<td><%=localStackBasedVariable%></td>
</tr>
</table>
</html>
JNDI
● Java Naming and Directory Interface
● API de acceso a servicios de nombre y
directorios en Java
● Pretende asociar nombres con objetos
para poder acceder a ellos de una
manera estandar
– Archivos
– Nombres DNS
– EJBs
– Bases de datos ...
Arquitectura JNDI
JNDI (ex.)
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.fscontext.RefFSContextFactory");
Context ctx = new InitialContext(env);
Object obj = ctx.lookup (name);
try {
// Create the initial context
Context ctx = new InitialContext(env);
// Look up an object
Object obj = ctx.lookup(name);
// Print it
System.out.println(name + " is bound to: " + obj);
} catch (NamingException e) {
System.err.println("Problem looking up " + name + ": "
+ e);
}
Factorias JNDI
● Filesystem
– com.sun.jndi.fscontext.FSContextFactory
– com.sun.jndi.fscontext.RefFSContextFactory
● LDAP
– com.sun.jndi.ldap.LdapCtxFactory
● NDS
– com.novell.naming.service.nds.NdsInitialContextFa
ctory
● RMI registry
– com.sun.jndi.rmi.registry.RegistryContextFactory
JNDI (ex2)
● Recuperar una conexión de bbdd de un
servidor de aplicaciones
DataSource ds = null;
try
{
Context ctx = new InitialContext();
if(ctx == null) throw new Exception("JNDI Context could not be found.");
ds = (DataSource)ctx.lookup(“jdbc/MifuenteCoreDS”);
if(ds == null) throw new Exception("Datasource could not be found");
connection = ds.getConnection("user","pass");
connection.setAutoCommit(false);
}
catch(Exception e)
{
e.printStackTrace();
}
JMS
● Java Message Service es el API
encargada de mensajería y MOM
(message-oriented middleware)
● Mensaje = conjunto de datos enviados
desde un sistema a otro
● JMS es un API que sirve de
intermediario, como JDBC a
implementaciones de fabricantes
● JMS provider = driver mensajería
JTA
● Java Transaction API
● Define XA para Java (estandar del Open
Group para transacciones distribuidas)
● JTA permite usar transacciones
distribuidas trasp
Comentarios de: J2EE Visión Arquitectónica (0)
No hay comentarios