miércoles, 16 de marzo de 2022

Estructura de la Firma de variables y Metodos en Java


Variables

Declaración

<Modif>  <Modif de Acceso> <Tipo> <ID>;

public int myVar;


Instanciación

<ID> = <Valor>;

myVar=0;


Declaración + Instanciación

<Modif>  <Modif de Acceso> <Tipo> <ID> = <Valor>;

public int myVar=0;


Metodo

<Modif> <Modif de Acceso>  <Tipo de retorno> <ID>( <parametro>0..*){ <cuerpo> }


public void myMethod( ){ }

public static void main(String[] args){}

private final Integer sumar(int a, int b, int c){ 

    return a+b+c;

}

domingo, 20 de mayo de 2012

Arquitectura sencilla Java Web

 

Acá les dejo un diagrama genérico de las tecnologías que son mas comunes para mi y que he visto que se usan en arquitecturas para desarrollo de Java Web, de Java EE puedes encontrar mucho en internet, pero este tipo de diagramas no son muy comunes de echo busque mucho y no lo encontré ahora que lo voy a usar lo subo para que este en la web y puedan checarlos, en caso de que tengan algún comentario, alguna pregunta o alguna corrección o que les parezca que el diagrama puede crecer solo coméntenlo ya sea por los comentarios o mandando mail y con gusto lo vemos o aclaramos dudas, espero les sea de mucha utilidad.

Mas adelante intento explicar lo más resumido posible las funciones de las capas y las tecnologías como un extra ya que puedes encontrar su definición fácilmente en la web.

[Espero que se sobreentienda que los globos son descriptivos y los post-it son comentarios].

Modelo de Arquitectura Java Web

 

Toda la arquitectura basada en la arquitectura MVC [Modelo-Vista-Controlador] y el punto en el que entran otras tecnologías como Hibernate y Spring.

La Vista[View] en la que regularmente [dependiendo del framework que se implemente] se usan Java Server Pages [JSP] vendría siendo la interfaz con el usuario.

 

Plataforma basica de vista Java Web

así es como se manejarían regularmente las plataformas sobre las que trabajaría el modelo de Java Web, aprovecho para resaltar que la Base de Datos se encuentra en un servidor diferente al resto del modelo [en el modelo anterior].

 

El Controlador[Controller] tiene la única función básica de redirigir las llamadas de la vista [prácticamente lo que solicita el usuario] al servicio correspondiente y entregar la respuesta correcta según la ejecución del proceso del servicio [el termino de servicio se explica mas adelante]; como comentario en Spring los controladores son representados por Servlets que son clases java, aunque me comentan que en Struts los Actions no son considerados como Controlador y que probablemente serían los archivos de configuración XML los que llevarían esa función, independientemente de eso el principio debe ser el mismo, de funcionar como mediador entre la vista y el modelo[o servicios el caso].

 

El Modelo[Model] es el que guarda la abstracción de objetos reales como objetos de POO, aquí es donde se implementa toda la lógica de negocio representada con Entidades[Entity] o POJO [o piojos como les llama mi hermano XD] esto representa la base de la POO y la cual regularmente no se implementa! ya que este tipo de abstracción se realiza muy comúnmente en la Base de Datos y posteriormente por medio de las tecnologías como Hibernate se hace el mapeo automático de la Base de Datos a las Entidades Java[más adelante se explica a fondo esto] esto implicaría que si has dedicado mucho esfuerzo en POO y la abstracción de objetos reales en clases Java no te sea muy útil ese conocimiento  (u.u*).

La capa de Servicio[Service] aunque no corresponde al patrón MVC regularmente se implementa como un gestor de procesos, digamos que en el escenario típico de Universidad-Maestro-Alumno-Materia, nosotros tenemos mapeados nuestros POJO’s  en el modelo, y un proceso de la aplicación es que el alumno cambio de materia, el servicio es el que se encargaría de esto ya que se encarga de los procesos, en este caso sería un proceso el que se encargaría de tomar el alumno eliminar la materia que tiene asignada y asignarle la nueva así como sus implicaciones como cambiar de maestro, etc. Uno de los puntos claves de los servicios y por lo cual lo puedes identificar fácilmente es por tener la capacidad de manejar varios POJO’s o entidades dentro de un mismo proceso, en este ejemplo el servicio manejaría al alumno y 2 materias diferentes pero el proceso de persistencia a la Base de Datos de los cambios realizados se lo cede a la capa de DAO.

 

