Diferencia entre revisiones de «Aplicaciones Distribuidas: Un enfoque práctico»

Contenido eliminado Contenido añadido
m Correcciones menores (v1.54) PR:CEM.; cambios triviales
Línea 1:
{{fusionar en|API}}
 
== Framework ==
Una definiciondefinición de framewrok podriapodría ser que es una plataforma o un entorno de trabajo en el cual se puede desarrollar otro software. El contenido de estos frameworks pueden ser libreriaslibrerías necesarias, asiasí como los lenguajes o lenguaje que permiten el desarrollo de varios componentes que se quiera desarrollar.
 
Los frameworks te ayudan al manejo y desarrollo de programas que se podrianpodrían realizar o los que ya estanestán en desarrollo.
 
Un ejemplo muy claro es el sistema operativo Windows XP y Windows Vista, ya que el framework en el que estaestá desarrollada es .Net. Si podemos apreciar, en windows, nos muestra el entorno graficográfico y todos los beneficios que se muestra en ella.
 
Como ultimoúltimo dato sobre el framework en windows, es que el ultimoúltimo sistema operativo creada por los desarrolladores de Microsoft utilizan el framework 4.0 beta que es especialmente para el windows 7
 
== Servidor de Aplicaciones - App Server ==
 
Un servidor de aplicaciones basicamentebásicamente conciste en poder manejar lo que se refiere a la logica de negocios, ademasademás cuando hablamos de un framework tambientambién debemos hablar de un app-server, ya que van de la mano. Uno de los principales objetivos de este servidor es que que tiene la facultad de manejar la gran mayoría de aplicaciones, como puede ser la de acccesar a los datos, etc.
 
Se diriadiría que un servidor de aplicaciones es como un motor de software cuyo principal objetivo es de brindar distintas aplicaciones para los clientes.
 
Un servidor de Aplicaciones debe tener por una parte las aplicaciones de los clientes y ademasademás debe tener donde almacenar los datos ingresados, es decir tener un repositorio de datos donde se puede alojar todo lo enviado por los clientes.
 
== Implementación de patrón de diseño Facade ==
 
 
Línea 25:
Bank.java: El cual va a ir verificando en cada uno de las demás clases de q banco pertenecen
 
* Ubicamos el siguiente código:
 
public boolean sufficientSavings( Customer c )
Línea 35:
Customer.java:La clase define los nombres de las variables q va a manejar
 
* Ubicamos el siguiente código:
 
private String name
Línea 47:
}
 
MortgageApplication.java: Es la que se comunica con las demasdemás clases y aquiaquí es el concepto de facade
 
* Ubicamos el siguiente código:
 
int amount;
Línea 72:
Client.java: Llama a la clase Mortage que es la que se comunica con el resto de las clases
 
* Ubicamos el siguiente código:
 
public static void main(String[] args)
Línea 86:
[[Archivo: Corridafacade.jpg|center|thumb|600px|Corrida de facade]]
 
== Implementación de patrón de diseño Factory ==
Diagrama de clases de la aplicacionaplicación
[[Archivo: Factoryrose.jpg|center|thumb|600px|Primer paso]]
 
Línea 94:
Factory_One.java: Nos va a definir que cuando cambiemos 1 o por 0 las conexiones en la clase cliente
 
* Ubicamos el siguiente código:
 
int opcionopción;
public void createConnection(int cero)
{
System.out.println("");
opcionopción=cero;
if(opcionopción==1)
{
System.out.println("ConexionConexión Mysql");
}
else
{
System.out.println("ConexionConexión Oracle");
}
}
Conexión.java:Es la clase interfaz que nos va a permitir poder interactuar con las clases de mysql y oracle
 
* Ubicamos el siguiente código:
 
public void description()
{
System.out.println("EstaEstá en clase ConexionConexión y metodométodo Description");
}
 
MysqlConexion.java: Clase la que permite definir todas las variables de la clase y la función createconnection para definir que cuando se ponga el numeronúmero 2 sera Mysql con extend a la clase ConexionConexión
 
* Ubicamos el siguiente código:
 
public class MysqlConexion extends ConexionConexión
{
Factory_One obj_facone = new Factory_One();
Línea 130:
{
super.description();
System.out.println("Mysql conexionconexión, metodométodo description");
obj_facone.createConnection(2);
}
}
 
OracleConexion.java: Clase la que permite definir todas las variables de la clase y la función createconnection para definir que cuando se ponga el numeronúmero 2 será Oracle con extend a la clase Conexión
 
