jueves, 29 de junio de 2017

Java EE & Java Web Getting started con NetBeans


Siguiendo el learning trial de NetBeans, de su página netbeans.org, en doc & support, tenemos la parte que hace referencia a la tecnologia JavaEE. y seguimos los laboratorios introductorios. es de indicar que NetBeans ofrece facilidades en su IDE para desarrollar estas aplicaciones.

https://netbeans.org/kb/trails/java-ee.html

En este lab, se crea una simple web application, se deploya en el servidor, en este caso Glassfish, y se presenta el browser, utiliza JavaServer Pages, y un simple bean

https://netbeans.org/kb/docs/web/quickstart-webapps.html

  Aquí se describe de forma simple y concreta, las tecnologías de JavaEE integradas al ambiente de Netbeans, mostrando la idea de las facilidades que se ofrecen.
los temas son:
   - Annotations Instead of Deployment Descriptors
   - Simplified EJB software development
   - Use Dependency Injection to Access Resources
   - Java Persistence API model
   - Web Services
https://netbeans.org/kb/docs/javaee/javaee-intro.html

  Aquí se ilustra como hacer una aplicacion web que contiene un EJB stateless session bean facade para un entuty class. caben notar las facilidades que da el wizard para lograrlo.
https://netbeans.org/kb/docs/javaee/javaee-gettingstarted.html

  Aquí se realiza un ejemplo de uso de JavaServer Faces, en resumidas pasos se hace lo siguiente
  - Se crea un JSF managed bean para manejar el request data.
  - Se alambra el managed bean a las paginas web de la aplicación.
  - Se convierten las paginas web en archivos Facelets templates.
https://netbeans.org/kb/docs/web/jsf20-intro.html

  Aquí se hace un ejercicio de autocompletamiento de entrada de usuario en un campo, por medio de ajax, aprovechando las capacidades que da ajax para no refrescar toda la página para actualizar datos especificios en la página.
https://netbeans.org/kb/docs/web/ajax-quickstart.html

Bajar laboratorio de Github
https://github.com/jalbertomr/JavaEE-WebStarting.git

notas:
Estos ejercicios se realizaron en una laptop windows 10, al momento de arrancar el servidor web, mando un error de no poder arrancar el puerto 8080, esto es por que se tiene instalado mysql y/o oracle (en mi caso el listener oracle) que alguno de sus servicios tambien lo ocupa, se resuelve deteniendo los servicios de oravle o mysql desde Herramientas Administativas.

sábado, 3 de junio de 2017

NetBeans Windows System API

NetBeans plataform permite crear una aplicación que tenga la funcionalidad de manejo de ventanas
usando el Windows System API.



 Esta API proveé un docking framework con manejo lógico de ventanas (dock, maximize, ext) fuera de la ventana.

API classes:
-          Top Component class
-          WindowManager class
-          Mode class
-          TopComponentGroup class

algunos conceptos:
  Logical window handling : maximize, minimize, open ,close, move into diferent positions
  Diferentes tipos de ventanas, con diferente comportamiento ej. view windows, editor window
  Windows -> reset windows
 


Creamos una aplicación a partir del templete y observemos su comportamiento.

New Project -> NetBeans Modules -> NetBeans Platform Application
Project Name: simpleWindowsSystemAPI

En el projecto creado DemoApp1, nodo Modules click derecho -> Project Properties -> Libraries
-> Platform 9
vemos una larga lista de módulos entre ellos el Windows System API que utilizará la aplicación



y se ejecuta la aplicación, mostrará una ventana prefabricada gracias al template


si modificamos el tamaño y la cerramos, al volverla a abrir, este tamaño es persistido.




Existe otra forma de crear una aplicación, esto es usando un script groovy el cual tiene en su código todas las características que queramos tenga nuestra aplicación, así podemos modificar el script a medida.

New Project -> Groovy -> NB Project Generators
Project Name: NBProjectGenerators1






el projecto tendrá dos archivos groovy, seleccionamos NetBeansPlatform.groovy y lo abrimos en la ventana de edición, damos en el menú principal run -> run file, y en la ventana de salida nos dira donde generó el projecto.

Generating project NewApplication-1506470328845 in folder C:\Users\Bext/NewApplication-1506470328845
Done.
BUILD SUCCESSFUL (total time: 2 seconds)


Ahora abrimos la ventana Favorites, para ubicar el subdirectorio de la aplicación recien creada por el script groovy, nos posicionamos en el folder y lo abrimos como projecto.


Nos vamos a la ventana Projects, buscamos el projecto que acabamos de crear con groovy y lo corremos (run). la aplicación esta pesada pues incluye muchos modulos, además tiene más que los que teniamos con el método anterior. En esta podemos ver que tiene integrado el módulo de plugins



Ahora como podemos agregar nuevos componentes a la aplicación, bueno, creamos una nuevo modulo en un projecto NetBeans Platform Applicación, que en este caso tendrá el nombre DemoApp1, y el nuevo modulo DemoModule. le ponemos al code base del DemoModule:
org.netbeans.demo.demomodule, al DemoModule le creamos una nueva ventana

En la ventana New Window elegimos window position: explorer y open on application start, y en Name,Icon and Location le colocamos "Demo" en name class Prefix.