La capa de DAO[Data Access Object] como ya se comento se encarga de la persistencia de las entidades a la Base de Datos, puedes ubicarlos por 2 funciones principales. La primera se encarga de las operaciones CRUD[Create,Read,Update,Delete] de las entidades es decir: Altas, Consultas, Cambios y Bajas [ABC]. Y la segunda característica es que por best practice 1 DAO solo se encarga de las funciones CRUD de 1 Sola Entidad o POJO, en la practica se ve muy comúnmente mapeada la entidad de Alumno.java con su DAO AlumnoDAO.java y Maestro.java con su DAO MaestroDAO.java, etc.

 

La IoC[Inversion de Control] me pareció un punto importante por eso lo indico en el diagrama, regularmente se implementa con el framework Spring Core o JSF que son los únicos que conozco que implementan este patrón, el patrón básicamente funciona a base de Singletons y tiene como objetivo ahorrar recursos del servidor además de otros, el patrón de Singleton lo puedes consultar en la Web pero su objetivo básico es que solo exista una instancia de una clase a lo largo de toda la aplicación; en general el objetivo del patrón IoC busca que cada clase que se genere dentro de cada capa de la aplicación [todas las que hemos mencionado] que maneje clases Java [en el modelo indicado por el recuadro de nombre java] solo se instancie 1 sola vez a lo largo del ciclo de vida de la aplicación y en la practica se identifica muy claramente con la ausencia de llamadas al constructor de estas clases, es decir en código nunca mandaras llamar un <code> new AlumnoDAO();</code> si no que el framework inyectará la dependencia por ti para que solo hagas uso de ella sin tener que llamar a su constructor.

 

Lo que indico en el diagrama como Java-HTML Converter y Java-JavaScript Converter [aclaro que es un nombre arbitrario que les di para indicar su función] sirven básicamente para lo mismo, transferir información de la vista al controlador y viceversa ya que regularmente en la vista no se maneja código java [aunque sea posible por los JSP] sino que mediante tags HTML o llamadas a funciones JS[JavaScript] se intercambia información entre la vista y el controlador que sí es código java pudiendo transferir desde datos primitivos como tipos de Dato Objeto. No confundamos la tecnología MVC[que es el único nombre con el que la he oído, por eso le llamo así] con el patrón MVC, la tecnología MVC sirve para la comunicación entre vista y controlador y el patrón MVC es básicamente el núcleo del post. La diferencia entre la tecnología MVC e implementar AJAX, es que mediante la tecnología MVC solo puedes acceder al intercambio de información mediante GET o POST para lo cual siempre se necesita refrescar la pagina del explorador de internet del cliente, mientras que mediante AJAX puedes realizar el intercambio de información mediante JS [asíncronamente]  con las desventajas que también implica hacerlo por JS.

 

Lo que nombro como Java-SQL Tables Converter es en realidad una tecnología llamada ORM[Object Relationship Maping] cuya función principal es mapear de la siguiente forma las entidades de Bases de Datos a Entidades Java. Espero que el diagrama se explique por sí mismo, la idea es que el ORM mapea cada tabla de la Base de Datos como clases y los campos de cada tabla como atributos de cada clase, de tal manera que cada fila o registro de la Base de Datos representa un Objeto en java!

ORM

Acá un ejemplo mas complejo para que analices las relaciones de las tablas mapeadas a clases. En realidad las clases son Java Beans por eso se mapean con sus getters y setters.

Diagrama Entidad RelaciónDiagrama de Entidades

 

Bueno espero que el post les sea de utilidad a muchos, si es así comenten o compartan o den like o lo que gusten ^^ hasta pronto.




viernes, 20 de enero de 2012

JavaMail

Java MailSender - JavaHelp

 

Nunca has intentado enviar un mail en java? … seguramente no u.u …  bueno, pero si lo haces... aquí una librería que desarrolle para Java 7 para que solo con una línea puedas enviar un mail desde java desde algún servidor publico en internet o algún servidor privado que tengas, y lo único que tienes que hacer es configurar un archivo de propiedades.

mail.from=java.obed@gmail.com
mail.from.user=java.obed@gmail.com
mail.from.pass=password
mail.smtp.host=smtp.gmail.com
mail.smtp.starttls.enable=true
mail.smtp.port=587
mail.smtp.user=java.obed@gmail.com
mail.smtp.auth=true