* Ubicamos el siguiente código:
 
public class OracleConexion extends ConexionConexión
{
Factory_One obj_facone = new Factory_One();
Línea 145:
public void description()
{
System.out.println("Oracle ConexionConexión, metodométodo description");
super.description();
obj_facone.createConnection(1);
Línea 152:
Cliente.java: simplemente se llama la función para saber si es 1 o 2 y definir la conexión
 
* Ubicamos el código:
 
public void main()
Línea 161:
}
 
Main.java:aquiaquí se hace la llamada a la clase cliente la cual contiene la información de la conexión
 
* Ubicamos el código:
 
public static void main(String[] args)
Línea 175:
[[Archivo: Corridafactory.jpg|center|thumb|600px|Corrida Factory]]
 
== Implementación de patrón de diseño Chain of Responsability ==
 
[[Archivo: ChaimRose.jpg|center|thumb|600px|Diagrama de clases]]
Creamos las clases
Approver.java: Define simplemente las variables que vamos a utilizar como el nombre, montos
* Ponemos el código:
public abstract class Approver
{
Línea 197:
 
Director.java: Utiliza la clase extends para ir definiendo el monto de director
* Ponemos el código:
public class Director extends Approver
{
Línea 213:
 
President.java: Defien lso momtos que gana el presidente
* Ponemos el código aquí:
public class President extends Approver
{
Línea 229:
 
Vicepresident.java: Utiliza la clase Approver y define los montos del Vice presidente
* Ponemos el código:
public class VicePresident extends Approver
{
Línea 245:
 
PurchaseRequest.java: Es la clase main
* Ubicamos el código:
public static void main(String[] args)
{
Línea 264:
[[Archivo: Corridachain.jpg|center|thumb|600px|Corrida del programa]]
 
== Implementación Modelo Vista Controlador (MVC) ==
 
 
Línea 273:
 
Desplegamos el paquete '''controlador''' y vamos a crear un java file 3 java file o que es lo mismo CLASES
Primer java file : Lo que harahará básicamente es controlar cuando un usuario se desconecta de la sesión
'''C_SignoffAction.java'''
* Y ponemos el siguiente código:
public String Create(){
return "Realizado";
}
public String Perform(){
modelo.M_model OM=null;
OM=new modelo.M_model();
Línea 287:
Segundo java file : Interactúa con capa de la vista para la salida de los datos de mensajes
'''C_TemplatingService.java'''
* Y ponemos el siguiente código:
public String fordward(){
vista.V_Screen OS =new vista.V_Screen();
Línea 295:
Tercer java file : esta clase permite poner el mensaje que queramos visualizar en la capa de salida nos controla los mensajes del mismo.
''' C_controller.java'''
* Y ponemos el siguiente código:
 
public String Post()
Línea 312:
Creamos una clase: la cual simplemente es la representación en si de la aplicación
'''M_model.java'''
* Ponemos el siguiente código:
public String SignoffUser()
{return "Usuario Desconectado";
Línea 320:
Primera java file:Realiza la coodinación para llamar al mensaje del Post de la clase del controlador en este caso C_controller el cual contiene el mensaje.
'''V_Client.java'''
* Ponemos el siguiente codigo:
public String CallPost()
{
Línea 331:
Segundo java file:Simplemente indicara si todo salió bien un mensaje cuando se genera la aplicación de SATISFACTORIO.
'''V_Screen.java'''
* Ponemos el siguiente codigo:
public String generate()
{
Línea 350:
prueba=new vista.V_Client()
%>
<%=prueba.CallPost()%>
</html>
 
Línea 356:
[[Archivo: Corridamvc1.jpg|center|thumb|600px|Corrida final mvc]]
 
== COMPONENTES ==
 
== EJB ==
 
Un "Java Bean" es un componente utilizado en Java que permite agrupar funcionalidades para formar parte de una aplicación, esto puede ser: un "Java Bean" agrupando información personal, datos sobre un pedimento, requerimientos de ordenesórdenes, etc.
 
Un "Enterprise Java Bean" también agrupa funcionalidades para una aplicación, sin embargo, a diferencia de un "Java Bean" un "Enterprise Java Bean" es un "deployable component", el término "deployable component" implica que existe un ambiente de ejecución , éste ambiente es precisamente un "EJB(Enterprise Java Bean) Container"
Línea 372:
Esta posiblemente sea la mayor ventaja de un EJB. Cuando se diseña un componente de Software se deben definir varios servicios para su funcionamiento, algunos pueden ser:
 
* Si ocurre un error que procedimiento debe ejecutarse ?
* Si la base de datos especificada se encuentra desactivada, existe otra alternativa ?
* No fue posible cumplir exitosamente "x" procedimiento, se deben retractar sus acciones parciales o reinvocar la transacción ?
* Estos Servicios (comúnmente llamados "Middleware") por lo general son requeridos además de la lógica contenida en los componentes principales, obviamente estos servicios ("Middleware") aún deben ser diseñados, sin embargo, mediante un "EJB Container" se ofrecen estos servicios y es a través de un "Enterprise Java Bean" que es posible desarrollar los componentes principales ("lógica de negocios").
 
 
== .NET ==
 
La plataforma .NET no es un solo producto. Es un conjunto de productos. Desde sistemas operativos como Windows XP, servidores de aplicaciones como SQL Server 2000, productos de oficina como Office XP, herramientas de desarrollo como Visual Studio .NET hasta servicios Web provistos por Microsoft como .NET Passport.
Línea 386:
 
Sus características son:
* Permiten acceder a la información en el formato apropiado, en cualquier momento y lugar.
* Hacen uso de Servicios Web.
* Optimizan de distintas maneras la forma en que la información es presentada y organizada. Por ejemplo: Pueden convertir texto en sonido en un celular o reconocer la escritura en un TabletPC.
* Proveen de una interfase sencilla y natural para que el usuario acceda a la información. Pueden utilizar la identidad del usuario, su perfil y datos para adaptar la información que es presentada.
* Pueden reconocer la presencia de otros dispositivos e intercambiar información.
* Pueden adaptarse a las características de la red donde están. Por ejemplo la velocidad de transmisión.
* Tienen capacidad de procesamiento propio, y distribuyen el procesamiento en la red haciendo uso de los servicios Web.
 
Ejemplo de estos son:
 
* PocketPC (PC de bolsillo)
* SmartPhone (Teléfono Inteligente)
* HandHelds
* TabletPC
* XBox (Consola de juegos de Microsoft)
 
== Arquitectura Cliente servidor ==
Línea 428:
[[Archivo:CaracteristicasArquitecturaMVC.jpg]]
 
== FORMATOS DE DATOS ==
==JSON==
 
Línea 441:
{"nombre":"Maribel", "apellido":"Benavides",
"dirección":{
"calle":"Esmeraldas y GarciaGarcía Moreno",
"numeronúmero":345
},
"teléfonos":["098738095","022847563"]}
Línea 455:
Teléfono sería un arreglo.
 
== XML ==
 
En cuanto a XML, es muy similar al HTML, ya que se usan etiquetas pero no predefinidas como <IMG>, sino que podemos encontrar etiquetas personalizadas.
 
El siguiente es un ejemplo simple que nos permite observar esta caracteristicacaracterística:
 
<?xml versionversión="1.0"?>
 
<datosPersonales>
Línea 469:
<apellido>Benavidez</apellido>
 
<dirección>
<direccion>
 
<calle>Prólogo</calle>
 
<numeronúmero>345</numero>
 
</direccion>
Línea 480:
 
 
Comparándolo a JSON con XML, se puede decir que este primero es más fácil de leer tanto para nosotros como para las PCsPC, ya que no necesitamos definir etiquetas ni atributos para representar datos.
 
 
Línea 486:
== APIs y APIs ==
 
API (application programming interface - Interfaz de ProgramacionProgramación de Aplicaciones) es el conjunto de funciones y procedimientos que ofrece ciertas libreriaslibrerías para ser usadas por otro software como otra capa de abstraccionabstracción.
 
En otras palabras API es un conjunto de funciones que facilitan el intercambio de mensajes o datos entre dos aplicaciones que trabajan simultaneamentesimultáneamente.
 
Un claro ejemplo de esto estaestá en los Mashup como http://schlafen.zzl.org, que no son masmás que una mezcla de servicios en los cuales desde un blog, aplicacionaplicación o paginapágina web se puede mostrar musicamúsica videos, fotografiasfotografías y masmás, con tan solo hacer el llamado a las APIs de los respectivos servicios.
 
El consumo de un API muestra la forma de llamar a cada función y la tarea que ésta desempeña, sin importar cómo se lleva a cabo dicha tarea. Un API hermetiza la complejidad de su operación y solo muestra al programador una fachada que permite acceder a ella.
Para empezar a consumir un API solo es necesario conocer su url y las diferentes funciones que ofrece con la descripciondescripción de parámetros.
Hay ciertas API's como flickr que necesitan que las personas que desean utilizrlas se registren para obtener su clave de acceso; mientras que hay API's de uso público como google traductor que no necesitan de esta tarea.
 
Línea 505:
* Youtube: http://code.google.com/intl/es-ES/apis/youtube/overview.html
 
Algunos de los Ejemplos masmás simples y comunes de como implementar un API se puede encontrar en Google Code:
http://code.google.com/apis/ajax/playground
 
== APIs Locales: ==
 
Es un conjunto de funciones residentes en libreriaslibrerías generalmente dinamicasdinámicas, que permiten que una aplicación corra bajo un determinado sistema operativo.
 
Las funciones API se dividen en varias categorías:
Línea 529:
 
* Cualquier persona tiene acceso y pueden desarrollan aplicaciones que usen la API.
* No se requiere de mucho trabajo o administracionadministración de permisos.
* Permite solicitar información sin guardarla en en una base de datos, tan solo se consume los servicios directaente desde el servidor de la API.
 
== Ventajas de una API cerrada ==
 
* Permite cifrar las respuestas de la API para que unicamenteúnicamente los usuarios autorizados las utilicen.
* Evita abusos, ya que una API no segura y abierta es blanco de todo tipo de ataques.
* Ideal para publicar información y también para solicitar.
 
== Web Service ==
Un web service básicamente constituye una función accedida vía web por cualquier programa independiente de la plataforma en la cual reside el web service “servicio” o el lenguaje en el que ha sido desarrollado, cabe resaltar que el acceso es mediante el protocolo http pero existen protocolos de transporte que también pueden ser utilizados para este fin.
 
== RESTful Web Services ==
Los RESTful Web Services son una implementación de un servicio usando HTTP y los principios de REST, el cual como resultado no retorna su base de datos completa, sino algún HTML, retornan un resultado en un tipo de dato que pueda ser interpretado por el cliente, estos pueden ser JSON, XML o YAML.
La siguiente gráfica muestra la arquitectura para la construccionconstrucción de un RESTful Web Service
 
[[Archivo:ArquitecturaRESTfulWebServices.JPG]]
Línea 568:
public String getCustomer() {
StringBuilder sb=new StringBuilder();
sb.append("{\"clientes\":[\n\t{\"NumeroNúmero de Fila\":\""+lookupCustomerFacade().findAll().size()+"\"},\n");
try {
List<Customer> ls = lookupCustomerFacade().findAll();
Línea 574:
for (Customer s : ls) {
a++;
sb.append("\t{\"CodigoCódigo\":\""+s.getCustomerId().toString()+"\",");
sb.append("\"Nombre\":\""+s.getName()+"\",");
sb.append("\"Ciudad\":\""+s.getCity()+"\",");
Línea 590:
}
 
== SOAP ==
Proporciona una viavía de comunicación entre aplicaciones ejecutados en sistemas operativos diferentes, con diferentes tecnologías y lenguajes de programación.
• SOAP son siglas de Simple Object Access Protocol.
• SOAP es un protocolo de comunicación.
Línea 607:
• Un elemento de culpa (Fault)que contienen errores e información de estado de la información.
 
== Estructura de un mensaje SOAP ==
Su estructura es la siguiente
 
<? xml versionversión = "1.0"?
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
Línea 626:
 
== SOAP Envelope ==
Elemento raíz de un mensaje SOAP, define al XML como un mensaje SOAP.
<?xml versionversión="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
Línea 638:
 
Encoding style se utiliza para definir los tipos de datos utilizados en el documento.
Xmlns .El espacio de nombres define como una envoltura SOAP.
 
== SOAP HEADER ==
El elemento opcional, SOAP Header contiene información específica de aplicaciones sobre el mensaje SOAP.
 
<?xml versionversión="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
Línea 661:
El atributo MustUnderstand SOAP indica si la entrada de la cabecera es obligatorio o facultativo para el destinatario del proceso.
El atributo de actor SOAP se utiliza para abordar el elemento de cabecera a un extremo específico
El atributo encodingStyle define tipos de datos utilizados en el documento
 
== SOAP BODY ==
<?xml versionversión="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
Línea 679:
Respuesta Soap
 
<? xml versionversión = "1.0"?
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
Línea 689:
</soap:Envelope>
 
== SOAP Fault ==
Informan y mantiene información de estado de un mensaje SOAP.
<faultcode> Un código de identificación de la falla
<faultstring> Una explicación legible del error