Y se deploya el modulo dentro de la aplicación que está corriendo.
DemoModule click derecho -> Reload in Target Platform
abrimos en el editor el archivos DemoTopComponent.java y lo editamos gráficamente agregando
un label y un textfield, y la volvemos a deloyar para que la aplicación tome el cambio.


Al ejecutar la aplicación vemos estos cambios en acción.


Estas son las dependencias de modulos del DemoModule para que corra.


el componente que creamos viene te TopComponent del paquete org.openide.windows
el cual nos permite hacer override de metodos como componentOpened(), componentClosed(),
componentHidden() etc..., los métodos requestActive(), requestFocus(), requestFocusInWindow(), request.... etc son llamados antes que el compenente se a haga visible en la ventana.

  Al correr la aplicación y mover las ventanas estas son persistidas, esto es cerramos la aplicación y al volverla a abrir mantiene el último formato de ventanas. Los datos de los campos pueden ser persistidos por el método de la Serializacion en la clase ResolvableHelper.

En el webinario funciona el código, pero en el laboratorio no, el método writeReplace() no es llamado en ningún momento y por ende la clase serializable tampoco.

@Override
    protected Object writeReplace() throws ObjectStreamException {
        System.out.println("*************Estoy en writeReplace*******");
        ResolvableHelper rh;
        rh = new ResolvableHelper(jTextField1.getText());
        return rh;       
        //return new ResolvableHelper(jTextField1.getText());
    }

    @Override
    protected String preferredID() {
        return PREFERRED_ID; //To change body of generated methods, choose Tools | Templates.
    }
   
    final static class ResolvableHelper implements Serializable {
        private static final long serialVersionID = 1L;
        private String text;

        private ResolvableHelper(String text) {
            System.out.println("ResolvableHelper on ACTION");
            this.text = text;
        }
        public Object readResolve() {
            System.out.println("readResolve on ACTION");
            DemoTopComponent tc = DemoTopComponent.getDefault();
            tc.jTextField1.setText(text);
            return tc;
        }
    }



Hay Diferentes formas en que se pueden customizar las ventanas de Windows System
Properties en los Windows systems para controlar los comportamientos como open, close, hide, minimize, maximize etc.

Esto en las propiedades del projecto -> Build -> Windows system
o por script, podemos deshabilitar la ventana splash de inicio agregando al archivo
Projecto -> Important Files -> Project Properties ->
La siguiente línea:  run.args.extra=--nosplash

Especificar la posición de la ventana, estas posiciones son llamadas “modes”
Editor mode
Explorer
Se puede crear un nuevo mode, pero por que haríamos algo así? Los modes están definidos en archivos xml. Estos datos son guardados en el directorio de aplicaciones del usuario. 
1.- Se habilita el drag&drop en Project Properties -> Build -> Windows System
2.- Se corre la aplicación
3.- Se mueve la ventana a un nuevo mode
4.- Ver los archivos xml generados en Vista Files DemoApp1 -> build -> testuserdir -> config
-> Windows2Local -> Modes
5.- y se agregan los archivos XML al modulo propio.
Se copia folder anonymousMode_1 a Vista Projects -> DemoModule -> Important Files -> XML layer -> Windows2 -> Modes 
Tambien el archivo anonymousMode_1.wsmode en
Vista Projects -> DemoModule -> SourcePackages -> org.netbeans.demo.demomodule
se actualiza el nombre en el archivo layer.xml de <forder name="anonymousMode_1"> a <forder name="banner"> 
se actualiza el nombre del archivo anonymousMode_1.wsmode a banner.wsmode, 
se abre este archivo para tambien actualizar su nombre a banner en <name unique="banner">
Se corta este archivo banner.wsmode para pegarlo a
Vista Projects -> DemoModule -> Important Files -> XML layer -> Windows2 -> Modes
6.- Clean al projecto, para remover todos los ajustes salvados, y se corre la aplicación. para ver el nuevo modo en acción.
7.- Se reajusta la ventana y se verá que aún mantiene el nuevo modo.
8.- y Se observa el nuevo modo llamado Banner en
Vista Files DemoApp1 -> build -> testuserdir -> config-> Windows2Local -> Modes


El siguiente punto es Top Component Groups

Top Component Groups son componentes que tiene algún tipo de relación entre ellos. esto es utuilzado por el Windows system para determinar el comportamiento de las ventanas que acompañan a los componentes al abrir o cerrar estos elementos. considerando que al ser del mismo grupo, el comportamiento será similar para otro componente que sea del mismo grupo. Esto es llamado Comportamiento de Grupo. Así cuando hay varias ventanas abiertas en la aplicación algunas estarán relacionadas en tareas especificas, abriendoce y cerrandoce juntas.

WindowManager Class

Es la clase que controla la interface de usuario. La mayoria de las veces se utiliza para hacer referencia a la ventana principal para obtener alguna propiedad como podría ser el nombre del título.
una vez que se tiene la referencia del main window se puede asociar a un JFrame cambiar su forma o hacer que vibre.

El código en github
https://github.com/jalbertomr/simpleLookupAPI.git


Referencias:
    NetBeans Top 10 APIs, Geertjan