La librería incluye 1 JAR y un archivo de propiedades, el archivo de propiedades debe tener el nombre de: mail.properties y puede estar en el mismo directorio que la librería o dentro del directorio raíz de tu proyecto.

Solo debes utilizar el método

MailSender.sendMail()
como se muestra en el video para enviar tu mail.

 

 

 

En el video se muestra que agrego 2 librerías pero no es necesario ya que la librería MailSender ya incluye JavaMail[mail.jar] esta segunda es la librería oficial de Java [la cual la puedes encontrar en Oracle JavaMail 1.4] y nuestra librería lo único que hace es una fachada leyendo del archivo de propiedades las propiedades para hacer la conexión y tomando de la llamada del método:

  • El cuerpo del mail
  • El Asunto del mail
  • Los destinatarios
  •  

    Además de la librería en el video-tutorial se muestra:

  • Como configurar un proyecto en Eclipse
  • Como configurar una librería personalizada en eclipse
  • Como configurar el JRE en eclipse y como ejecutar una aplicación de escritorio
  • Para descargar la Librería da click en la imagen XD


    martes, 16 de agosto de 2011

    Microsoft Project

    Una tecnología Mocrosoft tenia que salir
    Como me cortaron el internet decidí aprovechar y hacer el tutorial de MS Project. Project se utiliza mucho para dar seguimiento a los proyectos, no solo de desarrollo, de hecho cuando conocí Project no tenía nada que ver con desarrollo y nunca pensé que se utilizara en mi carrera.
    Bueno para ir al grano Project se utiliza para crear estimados de proyectos y llevar su seguimiento además de otras muchas funcionalidades como crear estadísticas, asignar recursos, calcular costos y más.
    Aquí les dejo un FAIL de un compañero al que le encargaron realizar una planeación para su proyecto. Descargar para Project 2010 [Recuerda que Project no viene con la paquetería de Office por default tienes que instalar el software individualmente].

    Como pueden ver en el documento solo pone una lista claramente de lo que sabía que tenía que hacer. El punto aquí es que Project también sirve para asignar tiempo a cada tarea y una fecha de inicio y algunas restricciones como no iniciar antes de tal fecha, o no terminar antes de iniciar tal tarea, etc. Así que me di a la tarea de organizar un poco el documento, [descargar aquí] obviamente este documento nunca se usó [cualquier parecido con la realidad es pura coincidencia], solo es para ejemplificar como debería quedar el proyecto; digamos, un antes y después.
    Les aconsejo que según se va avanzando en el proyecto, mientras se aproxime el tiempo en el que se realicen las tareas que van a iniciar se especifique cada una; se deben definir las sub-tareas de las mismas, asignarles tiempos a las sub-tareas y replantear los tiempos de las tareas generales generando Líneas Base. Si toca el tiempo de empezar otra fase deberían dedicar un tiempo para especificar esas sub-tareas.
    Entre más especifica sea una estimación personalmente creo que será mas acertada. No se olviden de planear riesgos y recuerden cuando oigan la frase: "que podemos hacer para mitigar el retraso que lleva el proyecto?" = "cuanto tiempo extra vas a invertir?"
    Aca les dejo los videos con el tutorial en Youtube le ha ido bien en youtube, espero que a ustedes también les sirva.
    Una gran disculpa por los clics, nimodo que volviera a hacer todo el tuto, ya que...
    Cualquier duda o comentario, no duden en expresarlo, pronto los estaré visitando, Saludos.

    miércoles, 6 de julio de 2011

    Tips JavaScript

    El Verdadero Javascript
    autocargado

    Quiero darles unos tips muy comunes que me parece que volveré a utilizar sobre JavaScript y podrían serles útiles a ustedes también. Para los que no tienen mucha relación con este lenguaje [deberían =P], no es Java sino que está basado [o inspirado en] Java, por así decirlo, pero en realidad es un lenguaje web de lado de cliente y al ser Script no es tan estructurado como Java [todo esto en mis palabras y opinión].

    • 1) JQuery
    Para los que no saben que es JQuery es LA librería JS [JavaScript] con ésta puedes realizar múltiples efectos y manipulaciones de elementos HTML y varias cosas interesantes.
    Dejo el siguiente bloque de código con el cuál importarás a tu sitio la última versión de JQuery

    <!--JQUERY-->
    <script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>
    

    Para darte un ejemplo, con esta librería le di el efecto de ocultar/Mostrar a las entradas de la página de bienvenida

    • 2) Imagenes redimensionables
    Hace poco estuve trabajando con una imagen de fondo y me dio muchos problemas, lo que intentaba hacer era que la imagen de fondo de mi página no cambiara de ninguna forma si el usuario cambiaba la resolución [Ctrl+Rodillo es la más sencilla] la primera y más fácil solución fue la siguiente:

    body2{
     background-image:url("/URL/miFondo.jpg");
     background-repeat:no-repeat;
     background-position:center center;
     background-attachment:fixed;
     -o-background-size: 100% 100%, auto;
     -moz-background-size: 100% 100%, auto;
     -webkit-background-size: 100% 100%, auto;
     background-size: 100% 100%, auto; 
    }
    

    La verdad no hay mucha información sobre esto en internet [¬¬ Google? u.u] y en parte por eso lo publico. El problema con esta solución tan simple es que funciona en todos los exploradores menos en uno, adivinen cuál? así que tuve que seguir buscando una solución para la versión 8 de IE [Probablemente esto si funcione para la 9], y me encontré con lo siguiente.

    .imgFull{
     
     background-repeat:no-repeat;
     background-position:center center;
     -o-background-size: 100% 100%, auto;
     -moz-background-size: 100% 100%, auto;
     -webkit-background-size: 100% 100%, auto;
     background-size: 100% 100%, auto;
     
     min-width:100%;
     min-height:100%;
     
     width: 100%;
     height: 100%;
     position: absolute;
      left: 0%;
      top: 0%;
     
    }
    

    Como se darán cuenta esto no tiene Fondo, así que por fuerza se tendría que ser un <img> el elemento y toda esta implementación forzaría a que el resto de la información se manejara con posiciones absolutas me parece, así que no encontré una solución óptima para este problema, la ventaja fue que solo incluí 2 paneles y el otro simplemente lo puse de la siguiente forma, la cual lo deja perpetuamente centrado:

    .imgCentrada{
     
     /*background: url("/URL/centrada.png");*/
     background-repeat:no-repeat;
     background-position:center center;
     -o-background-size: 100% 100%, auto;
     -moz-background-size: 100% 100%, auto;
     -webkit-background-size: 100% 100%, auto;
     background-size: 100% 100%, auto;
     
     min-width:50%;
     min-height:75%;
     
     width: 53.5%;
     height: 80%;
     position: absolute;
      left: 22.75%;
      top: 7.5%;    
    }
    

    • 3) Input Transparente
    Quizás este tip no sea tan útil, pero igual lo pongo es una forma muy sencilla de desaparecer un input y aún así el usuario pueda escribir en él, sé que no hay muchos casos en los que sea necesario ya que hay campos password etc. pero igual lo dejo en CSS:

    .transparente{
        font-size: 1em; 
        color: transparent; /* Fix for FF */ 
        border-style: none; 
        border-width: 0; 
        padding: 0 0 0 16px !important; /* Fix for IE */ 
        text-align: left; 
        width: 0px; 
        height: 0px; 
        line-height: 0 !important; 
        /*background: transparent url(images/button.gif) no-repeat scroll 0 0;*/ 
        overflow: hidden; 
        cursor: pointer; 
    }
    

    • 4) Google Code Prettify
    Si en alguna ocasión necesitan hacer esto de pintar el código en web y poner las líneas de código etc. Google tiene una librería que lo hace y es muy simple descargas de acá la librería e implementarlo de la siguiente manera:

    <!--SCRIPTS PARA CODE BEUTIFER DE GOOGLE-->
    <link href="http://javahelp.redsaltillo.net/css/prettify.css" type="text/css" rel="stylesheet" />
    <script type="text/javascript" src="google-code-prettify/src/prettify.js"></script>
    
    <pre class="prettyprint linenums">
        Public class MiClasePrincipal extends Asterisk {}
        Public class MiEstado extends Estado {}
        
    </pre>
    
    

    Obviamente puedes modificar el css que trae la librería para que se adecue a tus necesidades [De cualquier manera allí viene el manual].
    Acá pongo a tu disposición un demo y la librería.
    Una cosa que puedes hacer es unir esto con JQuery de la siguiente manera, así no tendrías que estar poniendo la clase a cada bloque de 'pre':

    <!--SCRIPTS PARA CODE BEUTIFER DE GOOGLE-->
    <link href="http://javahelp.redsaltillo.net/css/prettify.css" type="text/css" rel="stylesheet" />
    
    <script type="text/javascript">
    $(document).ready(function() {
    
        // agrega clase prettyprint a todos los bloques // (tambien podemos agregar <code>)
        var prettify = false;
        $("pre").each(function() {
            $(this).addClass('prettyprint linenums');
            prettify = true;
        });
    
        // si se encontro bloques de código se llama la función prettyPrint
        if ( prettify ) {
            $.getScript("google-code-prettify/src/prettify.js", function() { prettyPrint() });
        }
    });
    </script>
    

    • 5) Acentos en JavaScript
    Hay veces que tenemos que hacer un document.write() desde JS pero a la hora de sacar acentos se chisquea, acá los códigos de los caracteres.

    \u00e1 -> á
    \u00e9 -> é
    \u00ed -> í
    \u00f3 -> ó
    \u00fa -> ú

    \u00c1 -> Á
    \u00c9 -> É
    \u00cd -> Í
    \u00d3 -> Ó
    \u00da -> Ú

    \u00f1 -> ñ
    \u00d1 -> Ñ

    sábado, 18 de junio de 2011

    NetBeans Look And Feel - JUnit Practico - Librería ListMap

    Bien pues aquí les dejo un video-tutorial con material sobre 3 puntos.
    Espero no les parezca demasiado molesto que haya aprovechado el video para tratar estos 3 puntos de golpe.

    1) NetBeans Look And Feel.

    Esto de Look and Feel para los que no saben es a grandes rasgos un "como se ve" una aplicación hablando de la Interfaz Gráfica de Usuario (GUI). En Java puedes aplicar un lookAndFeel distinto al que trae por default el cual es el del Sistema Operativo en el que corre la aplicación pero el cambiar este LAF en tiempo real me resulto bastante difícil en lo personal. Con "tiempo real" me refiero a cuando la aplicación esta ya corriendo y se desea cambiar la forma en como están diseñadas las ventanas etc.


    Si te interesa en la sección de Descargas puedes encontrar una librería para implementar este tipo de L&F en tus aplicaciones.
    Bueno, teniendo esto en mente se puede modificar el L&F de una aplicación Java y ya que NetBeans es una aplicación Java (¬¬), debería poder modificarse, había perdido mucho tiempo buscando sobre esto, hasta hace poco que lo encontré. Les dejo la info en el video.


    2) JUnit Práctico

    Dejo también un tutorial bastante practico sobre JUnit, como ya lo comente en otro tutorial JUnit es una herramienta que te auxilia en las pruebas básicas o pruebas unitarias, o de caja blanca o como les quieras llamar. Básicamente es código que prueba más código, y al hacer esto automatizas tus pruebas y en caso de que posteriormente se haga una modificación al proyecto te podrás dar cuenta muy fácimente de los impactos que tuvo la modificación a un módulo respecto de otros.

    Espero haberme explicado, de cualquier manera no te servirá si no haces una prueba con algún proyecto que estés desarrollando actualmente.

    3) ListMap

    ListMap es el nombre de una librería que desarrolle sintiéndome atado con el API de Java que no me dejaba hacer muchas cosas, para esto les recomiendo que le den una leída a los javadocs de la interfaz java.util.Map para que vean el funcionamiento que tiene y vean más o menos para que les servirían esta interfaz y sus implementaciones.

    Una de las cosas que no tiene la clase HashMap por ejemplo es un método para obtener todas las llaves o todas los valores lo cual es necesario en ciertos casos, cosa que se incluyó en esta librería.

    Dejo aquí la tabla que aparece en el video explicando el core del funcionamiento de la Librería, la librería se las dejo en descargas o dando click aquí directamente.




    Keys Values
    Key1 1 Value from key1
    2 Value from key1
    3 Value from key1
    Key2 1 Value from Key2
    2 Value from Key2
    3 Value from Key2
    4 Value from Key2
    5 Value from Key2
    Key3 1 Value from Key3
    2 Value from Key3
    Key4 1 Value from Key4





    Una Gran disculpa por que últimamente me están saliendo los videos con el audio disminuido a la hora de subirlos a YouTube.













    Visita el home de la pagina y comenta