Estos son algunos de los diagramas que hice en la pagina websequence, muy util y recomendable debo decir.
Al estar usando umbrello en mi ArchLinux me da problemas ya que es propio de KDE y Arch utiliza Gnome por eso opte por el websequence.
Bueno, esto ya es otra historia.
Los siguientes diagramas estan describiendo situaciones completas y "dias felices". Y la verdad es que algunos si estan un poco extensos, pero partirlos a secuencias mas reducidas no ayuda a comprender mejor la situacion, asi que lo deje con un contexto mas extenso.
Diagramas de Secuencia
0
comentarios
lunes, 12 de diciembre de 2011
Sistemas Distribuidos
Mi proyecto es apto para el su uso al estilo de computacion distribuida.
Lo primero que se me ocurre es que usar un sistema de Clustering puede beneficiar en gran medida a mi sistema para poder aumentar por mucho su funcionamiento.
Imaginando que el sistema crece, tendremos que las bases de datos de los clientes y los articulos seran mas extensas, por lo cual nos costara mas tiempo realizar todas las acciones de busqueda, inserccion y alteracion de datos.
Si mi sistema funcionara con clustering podria tener varios procesos esparcidos entre las computadoras del cluster, esto implicaria una gran ventaja en su uso ya que seria mucho mas potente y rapido, pero implica un riesgo mucho muy grande ya que si un Nodo del cluster falla el sistema puede quedar inestable y dejar de funcionar.
![]() | |
| Cluster de 6 computadores. |
Este problema se podria arreglar con un nodo provisional al que recurran si algo falla, pero todo queda en manos de las pruebas al momento de la implemetacion de un sistema distribuido.
0
comentarios
domingo, 11 de diciembre de 2011
Patrones de Diseño
En este caso decidi implementar el patron singleton para optimizar un poco los recursos ya que algunas de las clases no se usan concurrentemente asi que sera aplicable el tener solo una instancia y estarla modificando.
-..
public class CarroWeb {
private static CarroWeb instancia;
private List<articulo> listadoLibros;
private List<articulogadget> listadoGadgets;
private Float total, nuevaCantidad;
private String respuesta;
private RemovedorDatos rm;
private String usuario;
/**
* Constructor privado para uso del singleton
*/
private CarroWeb(){
listadoLibros = new ArrayList<articulo>();
listadoGadgets = new ArrayList<articulogadget>();
}
/**
* metodo para el singleton
* @return instancia del carroweb
*/
public static CarroWeb getInstance(){
if(instancia == null){
instancia = new CarroWeb();
}
return instancia;
}
Mi clase de manejador tambien aplica para singleton y asi solo tener una conexion en vez de muchas.
public class Manejador {
private static Manejador instancia;
private String bdDriver, dataSource;
private String bdName, user, pass;
private Connection conn;
private String encryp;
/**
* Constructor de la clase
*/
private Manejador(){
dataSource="//localhost/web";
bdName="jdbc:mysql:" + dataSource;
bdDriver="com.mysql.jdbc.Driver";
user="root";
pass="root";
encryp = "encryp";
}
/**
* metodo para el singleton
* @return instancia del manejador
*/
public static Manejador getInstance(){
if(instancia == null){
instancia = new Manejador();
}
return instancia;
}
0
comentarios
viernes, 9 de diciembre de 2011
Sistemas Distribuidos
Antes de pensar en los sistemas distribuidos, ya habia pensado en algo como el clustering.
Resulta que mientras mas datos se le agregan a la base de datos de los articulos o los usuarios, mas lento se vuelve el sistema. Esto es natural ya que el rendimiento no mejor al aumentar el estres y carga de las acciones.
La forma en la que aplicaria hacerlo distribuido seria mediante varios hosts que alojen las bases de datos, en cada host diferente una base de datos, de esta manera se pueden hacer las cargas de items mas rapidamente, pero conlleva a un problema de seguridad en cuanto a las transacciones, ya que seria un sistema concurrente que aceptaria peticiones de -compra-venta- lo que obliga a el sistema a verificar la cantidad de productos por cada ejecuccion y asi evitar que dos peticiones tomen el mismo archivo.
La idea esta asi:
Utilizar mi servidor como Nodo Maestro y principal y con ayuda de otros computadores conectados en LAN en mi casa lograr hacer un cluster estilo Beowulf.
Podria tener algo asi:
1- Un nodo para la base de datos de los clientes.
2- Un nodo para los articulos.
3- Un nodo puede tener todo el contenido web.
4- Un ultimo nodo tendria todo el contenido que opera las peticiones.
Suponiendo que un usuario desea iniciar sesion, el orden logico para esa tarea seria que al inicio el nodo maestro llamara el nodo 3 para desplegar los Jsp que son nuestra interfaz grafica, despues el cliente ingresaria sus datos y al darle al boton de ok! para ingresar, este evento llamaria el nodo 4 que contiene los Servlets para manipulacion de datos, en este caso se ejecutaria una accion de verificacion de datos en la base de datos de clientes, que se encuentra en el nodo 1, despues se llamaria al nodo 3 para escoger la pagina respuesta adecuada segun la operacion del servlet y se mandaria la informacion atravez del nodo maestro.
Actualemente tengo un servidor casero, espero proximamente terminar los ultimos detalles de mi sistema y ponerlo en la web para poder recolectar mas informacion sobre como hacerlo un sistema distribuido mas eficiente.
Patrones de Diseño
Al parecer un patron de diseño es el que mas destaca en mi proyecto, el MVC.
Comunmente se usa el MVC en casi cualquier proyecto para aumentar la reutilizacion de codigo, hacer mas facilmente mejoras y poder tener una amplia perspectiva del entorno del proyecto.
Resulta que en mi proyecto tengo inmiscuidos JSP, Servlets y Clases ¨comunes¨ de java.
Todo indica que mis JSP son mi vista, mis controladores son mis Servlets y las clases son mi modelo, por lo menos de esta manera lo visualizo.
Tambien tenia en mente la fachada como patron.
Asi tendria solo un servlet que controlara a los demas, aprovechando que los servlets se cargan solo 1 vez al ser llamados podria ahorrarme recursos y optimizar un poco el codigo si las bases de datos se llegasen a ampiliar mucho.
Eventos, Excepciones y errores
Para el taller.
Aqui explico como manejo los Eventos de mi proyecto : Enlace
Para los Errores, los mas comunes son en los servlets, ademas de implementar en algunas secciones el uso de NumberFormatException y SQLException, decidi crear una clase que mediante un metodo static manejara un error
En mi clase de validacion de usuarios tengo este metodo
public Boolean validaDatos(HttpServletResponse resp) throws IOException{
try{
pst = conn.prepareStatement("SELECT user,AES_DECRYPT(password,?) FROM cuentas WHERE user=? AND password=AES_ENCRYPT(?,?)");
pst.setString(1, bd.getEncryp());
pst.setString(2, usuario);
pst.setString(3, password);
pst.setString(4, bd.getEncryp());
rs = pst.executeQuery();
valida = (!rs.next()) ? true : false;
}catch(SQLException exe){
web.Error.despliegaError(resp,exe.getMessage());
}
return valida;
}
Si llegase a succeder una exepcion del tipo SQLException se manda a llamar el siguiente metodo.public static HttpServletResponse despliegaError(HttpServletResponse resp,String ex) throws IOException{
buffer = new StringBuffer();
buffer.append("\n");
buffer.append("\n");
buffer.append("Página de Error \n");
buffer.append("\n");
buffer.append("\n");
buffer.append("Lo sentimos aparecio una error inesperado
");
buffer.append(ex);
buffer.append("
");
buffer.append("");
buffer.append("\n");
buffer.append("");
resp.setContentType("text/html");
resp.setContentLength(buffer.length());
salida = new PrintWriter(resp.getOutputStream());
salida.println(buffer.toString());
salida.close();
return resp;
Eventos, excepciones y errores
Bien, los eventos de mi proyecto son basicamente acciones de que hacen forms o click de hipervinculos, esto se debe que mi proyecto esta basado en programacion del lado del servidor que no esta al pendiente de lo que sucede en el lado del cliente.
La principal forma de crear eventos es mediante el uso de hipervinculos en los distintos menus
En este caso al dar click en Log In, el Jsp que contiene el Log In es llamado.
Si estas por loggearte y utilizas el boton reiniciar, los parametros se borran y puedes volver a introducir datos, acepto que no es muy util, pero en la zona de registro donde reiniciar los datos con un click si es conveniente por la cantidad de inputs que son. En el caso de este Log In, manda llamar un Servlet que verifica los parametros que se le envian y determina si el usuario y password son correctos, despues redirecciona a la pagina principal.
Las Excepciones en su mayoria son del tipo ServletException, y SQLException donde las exepciones del Servlet pueden succeder en cualquier momento de la ejecuccion de un servlet y las exepciones de sql ocurren con las consultas.
En los servlets si llegase a ocurrir una exepcion de alguno de esos tipos se desplegara una pagina que informa esa exepcion en concreto, sin embargo si es alguna otra la exepciones se arrojan hasta el contenedor y tomcat las maneja desplegando su menu de exepciones.
Algo parecido a esto.





