tres capas con desarrollo de aplicaciones en tres capas con visualworks smalltalk y gemstone /s

Post on 25-Jan-2016

222 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

TRES CAPAS CON

Desarrollo de Aplicaciones en Tres Capas con VisualWorks

Smalltalk y GemStone /S

Tres Capas con Smalltalk

Introducción al Diseño en Capas Características de las

Herramientas Conexión entre capas Persistencia de Objetos Ejemplo Práctico

Tres Capas

Breve introducción al diseño en capas

Tres Capas - Descripción

Presentación al Usuario Modelo del Negocio Persistencia de Datos

Tres Capas - Diagrama

Tres Capas - Presentación

Esta capa reúne todos los aspectos del software que tienen que ver con las interfaces y la interacción con los diferentes tipos de usuarios humanos

Tres Capas - Negocio

Esta capa reúne todos los aspectos del software que apoyan los procesos de negocio que llevan a cabo los usuarios

Tres Capas - Datos

Esta capa reúne todos los aspectos del software que tienen que ver con el manejo de los datos persistentes

Tres capas - Smalltalk

Características de las herramientas de desarrollo

Tres Capas – Smalltalk

Herramientas VisualWorks GemStone /S

Opciones Cliente Ventana, Cliente Web Servidor VW, Servidor GS Repositorio GS, RDBMS

VisualWorks

Multiplataforma (Windows – Linux – AIX – Solaris – MacOSX)

Completo Editor de Ventanas Soporte para aplicaciones Web (Web Services,

Smalltalk Server Pages, Servlets) Soporte a protocolos standard como FTP, POP,

SMTP, IMAP Seguridad (SSL) Soporte para CORBA y COM Soporte para mapeo Objeto – Relacional (Top Link –

GLORP)    Código abierto

Gemstone /S Multiplataforma (Windows – Linux – AIX – Solaris –

MacOSX) Servidor de objetos multiusuario Soporte transaccional y control de concurrencia Soporte para consultas Soporta índices para procesar los objetos Soporte de conexión a repositorios de datos

externos (OODBMS – RDBMS) Administración de cuentas y seguridad Integración con VW a través de GemBuilder

Diagrama de Despliegue

Conexión entre Capas

Como realizar las conexiones entre las capas de presentación al

usuario y el servidor y entre el servidor y el repositorio de objetos

Conexión entre Capas

Estilo de Aplicación: Repositorio de Datos GemStone/S Servidor de Aplicaciones sobre

GemStone/S Cliente Ventana Smalltalk Cliente Web (servlets – ssp pages)

Herramientas Necesarias

Cargar las parcelas* GbsTools para poder conectarse a

GemStone (servidor-repositorio) WebToolKit (herramientas web) ContactsModel, ContactsUI y

ContactsWeb (el código fuente del ejemplo)

(*) Una parcela es un archivo externo que contiene un grupo de clases, objetos y dependencias

Conexión Cliente/Servidor/Repositorio Opción programática Definir los parámetros de conexión al

servidor Definir los parámetros de conexión al

repositorio| parameters |parameters := GbsSessionParameters

newWithGemStoneName: ‘!@localhost!gemserver61’username: ‘DataCurator’password: ‘swordfish’hostUsername: ''hostPassword: ''gemService: ‘!@localhost!gemnetobject’

*hostUsername y hostPassword son necesarios cuando el application server corre en un host diferente al del repositorio

Conexión Cliente/Servidor/Repositorio

Agregar conectores entre los objetos /clases del modelo y los objetos / clases persistentes

| connector |(connector := GbsClassConnector

stName: ‘ContactItem’gsName: ‘ContactItem’dictionaryName:‘ContactsClasses’).

parameters addConnector: connector

| connector |(connector := GbsClassVarConnector

stName: ‘ContactItems’gsName: ‘ContactItems’dictionaryName: ‘ContactsClasses’stvarName: ‘SoleInstance’gsvarName: ‘SoleInstance’) beForwarderOnConnect.

parameters addConnector: connector

Conexión Cliente/Servidor/Repositorio

Loguearse al repositorio de objetos

parameters loginRpc

Una vez hecho esto: Queda establecida la conexión entre el servidor de

aplicación y la base de datos Se replicó la clase ‘ContactItem’ Se conecto la variable de clase ‘SoleInstance’ de la clase

ContactItems entre la imagen servidor y la imagen cliente (todos los mensajes enviados a esta en el cliente se forwardean al servidor)

Conexión Cliente/Servidor/Repositorio Opción visual

Definir los parámetros de conexión

Conexión Cliente/Servidor/Repositorio

Agregar conectores entre los objetos /clases del modelo y los objetos / clases persistentes

Conexión Cliente/Servidor/Repositorio

Loguearse al repositorio de objetos

Para conectarse a equipos remotos debe utilizarse la opción Login Rpc

Una vez hecho esto el resultado obtenido es el mismo que al realizarlo programáticamente

Conexión Cliente Web

Como realizar la conexión entre el cliente web y el

servidor web

Servicios Web

Definir un servidor (Smalltalk HTTP Server) Crear el/los servlets necesarios Escribir las páginas dinámicas (Smalltalk

Server Pages –ssp-) que hagan falta Configurar el sitio web

