Escolar Documentos
Profissional Documentos
Cultura Documentos
Framework
Una definición de framewrok podrí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 librerías necesarias, así 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 podrían realizar o los que ya están en
desarrollo.
Un ejemplo muy claro es el sistema operativo Windows XP y Windows Vista, ya que el framework en el que está
desarrollada es .Net. Si podemos apreciar, en windows, nos muestra el entorno gráfico y todos los beneficios que se
muestra en ella.
Como último dato sobre el framework en windows, es que el último sistema operativo creada por los desarrolladores
de Microsoft utilizan el framework 4.0 beta que es especialmente para el windows 7
Creamos la clases de la facade 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 ) {
}
Customer.java:La clase define los nombres de las variables q va a manejar
• Ubicamos el siguiente código:
private String name
MortgageApplication.java: Es la que se comunica con las demás clases y aquí es el concepto de facade
• Ubicamos el siguiente código:
int amount;
private Bank bank = new Bank();
private Credit credit = new Credit();
public MortgageApplication( int amount ) {
Aplicaciones Distribuidas: Un enfoque práctico 3
this.amount = amount;
}
public boolean isEligible( Customer c ) {
}
Client.java: Llama a la clase Mortage que es la que se comunica con el resto de las clases
• Ubicamos el siguiente código:
Corrida de facade.
Aplicaciones Distribuidas: Un enfoque práctico 4
Primer paso.
Creamos las clases 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 opción;
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("Está en clase Conexión y método Description");
}
Aplicaciones Distribuidas: Un enfoque práctico 5
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 número 2 sera Mysql con extend a la clase Conexión
• Ubicamos el siguiente código:
public class MysqlConexion extends Conexión
{
Factory_One obj_facone = new Factory_One();
Factory_One obj_mysql = new Factory_One();
public void description()
{
super.description();
System.out.println("Mysql conexión, mé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 número 2 será Oracle con extend a la clase Conexión
• Ubicamos el siguiente código:
public class OracleConexion extends Conexión {
Factory_One factory;
factory = new Factory_One();
factory.createConnection(1);
}
Main.java:aquí 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) {
}
Finalmente la corrida del ejercicio
Aplicaciones Distribuidas: Un enfoque práctico 6
Corrida Factory.
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 {
String name;
Approver successor;
this.name = name;
Aplicaciones Distribuidas: Un enfoque práctico 7
this.successor = successor;
}}
President.java: Defien lso momtos que gana el presidente
• Ponemos el código aquí:
public class President extends Approver {
}}
Vicepresident.java: Utiliza la clase Approver y define los montos del Vice presidente
• Ponemos el código:
public class VicePresident extends Approver {
}}
PurchaseRequest.java: Es la clase main
• Ubicamos el código:
Aplicaciones Distribuidas: Un enfoque práctico 8
{
// Set up Chain of Responsibility
Approver Larry = new Director("Larry");
Approver Jerry = new VicePresident("Jerry");
Approver Tammy = new President("Tammy");
Larry.setSuccessor(Jerry);
Jerry.setSuccessor(Tammy);
// Generate and process different requests
Larry.processRequest(5000);
Larry.processRequest(30000);
Larry.processRequest(80000);
Larry.processRequest(120000);
}
Diagrama aplicación.
La siguiente acción será la de crearnos 3 paquetes con los nombres modelo, vista y controlador
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 hará 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(); OM.SignoffUser(); return "Realizado"; } 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(){
} 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:
{ //metodo post
C_SignoffAction OSOA=null;
OSOA=new C_SignoffAction();
OSOA.Create();
OSOA.Perform();
vista.V_ScreenFlowManager OSFM=new vista.V_ScreenFlowManager();
OSFM.SelectView();
Aplicaciones Distribuidas: Un enfoque práctico 10
Una vez concluido vamos a la siguiente capa a la de modelo 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"; } Finalmente vamos a la capa de visulizacion vista
Creamos 2 clases 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() {
String retorno;
controlador.C_controller OC=null;
OC=new controlador.C_controller();
retorno=OC.Post();
return retorno;
} 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() {
System.out.println("SATISFACTORIO");
return "ok";
}
Ahora nos falta crear la llamada a la función de la vista en nuestro index.jsp. Este jsp simplemente llama a la
función de la vista la cual interactua con esta a la V.Client la cual se comunicaba con la capa del controlador y
finalmente llamamos a la función CallPost de la misma capa de vista Ponemos el siguiente código: <html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
</body>
<% vista.V_Client prueba=null //Vista para cliente final prueba=new vista.V_Client() %> <%=prueba.CallPost()%>
</html>
Y finalmente corremos la aplición con MVC
Aplicaciones Distribuidas: Un enfoque práctico 11
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 ó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"
Un "Java Bean" requiere ser integrado con otros componentes para que éste sea funcional, mientras un "Enterprise
Java Bean" a través de un "EJB Container" puede ser activado("deployed"). Ventajas de EJB ("Enterprise Java
Beans")
Un EJB a través de un "EJB Container" ofrece varios servicios y funcionalidades no disponibles en un "Java Bean",
algunas son las siguientes:
Servicios ("Middleware") 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").
Aplicaciones Distribuidas: Un enfoque práctico 12
.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.
Los componentes de la plataforma .NET son: Smart Clients (Clientes Inteligentes): Son dispositivos muy variados.
Lo que los hace 'Smart' o inteligentes es su capacidad para hacer uso de servicios Web.
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)
Aplicaciones Distribuidas: Un enfoque práctico 13
Arquitectura MVC
JSON
Para realizar la comunicación de datos entre un cliente y un servidor tenemos varias alternativas. Una de ellas es
JSON, un formato de texto legible y fácil de interpretar así como simple y liviano en comparación a XML.
JSON nos permite realizar la misma tarea pero con menos código. Además permite representar estructuras de datos
simples llamados objetos, además de arreglos o colecciones.
En el siguiente ejemplo podemos observar un texto en formato JSON:
{"nombre":"Maribel", "apellido":"Benavides",
"dirección":{
"calle":"Esmeraldas y García Moreno",
"número":345
},
"teléfonos":["098738095","022847563"]}
En este ejemplo:
Nombre y apellido serían pares nombre:valor, los cuales son parte del objeto que empieza en las llaves ubicadas
justo antes de este
Dirección sería un objeto
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 característica:
<?xml versión="1.0"?>
<datosPersonales>
<nombre>Maribel</nombre>
<apellido>Benavidez</apellido>
<dirección>
<calle>Prólogo</calle>
<número>345</numero>
</direccion>
</datosPersonales>
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 PC, ya que no necesitamos definir etiquetas ni atributos para representar datos.
Aplicaciones Distribuidas: Un enfoque práctico 17
APIs y APIs
API (application programming interface - Interfaz de Programación de Aplicaciones) es el conjunto de funciones y
procedimientos que ofrece ciertas librerías para ser usadas por otro software como otra capa de abstracción.
En otras palabras API es un conjunto de funciones que facilitan el intercambio de mensajes o datos entre dos
aplicaciones que trabajan simultáneamente.
Un claro ejemplo de esto está en los Mashup como http:/ / schlafen. zzl. org, que no son más que una mezcla de
servicios en los cuales desde un blog, aplicación o página web se puede mostrar música videos, fotografías y má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 descripció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.
Algunas de las API más conocidas son:
Algunos de los Ejemplos má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 librerías generalmente dinámicas, que permiten que una aplicación corra
bajo un determinado sistema operativo.
Las funciones API se dividen en varias categorías:
* Evita abusos, ya que una API no segura y abierta es blanco de todo tipo de ataques.
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.
Las Relaciones que se podrían encontrar entre las acciones SQL y HTTP se explican en el siguiente cuadro
Aplicaciones Distribuidas: Un enfoque práctico 19
Donde:
Una manera fácil de entender de mejor manera la creación de un RESTful Web Service, se muestra en el siguiente
tutorial http://netbeans.org/kb/docs/websvc/rest.html
Utilizando JSON se puede recuperar la información que nos retorna la base de datos al realizar un test, una
implementación fácil de JSON para el retorno de datos utilizando el método GET puede ser
@GET
@Path("/customer/")
@Produces("application/json")
sb.append("{\"clientes\":[\n\t{\"Número de Fila\":\""+lookupCustomerFacade().findAll().size()+"\"},\n");
try {
List<Customer> ls = lookupCustomerFacade().findAll();
int a=0;
a++;
sb.append("\t{\"Código\":\""+s.getCustomerId().toString()+"\",");
sb.append("\"Nombre\":\""+s.getName()+"\",");
sb.append("\"Ciudad\":\""+s.getCity()+"\",");
sb.append("\"CreditoLimite\":\""+s.getCreditLimit().toString()+"\",");
sb.append("\"Tipo\":\""+s.getAddressline1()+"\"}");
if(a<ls.size()){
Aplicaciones Distribuidas: Un enfoque práctico 20
sb.append(",\n");
sb.append("\n ]\n");
sb.append("}");
return sb.toString();
SOAP
Proporciona una vía de comunicación entre aplicaciones ejecutados en sistemas operativos diferentes, con diferentes
tecnologías y lenguajes de programación.
SOAP Envelope
Elemento raíz de un mensaje SOAP, define al XML como un mensaje SOAP.
<?xml versió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">
...
Mensaje
...
</soap:Envelope>
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 versió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">
<soap:Header>
<m:Trans xmlns:m="http://www.demo.com/transaction/"
soap:mustUnderstand="1">234
soap: actor = "http:/ / www. demo. com/ appml/ "> 234
</m:Trans>
</soap:Header>
...
...
</soap:Envelope>
SOAP define tres atributos en el espacio de nombres por defecto: MustUnderstand, actor y encodingStyle. Los
atributos definidos en el encabezado SOAP define cómo un receptor debe procesar el mensaje SOAP. 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 versió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">
<soap:Body>
<m:GetPrecio xmlns:m="http://www.demo.com/precios">
<m:Item>Macbookpro 13 inch</m:Item>
</m:GetPrecio>
</soap:Body>
Aplicaciones Distribuidas: Un enfoque práctico 22
</soap:Envelope>
El elemento requerido SOAP Body contiene el mensaje SOAP reales destinados para el extremo final del mensaje.
El mensaje de arriba pide el precio de una manzana. Respuesta Soap
<? xml versió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">
<soap:Body>
<m:GetPrecioResponse xmlns:m="http://www.demo.com/precios">
<m:Precio>1.390</m:Precio>
</ m: GetPrecioResponse>
</soap:Body>
</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
<detail> Tiene información específica sobre la aplicación , error relacionados con el elemento Body
references http://www.w3schools.com/SOAP/soap_syntax.asp
Fuentes y contribuyentes del artículo 23
Licencia
Creative Commons Attribution-Share Alike 3.0 Unported
http:/ / creativecommons. org/ licenses/ by-sa/ 3. 0/