Web – Crear servidor Desde la consola de server se crea y

configura un Smalltalk HTTP Server

Web - Servlets

Un servlet es una clase que es invocada desde una página web (puede ser html, ssp, jsp o asp)

Debe ser subclase de HttpServlet Protocolo: doPost, doGet,

doPost:response: y doGet:response:

<form action="servlet/ServletVerify" method="post" name="loginForm">

Web – Smalltalk Server Pages

Son páginas web que contienen código smalltalk embebido en el código html

El código smalltalk se ejecuta en el servidor<tr> <td colspan=2 align=center> <% msg := request anyParameterValueAt: 'msg'. msg notNil ifTrue: [ response write: '<p align="center" class="redbutton">'; write: msg; write: '</p>']. %> </td></tr

Web – Configuración del sitio

En el directorio $(VISUALWORK)/web debe existir un archivo de configuración (.ini) para el sitio[configuration contacts-site.ini]

#Note: Configuration parameters are case sensitive.#Configuration file of contacts site

directory = $(VISUALWORKS)/web/contactsenviroment = Smalltalkdescription = The contacts development sitehome = logon.ssp

Este se tiene que referenciar desde webtools.ini

contacts = contacts-site.ini

*contacts es el nombre del sitio web

Web – Configuración del sitio

Una vez creado y levantado el web server, escribiendo http://localhost:8008 en el browser podemos ver la herramienta de configuración de VisualWorks Web Toolkit

Si esta todo bien, en la parte inferior se va a encontrar el site contacts (configurado anteriormente)

Se puede acceder a los detalles del sitio para ver y/o modificar su configuración

Persistencia de Objetos

Como persistir los cambios realizados a los objetos del

negocio

Persistencia de Objetos

Al loguearse a GS se replican en el cliente (ambiente VW) los objetos persistidos en el repositorio

Persistencia de Objetos Luego de modificar algún objeto del

modelo, ese cambio debe persistirse en la base de datos

La manera de persistir / actualizar un objeto en la base de datos es la siguiente: enviándole el mensaje markDirty al objeto, lo

marcamos como que fue modificado y que este cambio debe verse reflejado en la base

al ejecutar el commit de la transacción es cuando se aplica el cambio

Persistencia de Objetos

El objeto es modificado en el contexto del cliente

Persistencia de Objetos El objeto modificado se marca como

sucio enviándole el mensaje markDirty

Persistencia de Objetos Al comitear la transacción se actualizan

todos lo objetos marcados como sucios

Persistencia de cambios

Ejemplo

aContactItemfirstName: firstName;lastName: lastName;homePhone: homePhone;workPhone: workPhone;email: email;markDirty

aGbsSession commit

Ejemplo Práctico

Desarrollo de un ejemplo práctico utilizando las

herramientas descriptas

Ejemplo - Definición

El ejemplo propuesto consiste en una agenda de contactos donde: Un usuario puede:

Agregar usuarios Agregar, modificar o eliminar contactos

Estructura de Aplicación

Ejemplo - Diagrama de Clases

+addProfileFor:()+allUserProfiles()+getOrAddProfileFor:()+inGemStone()+locateProfileFor:()+new()+changed:with:()+inGemStone()+initialize()

-user-contactItems

ContactBookUserProfile

+abort()+addConnectorsTo:()+commit()+createContactUserNamed:password:()+isLoggedIn()+loginIntoGemstone()+logout()+newClassConnectorFrom:to:()+newClassVarConnectorFrom:to:fromVariable:toVariable:()+newSessionParameters()+userContactData()+username()+users()

-session-userContactData-user

ContactBookSessionManager

+changed:with:()+defaultDisplayString()+displayFields()+displayString()+printOn:()

-user-firstName-lastName-homePhone-workPhone-email

ContactItem

+soleInstance()

ContactItems

+named:password:()+printOn:()

-username-password

ContactUser

+soleInstance()

ContactUsers

0..*

10..1

1

1

0..*

1

1

1

0..*1

0..*

Ejemplo – Diagrama de Tres Capas

ContactBookUserProfile

ContactBookSessionManager

ContactItem ContactItems

ContactUser

ContactUsers

ServletAdd ServletMainServletModify ServletVerify

«interfaz»logon.ssp

«interfaz»LoginView

«interfaz»ContactsBrowserWindow

«interfaz»ContactItemEditView

«interfaz»main.ssp

«interfaz»details.ssp

«interfaz»new.ssp

ContactBookUserProfileContactItem

ContactItems ContactUser

ContactUsers

Presentación

Negocio

Datos

Ejemplo – Diagrama de Componentes

PC Win Client

Application Server

Repository Server

Contacts List Window

Contacts Server

Contacts Repository

RPC/TCP

Session

GS Connector

RPC / TCP

Client Session

PC Web Client

web browser

HTTP

Servlet

Preguntas

Consejo Si algo se pone muy complicado de

seguro estamos haciendo algo mal, tomarse cinco minutos y repensar las cosas

Aplicar la filosofía K.I.S.S.

Keep It Simply Stupid

top related