Česky   |  Deutsch   |  English   |  Español   |  Français   |  Indonesia   |  日本語   |  한글   |  Polski   |  Português (BR)   |  Türkçe   |  中文   |  正體中文   |  Tu idioma  
PlanetNetbeans
Planet NetBeans es un rama de NetBeans relacionado con toda la Blogosphere.
Feeds
[RSS 1.0 Feed] [RSS 2.0 Feed]
[FOAF Subscriptions] [OPML Subscriptions]
¿Tienes un blog acerca de NetBeans? Agrega tu blog a PlanetNetBeans.
Feed Subscripciones

Powered by:    Planet

Última actualización:
November 27, 2014 09:01 AM
All times are UTC

Sponsored by
sponsored by Oracle

visit NetBeans website
AVBravo - November 27, 2014 02:25 AM
Libro JEE7 descargas capitulos en pdf

Para descarga de los capitulos del libro en formato pdf  puedes entrar a la siguiente dirección
https://www.dropbox.com/sh/yzivtufjce1h57g/AAAJzegPVBxFtiqzEOlIAdsoa?dl=0

AVBravo - November 26, 2014 04:48 PM
Libro JEE7 Capítulo 2. Crear aplicación Web

Capítulo 2. Crear  aplicación Web
Modelo General
Desarrollo de una aplicacion Web
Dependencias Maven
Usando el Asistente Maven del IDE
Editar el archivo pom.xml
MODELO DESARROLLO
JPA
Proceder a Crear los Entity con NetBeans
Creación de los EJB
CDI vs ManagedBeans
CREAR UN CDI PARA EL MANEJO DE MENSAJES
Código completo del CDI JSFUtil.java
FACELETS
CREAR PLANTILLA FACELETS CON <p:layout> de PRIMEFACES
Código completo de template.xhtml
Editar template.xhtml
Crear la página Index.xhtml
CREAR CDI BEANS ESTATUSCONTROLLER.java
Crear los Facelets Template Client para insertar Estatus
Editar el entity Estatus.java
Editar EstatusFacade.java
Convertidores

Crear EstatusConverter.java

















Modelo General





Desarrollo de una aplicacion Web

Este capítulo  muestra el desarrollo de la aplicación de ejemplo de Scrum usando tecnologías JEE 7. Esta aplicación  permitirá insertar registros en una tabla utilizando JPA, primefaces / JavaServer Faces, EJB, CDI.


Para ello utilizamos:
  • NetBeans IDE 8.0.1
  • Maven (como parte del IDE)
  • GlassFish 4.1
  • Base de datos MySQL

1. Crear un proyecto Maven → Web Application desde NetBeans:




2. Indicar Project Name: scrumweb
Group id: com.avbravo (Es el grupo de proyectos al que pertenece nuestro proyecto)

En Settings, seleccionamos GlassFish Server 4.1. y en Java EE Version 7
add.png


El IDE genera la estructura del proyecto:


Ahora, vamos a seleccionar Projects → Properties → Configurations → Configurations: <default config> y presionar el botón Activate.




Hacemos clic en la categoría Frameworks


Hacer clic  el botón Add, y luego seleccionar JavaServer Faces

En la pestaña Configuration verificar que esté seleccionado la opción Facelets en la opción Preferred Language:


y en la pestaña Components seleccionamos Primefaces


Dependencias Maven

Maven consta de repositorios donde se encuentran las dependencias (bibliotecas .jar) necesarias para ejecutar nuestros proyectos. La ventaja que ofrece es que no es necesario descargar  manualmente estas dependencias. Simplemente Maven se encarga de buscarlas y en los repositorios y nos permite agregarlas facilmente. Si una biblioteca depende de otra, Maven se encargará agregar estas dependencias a nuestro proyecto.


Para nuestra aplicación web utilizaremos las siguientes dependencias:
  • primefaces all-themes
  • mysql
  • primefaces  
  • itext
  • jasperreports
  • jfreechart


NetBeans nos ofrece dos alternativas para realizarlo: la primera mediante el asistente y la segunda editando el archivo pom.xml  que encontramos en Project Files.


Usando el Asistente Maven del IDE



Usaremos la alternativa del asistente del IDE. Para ello, en el nodo  “Dependencies” hacer clic derecho y seleccionar Add Dependency...


En el diálogo Add Dependency  escribiremos en el campo Query la dependencia a buscar y presionamos la tecla Intro. En ese momento se mostrará un listado con las dependencias locales y remotas y seleccionamos la que deseamos de la lista.
  • Para primefaces all-themes (Permite manejar los temas de primefaces)


  • Dependencia mysql-connector-java (Para manejar la comunicación con mysql)


  • Actualizamos la versión de primefaces a 5.1 (Última versión de primefaces community al momento de escribir este libro)
51.png



  • Dependencia itext (Utilizado para reportes)


  • Dependencia jasperreports (Utilizado para reportes)






  • Dependencia jfreechart (Generación de gráficas)


Editar el archivo pom.xml

La segunda alternativa es editar el archivo pom.xml ubicado en Project Files


Podemos escribir directamente la dependencia, o dar clic derecho Insert Code→ Dependency.
Mostrará el diálogo para buscar dependencias.


En el archivo pom.xml ingresamos directamente la dependencia indicando el groupId(generalmente es la organización o empresa que desarrolla), artifactId (nombre del jar), versión (número de versión )


<dependencies>
       <dependency>
           <groupId>org.primefaces</groupId>
           <artifactId>primefaces</artifactId>
           <version>5.1</version>
       </dependency>
       <dependency>
           <groupId>commons-fileupload</groupId>
           <artifactId>commons-fileupload</artifactId>
           <version>1.3</version>
       </dependency>
       <dependency>
           <groupId>org.primefaces.extensions</groupId>
           <artifactId>all-themes</artifactId>
           <version>1.0.8</version>
       </dependency>
       <dependency>
           <groupId>mysql</groupId>
           <artifactId>mysql-connector-java</artifactId>
           <version>5.1.26</version>
       </dependency>
       <dependency>
           <groupId>com.lowagie</groupId>
           <artifactId>itext</artifactId>
           <version>2.1.7</version>
       </dependency>
       <dependency>
           <groupId>net.sf.jasperreports</groupId>
           <artifactId>jasperreports</artifactId>
           <version>5.2.0</version>
       </dependency>
       <dependency>
           <groupId>jfree</groupId>
           <artifactId>jfreechart</artifactId>
           <version>1.0.13</version>
       </dependency>
       <dependency>
           <groupId>javax</groupId>
           <artifactId>javaee-web-api</artifactId>
           <version>7.0</version>
           <scope>provided</scope>
       </dependency>
   </dependencies>


y en repositories agregar
<repositories>
       <repository>
           <url>http://repository.primefaces.org/</url>
           <id>PrimeFaces-maven-lib</id>
           <layout>default</layout>
           <name>Repository for library PrimeFaces-maven-lib</name>
       </repository>

Al terminar de agregar las dependencias, hacer clic derecho sobre el ícono del proyecto, y seleccionamos “Build with  Dependencies” para descargar las dependencias del proyecto Maven.




Se observa un listado de dependencias
d.png













MODELO DESARROLLO

  • Java Server Faces ofrece un mecanismo sencillo para el desarrollo de interfaces de usuario web, el modelo será dividido en tres capas (Capa Web, Capa Negocio, Capa de Datos),








Para poder manejar la base de datos MySQL desde NetBeans  IDE, se agrega la base de datos desde la pestaña Services→ Databases→ Drivers→ MySQL




Indicar el nombre de la base de datos el usuario y password, y presionar el botón Test Connection, para comprobar que la conexión a la base de datos sea exitosa.




NetBeans IDE nos ofrece un potente editor de consultas y operaciones sobre la base de datos.




Nota: Desde este panel podemos conectarnos a cualquier base de datos, de cualquier tipo, siempre y cuando contemos con el controlador JDBC.


JPA

EL ORM(Object Relational Mapping), predeterminado en JEE7 es JPA, que ofrece un mecanismo sencillo de manejo de registros de las tablas y su equivalente en clases en Java. Generalmente POJOs(Plain Old Java  Object), que se denominan Entity, ya que a diferencia de un objeto Java tradicional, el Entity permite que el valor de sus atributos sea almacenado permanentemente en la base de datos.


Los Entity ofrecen una serie de atributos y anotaciones que facilitan el manejo de los mismos, aprovechando las ventajas de la plataforma Java EE7.


Proceder a Crear los Entity con NetBeans

  • Desde menú File, seleccione New
  • en Categories, seleccione Persistence
  • en File Types, seleccione Entity Classes from DataBase



Luego, si no existe el jdbc/scrumweb procedemos a crear el Data Source para nuestra aplicación, para ello seleccionaremos New Data Source...
Seguidamente, indicamos el  nombre JNDI que vamos a utilizar. En nuestro caso, usaremos: jdbc/scrumweb


De ahora en adelante, cada vez que queramos referirnos a la base de datos, lo haremos usando JNDI. Seleccionamos Data Source el nombre JNDI que deseamos crear jdbc/scrumweb


Continuamos con el asistente, y cuando nos pregunte que tablas vamos a importar(Available Tables):


Y como queremos importar todas las tablas, hacemos clic en Add All


Notaremos que algunos nombres de  tablas se presentarán en color gris; estas son las que dependen de otras tablas, porque tienen una clave foránea, y es necesaria importarla para que la tabla principal pueda funcionar.


Continuamos con el asistente. En el diálogo Entity Classes, muestra las columnas con el nombre de la tabla, clases y tipo de generación.


En el diálogo Mapping Options, dejamos los valores predeterminados en el campo “Collection Type” con el valor java.util.Collection y presionamos el botón “Finalizar”



Se iniciara la generación de los Entity, en base al análisis de las tablas.


En la imagen podrá apreciar los Entity generados, cada uno  corresponde a una tabla de la base de datos




Nos ubicamos en Other Sources /src/main/resources y dar clic derecho sobre persistence.xml, seleccionar Open.




se muestra la configuración del archivo persistence.xml, y comprobar que Data Source: muestra jdbc/scrumweb
si damos clic en la pestaña Source, podemos observar la configuración.


<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
 <persistence-unit name="com.avbravo_scrumweb_war_1.0-SNAPSHOTPU" transaction-type="JTA">
   <jta-data-source>jdbc/scrumweb</jta-data-source>
   <exclude-unlisted-classes>false</exclude-unlisted-classes>
   <properties/>
 </persistence-unit>
</persistence>

Creación de los EJB

Los “Enterprise Java Beans” son clases especiales en Java que se ejecutan en el Contenedor Java EE. En estos componentes se establece la lógica de negocio para nuestras aplicaciones. Esto nos permite separar limpiamente la lógica de negocio, de la vista y de la capa de datos.


NetBeans nos permite crear estos EJB con el modelo CRUD (Create-Read-Update-Delete) para nuestras Entities de una manera muy rápida de la siguiente manera.


  • Desde menú File, seleccione New
  • en Categories, seleccione Enterprise JavaBeans
  • en File Types, seleccione Session Beans For Entity Classes



Seleccionar de la lista “Available Entity Classes” y presionar el botón Add All>> para generar todos los EJB para nuestras entidades.





En el dialogo Generated Session Beans, indicar el campo  “Packagecom.avbravo.scrumweb.ejb  (Para almacenar en ese paquete los ejb que se generen) y presionar el botón “Finalizar”


Se crean en el paquete com.avbravo.scrumweb.ejb los EJB AbstractFacade.java y un EJB para cada Entity seleccionado.





CDI vs ManagedBeans

JEE7 utiliza por defecto CDI en lugar de ManagedBeans, ya que estos estan más integrados con la plataforma y permiten la inyección de dependencias.


Para utilizarla debemos importar el paquete javax.enterprise.context y deben implementar la interfaz Serializable para los SessionScoped.


por ejemplo


import javax.annotation.ManagedBean;
import javax.enterprise.context.SessionScoped;


los paquetes que corresponden  a ManagedBeans ya no se usarán


import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

CDI define los alcances
  • @Application Scoped: Se mantiene durante toda la ejecución de la aplicacion.
  • @SessionScoped:       Se mantiene durante la sesion de un unico usuario.
  • @RequestScoped:      Corresponde a una unica solicitud HTTP o la invocación de un  
                                           método. El beans solo persiste mientras el método es
                                           invocado.
  • @ConversationScoped: Se mantiene entre multiples invocaciones.
  • @Dependent:             Es el mismo ciclo que el de un cliente. Un bean dependiente
 es creado cada vez que se inyecta y la referencia es removida cuando la inyección es removida.


Utilizamos la anotación  @Named para hacer referencia desde las páginas xhtml , se utiliza la siguiente estandarización: si el CDI se llama JSFUtil y se utiliza @Named este se usará en las páginas xhtml como jSFUtil, con la primera letra en minúsculas.









CREAR UN CDI PARA EL MANEJO DE MENSAJES

1. Crear el CDI JSFUtil
  • Desde menú File, seleccione New
  • en Categories, seleccione Java Server Faces
  • en File Types, seleccione JSF ManagedBeans
  • Class Name: JSFUtil
  • Package com.avbravo.scrumweb.generales
  • Scope: request



Se permite seleccionar el Scope (Alcance) en este ejemplo utilizamos request, indicar el paquete generales donde se almacenará.
Código generado por el IDE

Se procede a  eliminar la anotación  @ManagedBean y será reemplazada por @Named, la importación javax.faces.bean.ManagedBean y javax.faces.bean.RequestScoped se deben eliminar. Ya que estas en depreciadas para usar en su lugar CDI.


Dar Clic derecho-> Fix import y seleccionar javax.inject.Named y javax.enterprise.context.RequestScoped

























Se mostrará el código de la siguiente manera:


package com.avbravo.scrumweb.generales;


import java.io.Serializable;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;


/**
*
* @author avbravo
*/
@Named
@RequestScoped
public class JSFUtil  {

   /**
    * Creates a new instance of JSFUtil
    */
   public JSFUtil() {
   }


}



En el código usaremos métodos para enviar mensajes a los componentes  <p:growl> y <h:messages>, y tambien se usara para desplegar diálogos utilizando Dialog Framework.


Por ejemplo el método addSuccessMessage() actualiza el <p:growl> y <h:messages> de la pagina xhtml.






Mientras el método infoDialog() muestran un diálogo con los mensajes utilizando Dialog Framework de Primefaces implementado en la versión 4.0, y no actualiza <p:growl> ni <h:messages> de la pagina xhtml.

Código completo del CDI JSFUtil.java



import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import javax.enterprise.context.RequestScoped;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.component.UIInput;
import javax.faces.component.UISelectItem;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.model.SelectItem;
import javax.inject.Named;
import javax.servlet.http.HttpSession;
import org.primefaces.context.RequestContext;


/**
*
* @author avbravo
*/
@Named
@RequestScoped
public class JSFUtil {


  
   public static SelectItem[] getSelectItems(List<?> entities, boolean selectOne) {
       int size = selectOne ? entities.size() + 1 : entities.size();
       SelectItem[] items = new SelectItem[size];
       int i = 0;
       if (selectOne) {
           items[0] = new SelectItem("", "­­­");
           i++;
       }
       for (Object x : entities) {
           items[i++] = new SelectItem(x, x.toString());
       }
       return items;
   }
   /*
    * logout
    */


   public String logout() {
       HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
       if (session != null) {
           session.invalidate();
       }
       return "/index";
   }


   public static void addErrorMessage(Exception ex, String defaultMsg) {
       String msg = ex.getLocalizedMessage();
       if (msg != null && msg.length() > 0) {
           addErrorMessage(msg);
       } else {
           addErrorMessage(defaultMsg);
       }
   }


   public static void addErrorMessages(List<String> messages) {
       for (String message : messages) {
           addErrorMessage(message);
       }
   }


   public static void addErrorMessage(String msg) {
       FacesMessage facesMsg = new FacesMessage(FacesMessage.SEVERITY_ERROR,
               msg, msg);
       FacesContext.getCurrentInstance().addMessage(null, facesMsg);
   }


    public static void testMessage(String msg) {
       FacesMessage facesMsg = new FacesMessage(FacesMessage.SEVERITY_ERROR,
               msg, msg);
       FacesContext.getCurrentInstance().addMessage(null, facesMsg);
   }
   public static void addSuccessMessage(String msg) {
       FacesMessage facesMsg = new FacesMessage(FacesMessage.SEVERITY_INFO, msg,
               msg);
       FacesContext.getCurrentInstance().addMessage("successInfo", facesMsg);
   }


   public static void addWarningMessage(String msg) {
       FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, msg, ""));
   }


   public static void addFatalMessage(String msg) {
       FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL, msg, ""));
   }


   public static String getRequestParameter(String key) {
       return FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get(key);
   }


   public static Object getObjectFromRequestParameter(String requestParameterName,
           Converter converter, UIComponent component) {
       String theId = JSFUtil.getRequestParameter(requestParameterName);
       return converter.getAsObject(FacesContext.getCurrentInstance(), component, theId);
   }


   public static void infoDialog(String titulo, String texto) {
       FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, titulo,
               texto);
       RequestContext.getCurrentInstance().showMessageInDialog(message);
   }


   public static void warningDialog(String titulo, String texto) {
       FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_WARN, titulo,
               texto);
       RequestContext.getCurrentInstance().showMessageInDialog(message);
   }


   public static void fatalDialog(String titulo, String texto) {
       FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_FATAL, titulo,
               texto);
       RequestContext.getCurrentInstance().showMessageInDialog(message);
   }


   public static void errorDialog(String titulo, String texto) {
       FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
               titulo, texto);
       RequestContext.getCurrentInstance().showMessageInDialog(message);
   }


   public static java.sql.Date converterDate(java.util.Date fecha) {
       try {
           long lfecha = fecha.getTime();
           java.sql.Date dtfecha = new java.sql.Date(lfecha);
           return dtfecha;
       } catch (Exception e) {
           addErrorMessage("converterDate() " + e.getLocalizedMessage());
       }
       return null;
   }


   public static java.util.Date getFechaActual() {
       java.util.Calendar ca = java.util.Calendar.getInstance();
       java.sql.Date mydate = new java.sql.Date(ca.getTimeInMillis());
       return new java.sql.Date(mydate.getTime());


   }


   public static Integer getAnioActual() {
       java.util.Calendar ca = java.util.Calendar.getInstance();
       java.sql.Date mydate = new java.sql.Date(ca.getTimeInMillis());
       return ca.get(Calendar.YEAR);
   }


   public static Integer getMesActual() {
       java.util.Calendar ca = java.util.Calendar.getInstance();
       java.sql.Date mydate = new java.sql.Date(ca.getTimeInMillis());
       return ca.get(Calendar.MONTH);
   }


   public static Integer getMesDeUnaFecha(Date date) {
       Calendar calendar = Calendar.getInstance();
       calendar.setTime(date);


       int anio = calendar.get(Calendar.YEAR);
       int mes = calendar.get(Calendar.MONTH) + 1;
       int dia = calendar.get(Calendar.DAY_OF_MONTH);
       return mes;
   }
public static Integer getAnioDeUnaFecha(Date date) {
       Calendar calendar = Calendar.getInstance();
       calendar.setTime(date);


       int anio = calendar.get(Calendar.YEAR);
       int mes = calendar.get(Calendar.MONTH) + 1;
       int dia = calendar.get(Calendar.DAY_OF_MONTH);
       return anio;
   }
 public static Integer getDiaDeUnaFecha(Date date) {
       Calendar calendar = Calendar.getInstance();
       calendar.setTime(date);


       int anio = calendar.get(Calendar.YEAR);
       int mes = calendar.get(Calendar.MONTH) + 1;
       int dia = calendar.get(Calendar.DAY_OF_MONTH);
       return dia;
   }
   public static Integer getDiaActual() {
       java.util.Calendar ca = java.util.Calendar.getInstance();
       java.sql.Date mydate = new java.sql.Date(ca.getTimeInMillis());
       return ca.get(Calendar.DATE);
   }


   public static boolean isValidationFailed() {
       return FacesContext.getCurrentInstance().isValidationFailed();
   }


   public static boolean isDummySelectItem(UIComponent component, String value) {
       for (UIComponent children : component.getChildren()) {
           if (children instanceof UISelectItem) {
               UISelectItem item = (UISelectItem) children;
               if (item.getItemValue() == null && item.getItemLabel().equals(value)) {
                   return true;
               }
               break;
           }
       }
       return false;
   }


   public static String getComponentMessages(String clientComponent, String defaultMessage) {
       FacesContext fc = FacesContext.getCurrentInstance();
       UIComponent component = UIComponent.getCurrentComponent(fc).findComponent(clientComponent);
       if (component instanceof UIInput) {
           UIInput inputComponent = (UIInput) component;
           if (inputComponent.isValid()) {
               return defaultMessage;
           } else {
               Iterator<FacesMessage> iter = fc.getMessages(inputComponent.getClientId());
               if (iter.hasNext()) {
                   return iter.next().getDetail();
               }
           }
       }
       return "";
   }


   public static Throwable getRootCause(Throwable cause) {
       if (cause != null) {
           Throwable source = cause.getCause();
           if (source != null) {
               return getRootCause(source);
           } else {
               return cause;
           }
       }
       return null;
   }
   }












FACELETS

Facelets nos permite manejar un sistema de plantillas y componentes de manera facil.


CREAR PLANTILLA FACELETS CON <p:layout> de PRIMEFACES

Primefaces nos ofrece el componente <p:layout>  que nos permite una disposición adecuada de los componentes. A continuación se mostrará una forma sencilla de integrar facelets con <p:layout> para crear una plantilla dinámica  para nuestra aplicación web.


  • Desde menú File, seleccione New
  • en Categories, seleccione Java Server Faces
  • en File Types, seleccione Facelets Template




colocar  el nombre File Name: template



El IDE genera el archivo templates.xhtml y en la carpeta resources los css


Eliminamos el código que genera y agregamos el código para implementar el layout de primefaces.
Integramos facelets con el componente <p:layout> de primefaces. Teniendo presente que <p:layout> utiliza    <p:layoutUnit position="north”> para definir las areas y facelets necesitamos  definir el área mediante <ui:insert name="top"> .
Tabla comparativa
Primefaces
Facelets
north
top
south
bottom
west
left
east
Right
center
center


Indicamos que será pagina completa.
 <p:layout fullPage="true">
usamos <p:layoutUnit de primefaces y dentro de el <ui:insert>
<p:layoutUnit position="north" size="100" resizable="true" closable="true" collapsible="true">
        <ui:insert name="top">
         Header
        </ui:insert>
</p:layoutUnit>







Si deseamos incluir menú en la parte superior y que estos se muestran en sobre otras áreas y no solo sobre la parte superior incluir el css donde se modifica .ui-layout-north y .ui-layout-unit-content


<style type="text/css">
               .ui-layout-north {
                   z-index:20 !important;
                   overflow:visible !important;;
               }
               .ui-layout-north .ui-layout-unit-content {
                   overflow:visible !important;
               }
           </style>





Cambiar
Por
<title>Facelets Template</title>
<title><h:outputText value="Scrum web"/></title>





Agregar dentro del <h:head> el <f:facet name=”first”>, lo usamos para reordenar el contenido en Primefaces. Indicando lo primero que debe cargarse.
<f:facet name="first">
           <meta content='text/html; charset=UTF­8'  http-equiv="Content­Type"/>
           <title><h:outputText value="Scrum web"/></title>
       </f:facet>





Código completo de template.xhtml



<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
     xmlns:ui="http://java.sun.com/jsf/facelets"
     xmlns:h="http://java.sun.com/jsf/html"
     xmlns:p="http://primefaces.org/ui"
     xmlns:f="http://xmlns.jcp.org/jsf/core">
   <f:view contentType="text/html">

    <h:head>
       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
       <h:outputStylesheet name="./css/default.css"/>
       <h:outputStylesheet name="./css/cssLayout.css"/>
       <f:facet name="first">
           <meta content='text/html; charset=UTF­8'  http-equiv="Content­Type"/>
           <title><h:outputText value="Scrum web"/></title>
       </f:facet>


       <style type="text/css">
               .ui-layout-north {
                   z-index:20 !important;
                   overflow:visible !important;;
               }
               .ui-layout-north .ui-layout-unit-content {
                   overflow:visible !important;
               }
           </style>


   </h:head>

   <h:body>
       <p:layout fullPage="true">
           <p:layoutUnit position="north" size="100" resizable="true" closable="true" collapsible="true">
               <ui:insert name="top">
         Header
               </ui:insert>
           </p:layoutUnit>
          <p:layoutUnit position="south" size="50" closable="true" collapsible="true">
               <ui:insert name="bottom">
                   Footer
               </ui:insert>
           </p:layoutUnit>
    <p:layoutUnit position="west" size="175" header="Left" collapsible="true">
               <ui:insert name="left">
                   Left
               </ui:insert>
           </p:layoutUnit>
           
           <p:layoutUnit position="center">
               <ui:insert name="center"></ui:insert>
           </p:layoutUnit>
       </p:layout>
   </h:body>
       </f:view>
</html>





















Eliminar los archivos index.html e index.xhtml


Crear menu.xhtml
Crear una página Java Server Faces que contendrá las opciones del Menú separadas del template que luego la incluiremos dentro.
  • Desde menú File, seleccione New
  • en Categories, seleccione Java Server Faces
  • en File Types, seleccione JSF Page

Se utiliza el componente <p:megamenu> de primefaces debe estar incluido dentro de un <h:form>.
Utilizaremos menuitem  para indicar las opciones a desplegar en el menu.
 <p:menuitem value="Insertar"  url="/faces/page/estatus/estatusinsert.xhtml" />
la ruta /faces/pages/estatus/ indica que se debe crear la carpeta /page/estatus dentro de Web Pages.






Código completo de menu.xhtml
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
     xmlns:h="http://xmlns.jcp.org/jsf/html"
     xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
     xmlns:p="http://primefaces.org/ui">


   <h:body>
       <ui:composition>
           <h:form id="menuForm" >
             <p:megaMenu>  
              <p:submenu label="Registros" icon="ui-icon-check">  
               <p:column>  
                   <p:submenu label="Estatus">  
                      <p:menuitem value="Insertar"  url="/faces/page/estatus/estatusinsert.xhtml" />  
                      <p:menuitem value="Listar"   url="/faces/page/estatus/estatuslist.xhtml"/>  
                   </p:submenu>  
               </p:column>  
             </p:submenu>  
          
           </p:megaMenu>  
         </h:form>
       </ui:composition>


   </h:body>
</html>














Editar template.xhtml

en el top, colocamos el <ui:include src=”menu.xhtml”/>, mediante el include incluimos en la parte superior de la plantilla el menú que tenemos en menu.xhtml
 <p:layout fullPage="true">
           <p:layoutUnit position="north" size="100" resizable="true" closable="true"
                         collapsible="true">
               <ui:insert name="top">
                   <ui:include src="menu.xhtml"/>
               </ui:insert>
           </p:layoutUnit>

Crear la página Index.xhtml

Ahora creamos un Facelets Template Client
  • Desde menú File, seleccione New
  • en Categories, seleccione Java Server Faces
  • en File Types seleccione Facelets Template Client



en File Name : index
Presionar el botón Browse de Template:


seleccionamos el  Template  template.xhtml


Se genera el código de la página y  colocamos en comentario top,bottom, left. Utilizando
 <!-- --> ,de esta manera el área top, bottom,left serán reemplazadas por la definición en el template, y nosotros editamos el área center, donde  escribimos los componentes java server faces que deseamos mostrar. En este caso escribimos BIENVENIDOS A SCRUMWEB

Ejecutamos el proyecto  


se carga en el browser, podemos observar el layout con el menú y el mensaje de la página index.xhtml que es la primera en cargarse al ejecutar el proyecto.


CREAR CDI BEANS ESTATUSCONTROLLER.java

Estos CDI los utilizamos invocar las diversas operaciones sobre los Entity y asociar los componentes con las páginas Java Server Faces.


  • Desde menú File, seleccione New
  • en Categories, seleccionamos Java Server Faces
  • en File Types, seleccionamos JSF ManagedBeans
  • Class Name: EstatusController
  • Package: com.avbravo.scrumweb.controller
  • Scope: request

Agregamos las anotaciones @Named, @RequestScoped.
Nota:  Recordar utilizar javax.enterprise.context.RequestScoped.


Agregamos el EJB inyectandolo mediante @Inject
@Inject
EstatusFacade estatusFacade;


Agregamos el Entity
Estatus estatus = new Estatus();


creamos los get/set del entity estatus clic derecho Insert Code-->Generated set/get y seleccionamos estatus

Implementamos el método save() donde haremos persistentes los entity en la base de datos,  en este método buscaremos por la llave primaria mediante estatusFacade.find(), y si no existe invocamos estatusFacade.create(), para guardarlo.
Si deseamos limpiar la vista escribimos estatus = new Estatus(), de manera que al actualizarse la página xhtml, esta mostrará los atributos limpios.
JSFUtil.infoDialog(), mostrará el mensaje en un diálogo. Si queremos que se muestre en el growl usamos JSFUtil.addSuccessMessage().
Crear métodos edit() y delete(),  crear atributo encontrado con los métodos get/set. Recordar cambiar
public Boolean isEncontrado() {
       return encontrado;
   }


por
public Boolean getEncontrado() {
       return encontrado;
   }


































Código completo de CDI Beans EstatusController.java


import com.avbravo.scrumweb.Estatus;
import com.avbravo.scrumweb.ejb.EstatusFacade;
import com.avbravo.scrumweb.generales.JSFUtil;
import com.avbravo.scrumweb.generales.ResourcesFiles;
import java.io.Serializable;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.inject.Named;


/**
*
* @author avbravo
*/
@Named
@RequestScoped
public class EstatusController  {
   @Inject
   EstatusFacade estatusFacade;
   Estatus estatus = new Estatus();
   private Boolean encontrado = false;
   private List<Estatus> items;


   public Estatus getEstatus() {
       return estatus;
   }


   public void setEstatus(Estatus estatus) {
       this.estatus = estatus;
   }


   public Boolean getEncontrado() {
       return encontrado;
   }


   public void setEncontrado(Boolean encontrado) {
       this.encontrado = encontrado;
   }


   /**
    * Creates a new instance of EstatusController
    */
   public EstatusController() {
   }


   public String save() {
       try {
           if (estatusFacade.find(estatus.getIdestatus()) != null) {
               JSFUtil.infoDialog("Mensaje", "Existe un registro con ese id");
               return null;
           }
           estatusFacade.create(estatus);
           JSFUtil.addSuccessMessage("Guardado");
           estatus = new Estatus();
       } catch (Exception e) {
           JSFUtil.addErrorMessage(e.getLocalizedMessage());
       }
       return null;
   }


   public String edit() {
       try {
           estatusFacade.edit(estatus);
           JSFUtil.addSuccessMessage("Guardado");
       } catch (Exception e) {
           JSFUtil.addErrorMessage(e.getLocalizedMessage());
       }
       return null;
   }


   public String delete() {
       try {
           estatusFacade.remove(estatus);
           JSFUtil.addSuccessMessage("Eliminado");
           encontrado = false;
           estatus = new Estatus();


       } catch (Exception e) {
           JSFUtil.addErrorMessage(e.getLocalizedMessage());
       }
       return null;
   }
//Devuelve eln list para un selectOneMenu
public List<Estatus> getItems() {
       if (items == null) {
           items = estatusFacade.findAll();
       }
       return items;
   }

}




Crear los Facelets Template Client para insertar Estatus

Ahora creamos un Facelets Template Client
  • Desde menú File, seleccione New
  • en Categories, seleccione Java Server Faces
  • en File Types, seleccione Facelets Template Client
  • En File Name: estatusinsert
  • Folder colocamos /page/estatus/
  • Template seleccionamos template.xhtml

Se crea el Facelets client  estatusinsert.xhtml en la carpeta page/estatus



De la misma manera que hicimos con la página index, colocamos en comentario top, button,left, mediante <!-- →.
      
Nos ubicamos en la palabra  center. En esta parte vamos a reemplazarlo con un formulario generado por el IDE..


           <ui:define name="center">
               center
           </ui:define>

Una vez seleccionado, hacemos clic sobre el texto y seleccionamos  Insert Code




Luego, hacemos clic en JSF Form From Entity




Seleccionar el Entity: com.avbravo.scrumweb.Estatus
y el Managed Bean Property: estatusController.estatus






Genera el código con los componentes JSF asociado a los atributos del entity
Indicamos el id del panel esto se utiliza para identificar el componente por el id respectivo
<h:panelGrid id="panel" columns="2">


Colocamos la etiqueta <p:growl id="growl" /> y <p:messages autoUpdate=”true”  para que nos muestre los mensajes del aplicativo.


Ahora vemos que la etiqueta   <p:growl id="growl" /> muestra un error . Esto se debe a que  no está agregado el taglib de primefaces. Para agregarlo, seleccionamos el icono  de la sugerencia y seleccionamos que agregue la biblioteca respectiva


Agregamos el componente para mensajes que se mantendrán en la página.
 <p:messages autoUpdate="true"/>


Creamos la  sección footer en el panelGrid y agregar el boton Guardar, para invocar el método save() del CDI y en  la propiedad update utilizamos  panel y growl, de manera que el guardar un registro se actualice el panel y se muestre los mensajes en el growl. Si no lo colocamos en el update los mensajes no se mostraran, ya que el <p:commandButton> por defecto tiene Ajax habilitado en true.


<f:facet name="footer">
  <p:commandButton value="Guardar" update="panel,growl" action="#{estatusController.save()}"/>
</f:facet>






Vista final de la página estatusinsert.xhtml, con los componentes y el botón Guardar.

Guardamos el archivo, y volvemos a ejecutar la aplicación para mostrar los cambios


Ingresamos los datos y al dar clic en el boton Guardar se almacenan en la base de datos los atributos que estan en el Entity y se envía el mensaje en el growl y en messages.



si ingresamos un idestatus que ya existe nos enviará el mensaje.


Si no usaramos la validación para determinar si existe un registro con esa llave primaria obtendremos el mensaje Transaction aborted, y no sería muy explicativo para el usuario
Si deseamos usar icono en el botón, agregamos el atributo icon="ui-icon-disk" a <p:commandButton>.


En el siguiente enlace podemos encontrar la lista de iconos jquery disponibles para los componentes primefaces, que usaremos mediante icon="nombre del icono”
colocamos el cursor sobre el icono y se despliega el mensaje con el nombre.


Editar el entity Estatus.java

Agregar el @NamedQuery findByEstatusLike que nos permitirá realizar búsquedas por coincidencias en el atributo estatus.
   @NamedQuery(name = "Estatus.findByEstatusLike", query = "SELECT e FROM Estatus e WHERE lower(e.estatus) like :estatus"),



Segmento del código Entidad.java donde se agrega el @NamedQuery


@Entity
@Table(name = "estatus")
@XmlRootElement
@NamedQueries({
   @NamedQuery(name = "Estatus.findAll", query = "SELECT e FROM Estatus e"),
   @NamedQuery(name = "Estatus.findByIdestatus", query = "SELECT e FROM Estatus e WHERE e.idestatus = :idestatus"),
   @NamedQuery(name = "Estatus.findByEstatus", query = "SELECT e FROM Estatus e WHERE e.estatus = :estatus"),
   @NamedQuery(name = "Estatus.findByEstatusLike", query = "SELECT e FROM Estatus e WHERE lower(e.estatus) like :estatus"),
   @NamedQuery(name = "Estatus.findByEsinicial", query = "SELECT e FROM Estatus e WHERE e.esinicial = :esinicial")})
public class Estatus implements Serializable {
   private static final long serialVersionUID = 1L;

Editar EstatusFacade.java

Agregar el método  findById , que nos devolverá un objeto de tipo Estatus.
El método find, el cual buscará el entity por la llave primaria.
El método findByEsinicial() que recibe un parámetro correspondiente al valor del atributo esinicial(si/no).


El Entity Estatus findByEsinicial es el  @NamedQuery(name = "Estatus.findByEsinicial", usaremos un Query que implementa la búsqueda y devolverá un list.
El método  getEstatusList() para que devuelva todos los entity , al invocar Estatus.findAll. y elmétodoo  findByEsinicial().
agregar los métodos findByEstatus(), findByIdEstatusList() y  findByEstatusLike()


Editar EstatusFacade.java


public Estatus findById(String id) {
       return em.find(Estatus.class, id);
}


public List<Estatus> getEstatusList() {
       return em.createNamedQuery("Estatus.findAll").getResultList();
   }


public List<Estatus>  findByEsinicial(String value){
           Query query = em.createNamedQuery("Estatus.findByEsinicial");
           return  query.setParameter("esinicial", value).getResultList();
   }


public List<Estatus> findByEstatus(String value){
       Query query = em.createNamedQuery("Estatus.findByEstatus");
       return query.setParameter("estatus",value).getResultList();
   }


       public List<Estatus>  findByIdEstatusList(String value){
     Query query = em.createNamedQuery("Estatus.findByIdestatus");
     return  query.setParameter("idestatus", value).getResultList();
   }


public List<Estatus>  findByEstatusLike(String value){
     Query query = em.createNamedQuery("Estatus.findByEstatusLike");
     value = "%" +value.trim() +"%";
     return  query.setParameter("estatus", value).getResultList();
   }


Convertidores

Convierten los objetos en el tipo de datos necesario. Por ejemplo si usamos un selectOneMenu con una lista de objetos, el converter devolverá el objeto seleccionado.

Crear EstatusConverter.java

Crear EstatusConverter.java
  • Desde menú File, seleccione New
  • en Categories, seleccione Java Server Faces
  • en File Types, seleccione JSF ManagedBeans
  • Class Name: EstatusConverter
  • Package com.avbravo.scrumweb.converter

import com.javscaz.rigemjsf.Usuarios;
import com.javscaz.rigemjsf.ejb.UsuariosFacade;
import com.javscaz.rigemjsf.generales.JSFUtil;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.inject.Inject;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;


@FacesConverter(value = "estatusConverter")
public class EstatusConverter implements Converter {


   @Inject
   private EstatusFacade ejbFacade;


   @Override
   public Object getAsObject(FacesContext facesContext, UIComponent component, String value) {
       if (value == null || value.length() == 0 || JSFUtil.isDummySelectItem(component, value)) {
           return null;
       }
       return this.ejbFacade.find(getKey(value));
   }


   java.lang.String getKey(String value) {
       java.lang.String key;
       key = value;
       return key;
   }


   String getStringKey(java.lang.String value) {
       StringBuffer sb = new StringBuffer();
       sb.append(value);
       return sb.toString();
   }


   @Override
   public String getAsString(FacesContext facesContext, UIComponent component, Object object) {
       if (object == null
               || (object instanceof String && ((String) object).length() == 0)) {
           return null;
       }
       if (object instanceof Estatus) {
           Estatus o = (Estatus) object;
           return getStringKey(o.getUsername());
       } else {
           Logger.getLogger(this.getClass().getName()).log(Level.SEVERE, "object {0} is of type {1}; expected type: {2}", new Object[]{object, object.getClass().getName(), Estatus.class.getName()});
           return null;
       }
   }


}

Nota:
Si la llave primaria es de tipo integer, utilizar el tipo de datos java.lang.Integer
java.lang.Integer getKey(String value) {
       java.lang.Integer key;
       key = Integer.valueOf(value);
       return key;
   }


   String getStringKey(java.lang.Integer value) {
       StringBuffer sb = new StringBuffer();
       sb.append(value);
       return sb.toString();
   }

AVBravo - November 26, 2014 04:47 PM
Libro JEE7 Capítulo 01 Requisitos

Capítulo 01 Requisitos


Introducción Instalar JDK En linux En Windows INSTALAR MAVEN INSTALAR NETBEANS Plugins de NetBeans IDE INSTALAR MYSQL En Linux MySQL Workbench En Windows Creación de la base de datos desde NetBeans MERCURIAL Clona tu nuevo repositorio GlassFish Crear pool de conexiones en GlassFish desde NetBeans IDE



Introducción

En este libro se describirá todo del desarrollo de una aplicación Java EE 7 utilizando las características de la tecnología. Para realizarlo, necesitamos la instalación de algunos componentes, así como su configuración.Ya que Java es multiplataforma, la instalación de los componentes lo describiremos para las plataformas Windows y Linux.

Instalar JDK

Para poder desarrollar una aplicación, necesitamos siempre el Kit de Desarrollo Java: JDK. Este kit lo descargamos desde http://www.oracle.com/technetwork/java/javase/downloads/index.html
J.png


Debemos ser muy cautelosos sobre la versión que deseamos instalar, ya que existen versiones de 32 bits y 64 bits.


En linux



H.png
Lo descomprimimos y lo movemos a /usr/local mediante


sudo mv jdk1.8.0_20 /usr/local


luego editamos el archivo profile


sudo gedit /etc/profile


y agregamos las siguientes líneas


export JAVA_HOME=/usr/local/jdk1.8.0_20
export JRE_HOME=${JAVA_HOME}/jre
export PATH=$PATH:${JAVA_HOME}/bin


ejecutar
cd /etc
source profile


y verificar la versión de java instalada


java -version


En Windows

Descargamos uno de estos instaladores, dependiendo de nuestro sistema operativo:





Hacemos doble clic sobre el instalador




... y dejamos todas las opciones por omisión.


Al finalizar la instalación, verifiquemos que se ha creado la carpeta correcta en %ProgramFiles%\Java. Para ello, presionamos las teclas Windows+R y escribimos el texto anterior




Hacemos clic en “Aceptar” y nos debería abrir la ventana del explorador de archivos con el contenido.




Como hemos descargado la versión JDK1.7.0_45 se creará la carpeta con el mismo nombre. Además vemos que existe otra carpeta llamada jre7. La primera carpeta tiene todo lo necesario para desarrollar una aplicación Java, la segunda tiene todo lo necesario para ejecutar una aplicación Java.


Debemos crear las variables de entorno que nos permitirá a utilizar correctamente el JDK dentro del entorno de Windows. Para ello, necesitamos tener la ruta completa del JDK. Así que - para no fallar en obtener la ruta completa de la carpeta - entramos a la primera carpeta y copiamos la dirección que aparece en la barra de direcciones.




Luego, entramos a las propiedades del equipo utilizando las teclas Windows+Pausa y hacemos clic en “Configuración avanzada del sistema”


Hacemos clic en “Variables de entorno”




Debemos crear dos variables de entorno. Hacemos clic en el botón “Nueva…” de la sección “Variables del sistema” y escribimos los siguientes valores


Nombre de variable: JAVA_HOME
Valor de la variable: (El que copiamos hace un rato)



Nombre de variable: JRE_HOME
Valor de la variable: %JAVA_HOME%\jre




Buscamos la variable PATH , lo seleccionamos y hacemos clic en “Editar…” y en el campo “valor de la variable” agregamos el texto %JAVA_HOME%\bin




Hacemos clic en todas las ventanas “Aceptar” para cerrarlas

Ahora, vamos a una ventana del símbolo de sistema, y escribimos


java -version


...para ver la versión instalada de Java:




Y escribimos


javac -version


… para ver la versión del compilador


INSTALAR MAVEN

Maven viene integrado con NetBeans IDE, pero también podemos instalarlo manualmente con los siguientes pasos
  • Descargar desde
descomprimir el archivo y copiarlo en /home/avbravo


  • Editar el profile
sudo gedit /etc/profile
Agregar
export MAVEN_HOME=/home/avbravo/apache-maven-3.0.5
export PATH=$PATH:${MAVEN_HOME}/bin


  • ejecutar
cd /etc
source profile


Verificar la versión de maven con
mvn --version




INSTALAR NETBEANS

Descargamos el IDE desde https://netbeans.org/downloads/
nb.png
le damos permiso de ejecución
chmod 775 *.sh


ejecutamos el instalador
./netbeans-8.0.1-linux.sh


se muestra el instalador
presionamos el botón Customize…, seleccionamos Tomcat, y presionamos el botón Next→
Seleccionamos la instalación de JUnit

Plugins de NetBeans IDE

DBackRestore
Lo utilizaremos para realizar backup y restauraciones de la base de datos MySQL.




Entramos a NetBeans y en el menú Tools->Plugins, seleccionar la pestaña Downloaded y hacer clic en el botón Add Plugins...


seleccionar el archivo .nbm correspondiente al plugin, presionar el botón Aceptar
Luego presionar el botón Install y respondemos a las opciones del instalador. Al finalizar la instalación  se muestra el icono en la barra principal del ide.
d.png

INSTALAR MYSQL

En Linux



Instalamos MySql
sudo apt-get install mysql-server mysql-client


Luego se solicita la contraseña y debemos repetirla



MySQL Workbench



Descargamos la versión para nuestro sistema operativo


procedemos a instalarlo, haciendo doble clic


En Windows

MySQL dispone un único instalador que contiene el Workbench, el Servidor en sí, los conectores y más herramientas. Este instalador se puede descargar desde aquí




Asegúrese descargar el que dice mysql-installer-community-5.x.msi donde “x” es el decimal de la versión.


Una vez descargado, proceda con la instalación siguiendo las opciones por omisión.


Creación de la base de datos desde NetBeans



Creamos la base de datos desde terminal o desde NetBeans menu, Window->IDE Tools->Terminal

Ejecutamos


mysql -h localhost -u root - p


si estamos en el mismo servidor podemos usar


mysql -u root -p

Ejecutamos el comando para crear la base de datos


create database scrumweb;


para salir de la consola de mysql escribimos


exit


y para salir de la consola del ide, escribimos nuevamente


exit


Ahora en la pestaña Services
Ubicarse en Drivers->MySQL(Connector/J driver)->clic derecho y seleccionar Connect Using…
En el Conecction  Wizard, indicamos el nombre de la base de datos y el user name y password, y presionamos el botón Finish.


Se muestra la conexión scrumweb
Ahora presionamos el icono del plugin DBackRestore , seleccionamos la pestaña Restore, dar clic en el icono para buscar el script , seleccionamos el archivo de script y hacemos clic en el botón Restore.
Nos muestra las tablas





MERCURIAL



Mercurial es un sistema de control de versiones distribuidos, permite clonar un repositorio, y funciona como cliente y servidor. Podemos subir nuestros cambios a otro repositorio clonado y luego estos se pueden subir al repositorio master.
Pull para actualizar nuestro repositorio.
Push para subir los cambios a un repositorio remoto.


A. Instalacion Mercurial
sudo apt-get install mercurial
   
B. Crearemos una cuenta en bitbucket,entrar a bitbucket, registrarse r

seleccionar en el menú Repositorios->Crear un nuevo repositorio

Al crearlo tenemos dos opciones
Iniciar con un proyecto desde cero, o si tenemos el proyecto lo subimos al repositorio.


al darle clic en Estoy comenzando desde cero y nos muestra los pasos para crearlo y subirlo al repositorio


Clona tu nuevo repositorio

Configura Mercurial en tu máquina si es que no lo has hecho ya.⏎
mkdir /path/to/your/project
cd /path/to/your/project
hg clone https://avbravo@bitbucket.org/avbravo/scrumweb


Nos interesa  el url que usaremos para subir los cambios de nuestro proyecto al repositorio.
https://avbravo@bitbucket.org/avbravo/scrumweb

Utilizamos la opción de administración




Habilitar los servicios, seleccionamos Hooks, seleccionamos
presionar el botón Añadir hook

Administración de acceso







GlassFish

Cuando instalamos NetBeans IDE, este trae integrado GlassFish, en este caso mostraremos el proceso de crear un pool de conexiones en GlassFish de dos maneras.En la primera será a través de NetBeans IDE y en la segunda en GlassFish Standalone.


Copiar el driver JDBC


Buscamos en la carpeta netbeans8.0.1->ide->modules->ext el driver mysql-connector-java-5.1.23bin.jar
m.png|


lo copiamos a  glassfish-3.1.2/glassfish/domains/domain1/lib

Crear pool de conexiones en GlassFish desde NetBeans IDE

Recomendacion:
Para crear el pool de conexiones de esta manera debe tener creado el proyecto.


Seleccionamos File-->New File en el menú de NetBeans
Categories: GlassFish y File Types: JDBC Connection Pool
El asistente cargará la conexión con el user y password a la base de datos


podemos modificar los parámetros que deseamos y presionamos el botón finalizar.

Ahora creamos JDBC Resource
File-->New -->Categories: GlassFish File Types: JDBC Resource

Seleccionar el pool de conexión scrumwebPool, en JNDI Name colocar jdbc/scrumweb


No agregamos ninguna propiedad y presionamos el botón finalizar.

También lo podemos hacer


Ejecutamos GlassFish desde NetBeans, clic derecho en GlassFish server y seleccionar Start
start.png

Si seleccionamos Properties, podemos ver el usuario y password de GlassFish
pro.png

Desde el navegador ingresamos la direccion localhost:4848


ingresamos el nombre de usuario y contraseña

Ventana administración



Seleccionamos Recursos->JDBC->Pool de conexiones JDBC


Hacer clic en el botón Nuevo... indicamos el nombre del pool scrumwebPool, tipo de recursos javax.sql.DataSource y el proveedor de bases de datos: MySQL


presionamos el botón siguiente




Nos muestra una lista enorme de parámetros eliminamos los que no necesitamos y agregamos estos
user
root
DatabaseName
scrumwebdb
password
mypassword
Url
jdbc:mysql://localhost:3306/scrumwebdb
PortNumber
3306
driverClass
com.mysql.jdbc.Driver


r.png
Presionar el botón Finalizar
Se muestra el listado de pools de conexión


dar clic en el pool scrumwebdbPool
Dar clic en el botón




Nos envía el mensaje que fue exitoso el ping


dar clic en el botón








Ahora en RECURSOS JDBC
Dar clic en Nuevo...
Dar clic en nuevo


colocamos como nombre jdbc/scrumwebdb y seleccionamos el pool scrumwebdbPool
s.png
y presionar el botón Aceptar
comprobamos que aparezca el jdbc/scrumwebdb












AVBravo - November 24, 2014 04:51 PM
Libro JEE7 Capitulo 0. Introducción

Capitulo 0. Introducción

Porque escribir este libro?
El desarrollo de aplicaciones empresariales ha evolucionado grandemente, Java EE es sin duda una de los componentes más utilizados, y NetBeans es uno de los mejores IDEs para desarrollo de aplicaciones.
Para un novato o un desarrollador de otros lenguajes generalmente se encuentra con muchos frameworks, IDEs, componentes y en algunas situaciones el inicio con el desarrollo de una aplicación empresarial se convierte en un proceso de análisis de tecnologías e implementaciones.
Este libro es una pequeña guia que se orienta al desarrollo de una aplicación JEE7 utilizando NetBeans IDE, GlassFish, Primefaces, Maven.
De manera que permita un conocimiento práctico de las aplicaciones y se complemente con otros libros especificos del area de desarrollo.
Encontrarás información sobre JPA, CDI.

“Pues bien, si mas que decir bienvenido al mundo Java, JEE7+NetBeans+GlassFish+Primefaces”

AVBravo - November 20, 2014 04:43 AM
Corregir Error Caused by: javax.el.PropertyNotFoundException

Corregir Error Caused by: javax.el.PropertyNotFoundException


s.png

al ingresar un valor en exoneracion y presionar enter se genera el error y no actualiza el saldo.
exception.png






Caused by: javax.el.PropertyNotFoundException: /page/pagos/pagoseventuales.xhtml @272,122 value="#{pagoseventualesSearchController.selected.comentario}": Target Unreachable, 'null' returned null
at com.sun.faces.facelets.el.TagValueExpression.setValue(TagValueExpression.java:133)
at javax.faces.component.UIInput.updateModel(UIInput.java:832)
... 43 more
Caused by: javax.el.PropertyNotFoundException: Target Unreachable, 'null' returned null
at com.sun.el.parser.AstValue.getTarget(AstValue.java:192)
at com.sun.el.parser.AstValue.setValue(AstValue.java:226)
at com.sun.el.ValueExpressionImpl.setValue(ValueExpressionImpl.java:294)
at org.jboss.weld.el.WeldValueExpression.setValue(WeldValueExpression.java:64)
at com.sun.faces.facelets.el.TagValueExpression.setValue(TagValueExpression.java:131)
... 44 more



La línea 272 es donde se genera el error
error.png


El formulario esta compuesto por un diálogo, dentro de el un datatable, se  invoca a otro diálogo con las opciones y este lo carga el registro en en el datatable, dentro de una de las columnas hay un botón que invoca al diálogo de para escribir el comentario.

columna donde se invoca el diálogo
column.png

si revisamos el error
@272,122 value="#{pagoseventualesSearchController.selected.comentario}": Target Unreachable, 'null' returned null

En el datatable en selection
selection="#{pagoseventualesSearchController.selected}"
indica que el objeto selected contendrá el objeto seleccionado pero al cargar el dialogo genera el error null
f.png


una forma sencilla de corregirlo, en el método get verificar si es null el objeto


public Recibosdetalles getSelected() {
       if(selected == null){
        
              selected = new Recibosdetalles();
       }
       return selected;
   }


d.png


si ejecutamos el proyecto, e ingresamos la exoneración se actualiza el saldo.
t.png

AVBravo - November 14, 2014 01:29 PM
Usando < p:cellEditor > para editar dos celdas de un datatable

Pensemos que tenemos un datatable en el cual las celdas pago y exoneración son editables, deseamos que se actualice el saldo, en base a los valores en estas dos celdas.


En nuestro archivo .xhtml
agregamos un <p:remoteCommand>
  <p:remoteCommand name="onCellEditTableComplete"  update=":form:growl,:form:datatableImpuestos" />

En el <p:datatable>

   <p:dataTable id="datatableImpuestos"
                                             rows="10"
                                             value="#{pagoseventualesSearchController.listRecibosdetalles}" 
                                             var="item"
                                             paginator="true"
                                             rowKey="#{item.idnivel6}"
                                             selectionMode="single"
                                             emptyMessage="#{app['info.notienedeudapendiente']}"

                                             selection="#{pagoseventualesSearchController.selected}"
                                             filteredValue="#{pagoseventualesSearchController.filtered}" 
                                             editable="true" editMode="cell"

                                             > 
Agregamos <p:ajax>
<p:ajax event="cellEdit" listener="#{pagoseventualesSearchController.onCellEdit}" 
                                            update=":form:growl,:form:datatableImpuestos,:form:mensajes" 
                                            oncomplete="onCellEditTableComplete()"/>


En las columnas usamos <p:cellEditor>

  <p:column headerText="#{msg.pago}">
                                        <p:cellEditor>
                                            <f:facet name="output"><h:outputText value="#{item.pago}" /></f:facet>
                                            <f:facet name="input"><p:inputText value="#{item.pago}" style="width:100%" label="Year"/></f:facet>
                                        </p:cellEditor>
                                    </p:column>
                                    <p:column headerText="#{msg.exoneracion}">
                                        <p:cellEditor>
                                            <f:facet name="output"><h:outputText value="#{item.exoneracion}" /></f:facet>
                                            <f:facet name="input"><p:inputText value="#{item.exoneracion}" style="width:100%" label="Year"/></f:facet>
                                        </p:cellEditor>
                                    </p:column>





                                    <p:column>
                                        <f:facet name="header">
                                            <p:outputLabel value="#{msg.saldo}"/>
                                        </f:facet>
                                        <p:outputLabel value="#{item.saldo}" >
                                            <f:convertNumber type="number"   groupingUsed="true"
                                                             minFractionDigits="2" pattern="#0.00"/>
                                        </p:outputLabel>
                                    </p:column>


En el @NamedBeans creamos el metodo onCellEdit
obtiene le fila seleccionada
            selected = listRecibosdetalles.get(event.getRowIndex());

permite asignar valores a las columnas especificas
listRecibosdetalles.get(event.getRowIndex()).setPago(0.0);


 public void onCellEdit(CellEditEvent event) {
 try {

            selected = listRecibosdetalles.get(event.getRowIndex());

            Object oldValue = event.getOldValue();
            Object newValue = event.getNewValue();
            if (newValue != null && !newValue.equals(oldValue)) {
             if (selected.getPago() < 0) {
                    JSFUtil.warningDialog(rf.getMensajeArb("info.message"), rf.getMensajeArb("info.valornegativo"));
                    listRecibosdetalles.get(event.getRowIndex()).setPago(0.0);
                    selected.setPago(0.0);
                    listRecibosdetalles.get(event.getRowIndex()).setSaldo(selected.getSaldoanterior() - selected.getPago() - selected.getExoneracion());
                }
}

AVBravo - November 12, 2014 11:20 PM
Java server Faces 2.3.0-m01-SNAPSHOT

Java Server Faces 2.3, traerá algunas cosas interesantes
Editamos el archivo pom.xml y especificamos la versión  2.3.0-m01-SNAPSHOT

Fuente

<dependency>
            <groupId>org.glassfish</groupId>
            <artifactId>javax.faces</artifactId>
            <version>2.3.0-m01-SNAPSHOT</version>
        </dependency>

Entre los avances que trae es que podemos usar CDI para UIViewRoot viewRoot y ExternalContext 

  





AVBravo - October 17, 2014 12:57 AM
Java Español- Norte America-Centro America-Sur America

En el día de hoy se dio una reunión organizada por nuestro amigo Alexis Lopez, cuyo objetivo fue reunir Jug-leaders, JavaChampions, miembros de las comunidades de Java en Español, a nivel del Continente Americano.


Esta reunión los participantes convocados:
Alexis Lopez - Colombia

Aristides Villarreal - Panamá
Cesar Hernandez - Guatemala
Diego Silva - Perú
Jorge Vargas - Mexico
Jose Díaz - Perú


El propósito es reforzar la presencia de la comunidad Java en Español, coordinar las actividades a nivel regional, establecer una organización común que reuna las diversas comunidades.
Sin lugar a dudas fue una gran experiencia, compartir con mis amigos en una videoconferencia muy amena donde se establecieron importantes lineamientos a seguir.
Pronto se estará convocando a otros Jugleaders y miembros de las comunidades a unirse a esta iniciativa.
Esta fue la primera reunión de Jugleaders de latinoamericana sobre Java en español.


AVBravo - September 23, 2014 02:44 PM
RemoteCommand primefaces

RemoteCommand de primefaces nos permite ejecutar los métodos de un Beans con JavaScript.
Podemos usarlo para varias actividades, en este ejemplo sencillo, para validar cuando se da Enter sobre una textField
  <p:remoteCommand  update="panel,growl,:form:barra:toolbar"
                                             name="remoteidnivel1" actionListener="#nivel1SearchController.load()}"/>

  <p:inputText id="idnivel1" size="35" value="#{nivel1Controller.nivel1.idnivel1}" title="#{msg.idnivel1}" required="true"
                                                     requiredMessage="#{msg.idnivel1} #{app['info.required']}"
                                                      onkeypress="if (event.keyCode == 13) {
                                                       remoteidnivel1();
                                                       return false;

                                                   }"/>


AVBravo - September 12, 2014 01:30 PM
NetBeans 8.0.1 en Español

NetBeans 8.0.1 disponible en español
http://bits.netbeans.org/netbeans/8.0.1/community/
Esta disponible NetBeans 8.0.1 en varios idiomas .


Puedes descargar la nueva versión y utilizar las nuevas características



AVBravo - September 10, 2014 03:19 PM
GlassFish 4.1

Disponible GlassFish 4.1 con soporte para Java 8
https://glassfish.java.net/download.html


GlassFish es un Servidor Java EE, que en su versión 4.1, liberado en el día de ayer soporta Java 8, CDI 1.2, WebSocket 1.1.

https://blogs.oracle.com/theaquarium/
como mencionaba en el post anterior esta integrado dentro de NetBeans 8.0.1

AVBravo - September 10, 2014 02:09 PM
NetBeans 8.01 Disponible

Ya esta disponible la versión 8.0.1 de NetBeans
https://netbeans.org/downloads/


Algunas características

  • Soporte Glassfish 4.1
  • Los iconos cambian dependiendo del tipo de archivos, esto ayuda a identificarlos más rápidamente.





AVBravo - September 05, 2014 02:54 AM
Primefaces Blueprints

Primefaces Blueprints
https://www.packtpub.com/application-development/primefaces-blueprints


Quiero dar las gracias al equipo de Pack Publishing ,y a los autores Sudheer Jonna, Ramkumar Pillai, por la oportunidad de participar en este proyecto.
Primefaces Blueprints un libro donde aprenderás a crear aplicaciones Java Server Faces utilizando Primefaces.
Si no tienes experiencia o eres un desarrollador experimentado , este libro es una excelente alternativa a tomar en cuenta.

AVBravo - August 27, 2014 04:28 PM
Recorriendo elementos con Lambda

Un ejemplo de recorrer elementos de un list y agregarlos a varios JComboBox
for(String texto:camposList){
                jComboBoxUsername.addItem(texto);
                 jComboBoxActivate.addItem(texto);
                 jComboBoxPassword.addItem(texto);
                     jComboBoxName.addItem(texto);
            }


Podemos utilizar Lambda para realizar la misma operación
  camposList.stream().map((texto) -> {
                jComboBoxUsername.addItem(texto);
                return texto;
            }).map((texto) -> {
                jComboBoxActivate.addItem(texto);
                return texto;
            }).map((texto) -> {
                jComboBoxPassword.addItem(texto);
                return texto;
            }).forEach((texto) -> {
                jComboBoxName.addItem(texto);
            });

AVBravo - August 20, 2014 01:29 AM
Jugando con Lambda JDK8

Jugando con Lambda JDK8
recorrer los elementos mediante forEach podemos crear una función o hacerlo directamente.
listEntity.forEach(p -> imprimir(p));

   private String imprimir(String f) {
       System.out.println(f);
       
    }

Ordenar
Collections.sort(Entity, (a, b) -> a.compareTo(b));

AVBravo - July 09, 2014 03:09 AM
Error al ejecutar Glassfish

Si tenemos error al ejecutar Glassfish


./asadmin start-domain domain1



There is a process already using the admin port 4848 -- it probably is another instance of a GlassFish server.
Command start-domain failed.


Para solucionarlo tenemos que indicar el hostname en el archivo /etc/hosts
Pasos:
1. Encontrar el nombre de hostname ejecutar el comando
  hostname
nos muestra el nombre


2. Editar el archivo hosts con el comando
sudo vim /etc/hosts
y agregar luego 127.0.0.1 el nombre del hostname myhost name

3. Ejecutar
./asadmin start-domain domain1


s.png

AVBravo - July 06, 2014 06:51 PM
Recuperar una revisión desde Bitbucket

Recuperar una revisión desde Bitbucket

Cuando deseamos recuperar una revisión de mercurial en bitbucket,

s.png


si deseamos recuperar la revisión 12a165b

Entramos al directorio

s.png

ejecutamos
hg update -r 12a165bls

con este comando actualizamos nuestro proyecto a esa revisión.

AVBravo - June 26, 2014 03:08 PM
Plugin UML desde codigo fuente

Plugin UML

Sitio Oficial

Requisitos:
1. NetBeans IDE
2. Subversion
    Para instalarlo en Ubuntu
    sudo apt-get install subversion subversion-tools

Pasos:
1. Desde NetBeans IDE-->Team-->Subversion-->Checkout
https://svn.java.net/svn/nb-uml-plugin~nb-umlplugin

uml1.png

2. Seleccionar el directorio

uml2.png

3. Abrir el proyecto
uml03.png

4. Seleccionar el proyecto
uml04.png

5. Clic derecho y seleccionar Package as -->NBM
packages.png


6. En el menú Tools-->Plugins-->pestaña Downloaded, presionar el botón Add Plugins...
add.png


7. Se generaran los modulos nbm en el directorio
NetBeansProjects->plugins->uml->trunk->nb-uml->UML->build->updates
Captura de pantalla de 2014-06-26 09:41:27.png

8. Seleccionamos los archivos
p.png

9.presionar el botón Install
install.png

10. Se muestran los módulos  a instalar
modulos.png
respondemos a los mensajes en los siguientes cuadros de diálogo.

11.Tenemos el plugin instalado listo para ser usado

plugin.png

AVBravo - June 24, 2014 02:08 PM
NetBeans IDE 8.0 Satisfaction Survey

Si utilizas NetBeans IDE, puedes dar tu opinión sobre el mismo y dejar tus comentarios sobre aspectos que te gustarían que fuesen mejorados.


Enlace a la encuesta

NetBeans IDE 8.0 Satisfaction Survey

AVBravo - June 22, 2014 07:33 PM
Como usar imagenes con < p :commandButton >

Como usar imágenes con <p:commandButton>


Agregamos la imagen de 16x16 en resources
c.png


Editar el archivo default.css
r.png


Agregar al archivo
.dolar-icon {
   background-image: url("#{facesContext.externalContext.request.contextPath}/resources/imagenes/dolar.png") !important;
}


d.png


Ahora podemos usar el icon =”dolar-icon” que definimos en el archivo default.css
 <p:commandButton
                       icon="dolar-icon"
                       title="#{app['title.searchregimen']}"
                       rendered="#{cc.attrs.nivel6BotonRender}"
                       oncomplete="PF('nivel6ComponentDialogVar').show();"/>

bo.png

AVBravo - June 22, 2014 04:47 PM
NetBeans Dream Team: Our Favorite NetBeans IDE Features!

Agradeciendo a Geertjan Wielenga y a Zoran Sevarac, por la oportunidad de participar en la entrevista

NetBeans Dream Team: Our Favorite NetBeans IDE Features!




AVBravo - June 17, 2014 04:28 PM
Configurar tu Servidor Mercurial Local

Configurar tu Servidor Mercurial Local
Fuente


Pasos:
1.  Crear un proyecto maven nuevo en NetBeans
 1.1 Crear la clase Main del proyecto


2. Con el proyecto seleccionado, Team->Mercurial->Initialize Repository...
Captura de pantalla de 2014-06-17 10:31:43.png


3.Dar ok en el dialogo
i.png


4. Clic derecho en el proyecto Mercurial->Add
5. Clic derecho en el proyecto Mercurial->Commit
v.png


7. Cerrar el proyecto
8. Desde el terminal entrar a la carpeta del proyecto
/home/avbravo/NetBeansProjects/tutorial/integrador


9. Ejecutar el servidor mercurial
 hg serve


10. Indica que esta escuchando en el puerto 8000
hg.png


11. Podemos consultarlo desde el browser
80.png


12. Desde terminal
  • Nos ubicamos en el directorio NetBeansProjects
cd NetBeansProjects


  • Crear el directorio integracion continua
mkdir integracioncontinua


  • Entrar al directorio
cd integracioncontinua


  • Clonamos el proyecto
hg clone http://localhost:8000/ recipes





13. Abrirlo desde NetBeans IDE
ide.png


Tenemos el proyecto clonado
t.png


  • Cambiamos cualquier linea de codigo
public class NewMain {


   /**
    * @param args the command line arguments
    */
   public static void main(String[] args) {
       // TODO code application logic here
       System.out.println("programa principal");
   }
   
}



14. Selecccionar proyecto dar clic derecho
  • Mercurial->Commit
cc.png


  • Mercurial-->Remote->Push Current Branch
ss.png


Verificamos en el browser
rr.png

AVBravo - June 15, 2014 10:47 PM
Columnas editables en un datatable con primefaces

Utilizar <p:cellEditor>, y un facet name=”output” para mostrar la salida mediante un  <p:outputLabel> y un     <f:facet name="input"> donde usaremos un <p:inputText> para obtener los datos de entrada.
<p:ajax event="cellEdit" listener="#{pagosfijosSearchController.onCellEdit}" update=":form:growl,:form:datatableImpuestos" />

<p:column>
                               <f:facet name="header">
                                   <p:outputLabel value="#{msg.exoneracion}"/>
                               </f:facet>
                               <p:cellEditor>  
                                   <f:facet name="output">
                                       <p:outputLabel value="#{item.exoneracion}" >
                                            <f:convertNumber type="number" locale="Locale.US" groupingUsed="true" minFractionDigits="2" pattern="#0.00"/>
                                       </p:outputLabel>
                                   </f:facet>
                                 
                                   <f:facet name="input">
                                       <p:inputText value="#{item.exoneracion}" >
                                                    <f:convertNumber type="number" locale="Locale.US" groupingUsed="true" minFractionDigits="2" pattern="#0.00"/>
                                       </p:inputText>
                                   </f:facet>  
                               </p:cellEditor>  

                           </p:column>

AVBravo - June 15, 2014 10:31 PM
Obtener el número de fila de un datatable en primefaces

Usar la propiedad   rowIndexVar="rowIndex" de datatable

    <p:dataTable id="datatableImpuestos"
                                    rows="10"
                                    value="#{pagosfijosSearchController.listRecibosdetalles}"
                                    rowIndexVar="rowIndex"
                                    var="item"
                                    paginator="true"
                                    rowKey="#{item.idnivel6}"
                                    selectionMode="single"
                                    emptyMessage="#{app['info.notienedeudapendiente']}"

                                    selection="#{pagosfijosSearchController.selected}"
                                    filteredValue="#{pagosfijosSearchController.filtered}"
                                    editable="true" editMode="cell"
                                    >

CommandLink pasamos como parametro
<p:fragment autoUpdate="true">
                                   <p:commandLink update=":form"
                                                  value="#{item.idnivel6.idnivel6}"
                                                  action="#{pagosfijosSearchController.mostrarImpuestosPagar(rowIndex)}"
                                                  oncomplete= "PF('detallerecibosComponentDialogVar').show()"                                                         
                                                  title="#{app['boton.detalle']}"
                                                  rendered="#{menuBeans.pagos.consultar}"
                                                  >

                                       <f:setPropertyActionListener value="#{item}" target="#{pagosfijosSearchController.selected}" />  
                                   </p:commandLink>  

                               </p:fragment>


En el método definimos un parámetro de tipo Integer que contendra el numero de fila.
public String mostrarImpuestosPagar(Integer row){
       fila = row;
       
       encontarImpuesto();
       varexoneracion = selected.getExoneracion();
       varpago = selected.getPago();
       varsaldo = selected.getSaldo();
       return null;
       

   }

AVBravo - June 14, 2014 02:19 AM
Formatear decimales en Java Server Faces

En algunas ocasiones deseamos formatear decimales, en nuestra aplicación Java Server Faces
Podemos usar    <f:convertNumber  e indicamos los paremtros que deseamos.
locale = localización especifica
pattern = patrón deseado
type= especificar number para indicar que sera numeros.

 <p:outputLabel value="#{pagosfijosSearchController.impuestos.idnivel6.valor}">
                     <f:convertNumber type="number" locale="Locale.US" groupingUsed="true" minFractionDigits="2" pattern="#0.00"/>

                </p:outputLabel>


APIDesign - Blogs - June 02, 2014 07:49 AM
Podcast related to Japanese Translation

--JaroslavTulach 07:49, 2 June 2014 (UTC)

AVBravo - May 31, 2014 11:47 PM
Instalacion de Mongodb

Instalacion de Mongodb

1. Descargarlo desde
o mendiante

2. Descomprimir el archivo y renombrar la carpeta como mongodb
mongo.png
estare en la ruta /home/avbravo/mongodb
3. Agregarlo al path en /etc/profile
  sudo gedit /etc/profile
  export PATH=$PATH:/home/avbravo/mongodb
Guardamos el archivo.

4. Desde la consola ejecutamos
export PATH=$PATH:/home/avbravo/mongodb


5. Crear el directorio data
sudo mkdir -p /data/db

6. Darle permisos de escritura a la carpeta
  sudo chmod 777 /data/db

7. Ejecutarlo

mongod
m.png
8. se muestra en la consola
f.png


9. Abrir otra ventana de consola
ejecutar
mongo
g.png


AVBravo - May 30, 2014 03:01 PM
Copiar la estructura de una tabla en MySQL desde NetBeans

Existen muchas formas de hacer este procedimiento, herramientas de migración, a través de script, en esta ocasión mostrare una utilidad dentro de NetBeans IDE, que te permite realizar la operación de manera sencilla.

Escenario:
 Tenemos un base de datos con una serie de tablas
Desde la pestaña de NetBeans, observamos la base de datos scrumweb



 Tenemos una base de datos llamada prueba

Deseamos copiar la estructura de la tabla gruposusuarios a la base de datos prueba.
Dar click derecho en gruposusuarios y seleccionar Grab Structure...


nos solicita el nombre del archivo 

nos ubicamos en la base de datos prueba, en tablas y selecionamos Recreate Table

seleccionamos el archivo .grab

se muestra el script, presionar el botón Ok, también se puede editar el script.

y se genera la estructura de la tabla en la nueva base de datos.















AVBravo - May 15, 2014 10:27 PM
Entrevista a Gerardo Nuñez sobre Java 8

Nuestro sexto entrevistado, es un gran amigo y figura muy prominente en el mundo del desarrollo de aplicaciones y gran colaborador en la promoción del conocimiento en Panamá. Gerardo Nuñez.


Podrías hablarnos algo sobre ti

En 1997 tuvimos nuestro primer contacto con Java 1.1 y luego desarrollamos algunos Applets en nuestra primear versión de banca en línea en 1998. Desde entonces hemos esta haciendo diferente cosas con Java.

¿Cual ha sido tu experiencia con Java?

Aunque hemos trabajado en varias versiones de java, el desarrollo de sistemas Web nos ha ocupado la primera década desde el año 2001 hasta la actualidad. En el 2007 nos unimos al grupo de usuarios de Java de Panamá. También hemos trabajado con Groovy y Grails. En la actualidad estamos viendo la posibilidad de desarrollar algunos proyectos con Scala. Estos lenguajes que trabajan con el JVM ofrecen algunas ventajas sobre java, pero más que competencia para java, han agradando su ecosistema.
Como siempre le digo a los estudiantes: Cuando hablamos de Java, el lenguaje es el 20% de los sistemas, el otro 80% es una serie de Frameworks y bibliotecas que han sido desarrolladas y probadas por muchos años.

¿Como consideras la  nueva versión Java 8?

Primero que todo hay que mencionar a los lambdas, ya que es el cambio que ha mi parecer ha llamado mas la atención a la comunidad de desarrolladores de Java. Alguien me comentaba que ahora con los Lambdas ya no era necesario aprender Scala. Quisiera mencionar que la implementación de los Lambas en Scala obedece al carácter Funcional de Scala, además hay algunas diferencias en el desarrollo en Scala y en Java. Las nuevas clases de Fecha y Hora creo que aunque no son tan impactantes como los Lambas eran necesarias y muy practicas.


¿Que opinas de lambda, stream?
Nos permiten que el código se muestre en una forma declarativa. Es una de las piezas mas importantes de esta nueva versión de Java. Pero implica también un cambio en la forma de implementar las soluciones en nuestro programas en Java.

¿Conoces empresas/desarrolladores que están migrando a Java8?
Todavía es un poco apresurado en hablar de migrar a Java 8. Creo que es tiempo de estudiar todas las bondades de esta nueva versión y planificar en migrar algunos módulos de sistemas existentes e iniciar el desarrollo de nuevos sistemas con Java 8.

¿Características deben ser agregadas o removidas de la plataforma?
Definitivamente es complicada la pregunta, pero te diría que hay que revisar otras plataformas y ver que podemos agregar a Java, como los Reconocimientos de Patrones (pattern matching) en Scala.


Recomendaciones

Antes de escribir una línea de código para un sistema en producción con las nuevas funcionalidades de Java 8. Hay que escribir bastante código de prueba y evaluar las ventajas de los nuevos API de Java 8 para estar seguro que es la solución a nuestro problema.


AVBravo - May 13, 2014 02:21 PM
Migrar de Primefaces 4.0 a Primefaces 5.0

La nueva versión de primefaces.org, contiene gran corrección de errores y mejoras en los componentes.

Alguna consideraciones para el proceso de migración desde NetBeans IDE
En el archivo pom.xml, actualizar la versión 5.0



Seleccionar el proyecto y Build with Dependences

en las dependencias se muestra la versión 5.0

En el archivo web.xml


implementamos  BeanValidation to HTML, agregando
 <context-param>
        <param-name>primefaces.TRANSFORM_METADATA</param-name>
        <param-value>true</param-value>
    </context-param>


<p:toolbarGroup> fue depreciado en esta versión

Cambiar
<p:toolbarGroup align="left">                     
por
<f:facet name="left"> 


Cambiar
<p:toolbarGroup align="right">                     
por
<f:facet name="right">


Cambiar
</p:toolbarGroup>
por
</f:facet>


Para acceder a los componentes como diálogos 
debemos utilizar
oncomplete="PF('myDialogo').show()"
en lugar de
oncomplete="myDialogo.show()"





AVBravo - May 13, 2014 02:10 PM
Algunos aspectos de NetBeans IDE

Actions Items
Seleccionar en el menú Windows->Action Items


muestra el componente Action Items

dar clic en Show action items for the selected projects

mostrara la lista de Action en el proyecto


Task
En el menú Windows->Task
clic derecho en Local Tasks seleccionar Create Task




Podemos crear y administrar nuestras tareas de forma local.

Historial 
El IDE nos permite de forma rápida ver el historial del código
En la pestaña History, se muestra la fecha y hora de los cambios realizados.

al dar clic, podemos observar la diferencia

dar clic derecho y seleccioar revert to 44












AVBravo - May 02, 2014 01:29 AM
Entrevista a Alexis Lopez sobre Java 8

La quinta entrevista es un honor entrevista a Alexis Lopez, quien nos comenta sobre Java 8



Podrías hablarnos algo sobre ti
Llevo alrededor de 14 años trabajando con tecnología Java y creo que he probado todos sus sabores: Java SE, Java EE y Java ME. Soy líder del grupo de usuarios Java de la ciudad de Cali (www.clojug.org) y blogger activo en www.java-n-me.com. Me gusta mucho esta tecnología y disfruto desarrollar aplicaciones usándola.

¿Cual ha sido tu experiencia con Java?
Empecé con Java por cosas del destino, había empezado a estudiar ing. de sistemas y el curso de algoritmos y programación era con Turbo Pascal, por allá en 1999. Tuve que abandonar mis estudios por cumplir con mi deber ciudadano de prestar servicio militar en mi país y cuando regresé, 1 año más tarde, la universidad ya estaba usando Java, por lo que repetí el curso y desde entonces no me he separado de Java. 

¿Como consideras la  nueva versión Java 8?
Un gran cambio. La verdad, si alguien no se interesa en aprender la nueva forma de programar usando lambdas, el día de mañana no va a ser capaz de leer código escrito por otra persona que sí las use. Esta versión tiene características nuevas que permitirán escribir código más claro y con más significado, sin dejar de lado mejoras en rendimiento y la posibilidad de aprovechar las capacidades multicore de las máquinas de hoy en día.

¿Que opinas de lambda, stream?
Lo mejor de esta versión. A mi parecer, es la característica más importante que tiene Java 8. Cuando la presentamos en las reuniones de nuestro grupo de usuarios, todos los asistentes quedan asombrados y motivados con esta nueva forma de programar y con las ventajas y bondades que ofrecen. Lo que se puede hacer con stream en colecciones me parece que nos va a dar a los desarrolladores herramientas fáciles de usar para el manejo de grandes cantidades de información y aprovechando al máximo las capacidades multicore de las máquinas.

¿Conoces empresas/desarrolladores que están migrando a Java8?
La semana pasada realizamos el lanzamiento de Java 8 en Colombia en lo que fue denominado Java 8 Tour, dónde evangelistas y Java Champions están visitando diferentes JUGs alrededor del mundo para llevar a cabo conferencias y talleres. No pasará mucho hasta que algunos de nuestros miembros empiecen a desarrollar/migrar aplicaciones de sus empresas a Java 8.

¿Características deben ser agregadas o removidas de la plataforma?
Esta es una pregunta muy complicada por la cantidad y diversidad de las aplicaciones que existen, no me siento en capacidad de responderla.

Recomendaciones
Definitivamente actualizarse a Java 8, aprovechar las nuevas características de fechas y tiempo, lambdas, streams, etc. Asistir a los eventos que organicen los grupos de usuarios para estar al día con lo nuevo de Java y como no, asistir a los eventos virtuales que tiene Oracle al respecto.




AVBravo - April 16, 2014 02:00 PM
Revisión del libro Learning PrimeFaces Extensions Development

El libro "Learning PrimeFaces Extensions Development "
http://www.packtpub.com/learning-primefaces-extensions-development/book


Ofrece una explicación detallada del uso de PrimeFaces Extension, de manera que podemos trabajar rápidamente con un proyecto utilizando los diversos componentes.
Explicación detallada y fácil, te permitirá conocer y crear una aplicación completa.
Se muestra el uso de Layout, Dinamyc Forms, entre otros.
Sin duda un libro necesario.

AVBravo - April 14, 2014 08:01 PM
Entrevista a Adam Bien sobre Java 8

En esta cuarta entrevista converse con Adam Bien, quien ha escrito varios libros sobre JavaEE, acerca de su opinión sobre Java8

 




 1.Could you  tell us something about yourself
My name is Adam Bien (adam-bien.com), I'm a contractor / freelancer and so Singleton.  I really like the Java Programming Language.
Three times a year I'm delivering Java EE workshops at the MUCs Airport to an truly international audience -- http://airhacks.com

 2. What has been your experience with Java?
I'm working with Java since 1995. I started implementing serverside Java with the JavaWebServer. On the client I started with Applets, AWT, then evaluated JFC, then Swing, first versions of JavaFX Script. Java remains exciting. I really like it.

3. How do you consider the new Java 8 release?
It is a really big deal. I used Java 8 for about one year. Since the last JavaOne Java 8 is really stable. I ran NetBeans and all my development on Java 8 daily builds.

Also Nashorn is exciting. It saved me already several hours of my time with the maintenance of my web sites: https://github.com/AdamBien/spg


 4. What do you think of lambda, stream?
I already removed JPA with JPA QL and replaced it with plain domain objects, an in memory-grid and Lambdas with streams.
I think Java 8 will have a huge impact on Java EE architectures.


5. Do you know companies / developers who are migrating to Java8?
There is nothing to migrate :-). In some projects we just launched the server on Java 8.

Other projects were started already last year on Java 8--just because of lambdas. If possible you should upgrade as fast as possible to Java 8.


 6. What are the characteristics that should be added to or removed from the platform?
I really miss Jigsaw. Even more syntactic sugar would be nice, but I really like the direction Oracle's engineers are going with Java.


 7- Recommendations

Stay passionated and enjoy hacking. Keep away from meetings, politics and the boring stuff :-)

Thank you for the interview!

 workshops.adam-bien.com
 blog.adam-bien.com
 about.adam-bien.com

 Author of:
 "Real World Java EE Night Hacks", "Real World Java EE Patterns--Rethinking Best Practices"

AVBravo - April 11, 2014 02:05 PM
Entrevista a Constantin Drabo sobre Java 8


Continuando con la serie de entrevistas sobre Java8, en esta ocasión converse con mi amigo Drabo.

1.Could you  tell us something about yourself
I'm Constantin Drabo from Burkina Faso where I'm working as software
engineer in National Treasury Office. I'm founder  FasoJUG  and Google
Developer Group  manager. I'm also contributor at both NetBeans
Community and Fedora Project where I've been elected as ambassador
since 2010.



2. What has been your experience with Java?
My first contact with Java is in 2002 when I'm student. I wrote my
first java program after reading the book of Anne
Tasso(http://www.editions-eyrolles.com/Livre/9782212111002/le-livre-de-java-premier-langage)
. I developed also several applications both academic and
professional. In my free time I help java moving forward by publishing
tutorials and evangelize.

3. How do you consider the new Java 8 release?
This release is seriously a great bunch for Java technology. I think
Oracle mistook by evolving slowly the platform. They should add  the
new features since a while.
This release comprises several interesting features. The prominent
ones are Java Embedded ,  scripting language support and IoT (Internet
of Things).

4. What do you think of lambda, stream?
With Lambda expression  they introduced functional programming into
Java. This concept is not new since there are already several language
that integrate it (PHP, Ruby, etc). In syntax level it is very strong
, but I skeptical according it usefulness. I think it can be a
concurrent of Nashorn which introduces the usage of a functional
language; JavaScript.Stream API contents  some important classes that
makes easy parallelization.


5. Do you know companies / developers who are migrating to Java8?
Franky speaking, the Java technology is very slow to be adopted here
in companies. Most of them use proprietary solutions and Java is
seeing as a hard adopted technology.
But some are very fun of Java !  I do not know if someone is ready to
move to Java 8 soon.


6. What are the characteristics that should be added to or removed from the platform?
The plateform is becoming  rich and complete. I think there is nothing
to be removed.

7- Recommendations
Java 8 is great  move on it as quick as possible  !


Constantin

AVBravo - April 03, 2014 02:13 PM
Entrevista a Jorge Guerra Guerra sobre Java 8

Continuando con la serie de entrevistas sobre Java 8, en esta ocasión conversamos con nuestro gran amigo Jorge Guerra.

Sitio web: https://sites.google.com/site/jguerra91/



1. Podrías hablarnos algo sobre ti

Soy Ing. Electronico y Lic. en Computación, trabajo como docente en Sistemas Distribuidos en la Universidad Nacional Mayor de San Marcos y en la Universidad Inca Garcilaso de la Vega, y soy capacitador en New Horizons Peru S.A. en todo lo que es tecnología Java.
He escrito dos libros de Java con Netbeans (Cliente / Servidor y aplicaciones Web), trabajo en tecnologías de todo nivel desde 1999, y actualmente desarrollo aplicaciones en Android usando Android Developer Tools (también en Java) 


2. ¿Cual ha sido tu experiencia con Java?
Desde que conocí Java (en 1998, usando Visual Age for Java de IBM) he apoyado el desarrollo de soluciones informáticas usando este lenguaje. En Peru, es el lenguaje ,mas usado, tanto en aplicaciones académicas como en desarrollos empresariales y he tenido oportunidad de participar en varias proyectos web y actualmente en la nube (usando Google App Engine) y ha sido realmente una gran experiencia profesional.

3.¿Como consideras la  nueva versión Java 8?
Es una versión que implementa ideas muy interesantes que van a obligar a cambiar código en muchos proyectos actuales, pero sobre todo en aquellas en la que se esta implementando aplicaciones sobre Cloud Computing, debido a las bondades que ofrecen los nuevos conceptos sobre stream , lambda y el nuevo papel que asumen las interfaces.

4. ¿Que opinas de lambda, stream?
Lo mejor que le pudo pasar a Java, es una apuesta clara a un código muchos mas compacto y definitivamente una evolución definitiva a la computación paralela que hace tiempo Java debió impulsar.
Otra cosa fundamental es stream que impulsa el concepto map/reduce indispensable cuando se hacen aplicaciones en Cloud Computing y sobre todo cuando se usan bases de datos NoSQL.

5.¿Conoces empresas/desarrolladores que están migrando a Java8?
Varias empresas de desarrollo están evaluando las nuevas características en algunos desarrollos actuales, pero todavía no hay una aplicación concreta que se este desarrollando con Java 8.

6.¿Características deben ser agregadas o removidas de la plataforma?
Me parece muy importante que se agregue de manera definitiva la posibilidad de convertir automáticamente datos de tipo simple a String y viceversa, mejoraría mucho el código. En AppInventor se realiza esto sin ningún problema.
Otra cosa que debería agregarse es un modelo de parseo XML similar al de JDom que me parece mucho mas practico que el tradicional org.xml del JDK actual.

7.Recomendaciones
Divulgar en articulos y charlas los nuevos conceptos alrededor de lambda, para que los nuevos programadores los puedan usar en futuros desarrollos.



AVBravo - April 01, 2014 04:32 PM
Entrevista a Raul Casado Piqueras sobre Java 8

En esta ocasión haré una serie de entrevistas a grandes desarrolladores Java sobre su opinión acerca de Java 8.
Tenemos la primera entrevista que corresponde a un gran amigo Raul Casado Piqueras, quien ha contribuido durante muchos años en las comunidades hispanas de Java.

  1.  

1. Podrías hablarnos algo sobre ti

Soy Ingeniero Informático y llevo trabajando con tecnologías de la información desde hace más de 15 años. Trabajo como consultor y director de proyectos para compañías que tienen presencia en grandes clientes, con necesidades tecnológicas muy dispares. 

2. ¿Cual ha sido tu experiencia con Java?
Java ha sido uno de los lenguajes en los que me inicié en el mundo de la programación profesional y en el que más recorrido he tenido, hasta el punto que es una de mis áreas de conocimiento más fuerte. No sólo por conocimientos en el lenguaje en sí mismo, sino por el ecosistemas de herramientas que han evolucionado en torno al mismo. 

3.¿Como consideras la  nueva versión Java 8?
A lo largo de las diferentes versiones que se han ido lanzando se han ido incorporando funcionalidades muy interesantes, y sin duda en esta ocasión las novedades son muy esperadas. Las mejoras a nivel de JVM son cruciales en entornos empresariales, donde la crisis actual ha obligado a volver a pensar en términos de optimización de recursos.

4.¿Que opinas de lambda, stream?
Otra mejora cuya aplicación a nivel profesional es crucial: permite econtrar economías de escala a nivel de código, permitiendo al desarrollador un código más fácil de mantener, más sencillo de construir y mucho más reutilizable, más allá de la encapsulación de contenido. Generics, annotations y ahora lambda, son armas indispensables para conseguir un código mantenible, reutilizable y ajustado a las necesidades de los clientes.
Stream por otro lado, es una mejora que a priori puede suponer en los entornos empresariales un ahorro enorme, sobre todo al implementar estrategias como por ejemplo paralelizar su procesamiento. No sólo permite tener un código más sencillo, sino que simplifica la distribución de la carga de trabajo entre los diferentes núcleos o cualquier otra estrategia que se adapte a las necesidades de negocio

5. ¿Conoces empresas/desarrolladores que están migrando a Java8?
Personal y profesionalmente estoy animando a mis clientes a incluir las nuevas características de Java8 a sus soluciones. Son ventajas competitivas que deben ser aprovechadas lo antes posible porque son la evolución natural del lenguaje y el futuro del desarrollo. Nadie se acuerda hoy de cuando aparecieron los Collections y como se cuestionaba su idoneidad ... y hoy en día son claves en cualquier solución Java! 

6. ¿Características deben ser agregadas o removidas de la plataforma?
Cualquier simplificación del lenguaje es bienvenida y sin duda las optimizaciones y el profiling son algo que todos deseamos. Cuanto más sencillo sea el lenguaje en sí, mucho mejor. Closures, con la aparición de Lambda, puede que pasen a la historia, de la misma manera que Iterator lo haga con Stream. Sin duda, serán los desarrolladores los que decidirán que encaja más en la soluciones. No debemos olvidar que las soluciones que hay basadas en Java se cuentan por millones, por lo que hay cosas que son difíciles de eliminar, sobre todo si la comunidad vuelve a tener un papel relevante.

7.Recomendaciones
No hay que tener miedo a probar las nuevas funcionalidades que Java 8 ofrece, al contrario, hay que intentar ver en ellas una oportunidad para crear un código más sencillo, mantenible, eficiente y óptimo. Un lenguaje que nos centre en el desarrollo y menos en el lenguaje en sí, es sin duda nuestra mejor oportunidad para satisfacer mejor las necesidades de nuestros clientes




AVBravo - March 29, 2014 05:44 PM
Crear componentes Java Server Faces con NetBeans

Crear componentes Java Server Faces

En este ejemplo tenemos el siguiente dialogo.


podemos reemplazarlo por un un componente personalizado


Pasos para la creación del componente
 Crear la carpeta javscaz dentro de resources
Crear la pagina eliminar.xhtml


En la sección  <composite:interface>
Definimos el nombre del atributo con <composite:attribute name>
para los métodos usamos  method-signature y especificamos el tipo de valor de retorno.


En la sección <composite:implementation>, realizamos la implementacón del codigo.
Para usar el valor  nos basamos en la sintaxis cc.attrs.nombredelatributo 

  <p:commandButton id="removeButton" value="#{app['boton.yes']}"
                                 update="#{cc.attrs.buttonYesUpdate}"
                                 oncomplete="#{cc.attrs.buttonYesOncomplete}"
                                 actionListener="#{cc.attrs.buttonYesAction}" />


Secciones:
1. namespace
2. composite interface
3. composite implementation
4. uso de componentes




En la pagina que deseamos usarlo nivel1.xhtml
en el namespace incluir (nombre de la carpeta en resources)
 xmlns:javscaz="http://java.sun.com/jsf/composite/javscaz"

Agregar el componente formato: namespace:nombredecomposite, y colocamos los valores a los atributos.
  <javscaz:eliminar
                            buttonNoOnclick="PF('confirmationwidgetVar').hide()"
                            
                            buttonYesAction="#{nivel1Controller.delete()}"
                            buttonYesOncomplete="PF('confirmationwidgetVar').hide();"
                            buttonYesUpdate=":form:panel,:form:growl"
                            />







AVBravo - March 28, 2014 03:27 PM
Java 8 Launch

Videos sobre Java 8



AVBravo - March 26, 2014 02:55 PM
lambda operación de suma usando NetBeans 8

lambda operación de  suma   usando NetBeans 8

Tradicional mente podemos realizar la suma de las personas con edad >= 30
Integer suma=0;
    for(Persona p:list){
                  if(p.getEdad() >=30 ){
                      suma += p.getEdad();
                  }
               
              }

si utilizamos lambda

  suma = list.stream().filter((p) -> (p.getEdad() >=30 )).map((p) -> p.getEdad()).reduce(suma, Integer::sum);

AVBravo - March 26, 2014 02:37 PM
NetBeans 10,15 años

Algunos recuerdos de los aniversarios de NetBeans
NetBeans 10 años




NetBeans 15 años






AVBravo - March 25, 2014 07:10 PM
Lambda JDK8 con NetBeans para Novatos

Ejemplo sencillo de Lambda con NetBeans


Crear un proyecto nuevo
File--> New Project-->Categories: Maven Projects: Java Application

Indicamos el nombre del proyecto

El IDE genera el esqueleto del proyecto



En propiedades del proyecto
Sources--> Source/Binary Format:



Crearemos una clase llamada Persona con los atributos (id,nombre,edad)
Clic derecho el paquete com.avbravo.testlambda --> New--> Java Class




Colocar el nombre: Persona

El IDE genera la nueva clase
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package com.avbravo.testlambda;

/**
 *
 * @author avbravo
 */
public class Persona {
    
}

Clic derecho en el código -->Seleccionar Insert Code...


Seleccionar Add Property...

Agregamos la propiedad id y tipo String. Se generan los métodos set/get
repetimos el proceso para el atributo String nombre, Integer edad;
Agregamos los métodos constructores
 public Persona() {
    }

    public Persona(String id, String nombre, Integer edad) {
        this.id = id;
        this.nombre = nombre;
        this.edad = edad;
    }

Agregar el método toString(). Clic derecho Insert Code---> toString()


@Override
    public String toString() {
        return "Persona{" + "id=" + id + ", nombre=" + nombre + ", edad=" + edad + '}';
    }

Código completo Persona.java:

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package com.avbravo.testlambda;

/**
 *
 * @author avbravo
 */
public class Persona {
    
    private String id;

    private String nombre;

    private Integer edad;

    public Persona() {
    }

    public Persona(String id, String nombre, Integer edad) {
        this.id = id;
        this.nombre = nombre;
        this.edad = edad;
    }

   
    

    /**
     * Get the value of edad
     *
     * @return the value of edad
     */
    public Integer getEdad() {
        return edad;
    }

    /**
     * Set the value of edad
     *
     * @param edad new value of edad
     */
    public void setEdad(Integer edad) {
        this.edad = edad;
    }

    /**
     * Get the value of nombre
     *
     * @return the value of nombre
     */
    public String getNombre() {
        return nombre;
    }

    /**
     * Set the value of nombre
     *
     * @param nombre new value of nombre
     */
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    /**
     * Get the value of id
     *
     * @return the value of id
     */
    public String getId() {
        return id;
    }

    /**
     * Set the value of id
     *
     * @param id new value of id
     */
    public void setId(String id) {
        this.id = id;
    }

    @Override
    public String toString() {
        return "Persona{" + "id=" + id + ", nombre=" + nombre + ", edad=" + edad + '}';
    }


}

Crear una Java Main Class...





Agregamos un ArrayList<Persona> , escribimos un segmento de código sin usar Lambda, donde usamos un for y una condición lógica para filtrar 
  for(Persona p:list){
                  if(p.getEdad() >=30 ){
                       System.out.println(" --> "+p.toString());
                  }
                 
              }
clic en el asistente y seleccionar Use functional Operation

el ide genera el código lambda
 list.stream().filter((p) -> (p.getEdad() >=30 )).forEach((p) -> {
                System.out.println(" --> "+p.toString());
            });

Se usa un stream() de la lista ,se aplica el filtro 


Código Completo

  package com.avbravo.testlambda;

import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author avbravo
 */
public class Prueba {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
       try {
              List<Persona> list = new ArrayList<>();
              list.add(new Persona("1","anna",25));
              list.add(new Persona("2","jhoan",30));
              list.add(new Persona("3","maria",40));
              System.out.println(" sin utilizar lambda");
              for(Persona p:list){
                  if(p.getEdad() >=30 ){
                       System.out.println(" --> "+p.toString());
                  }
                 
              }
              System.out.println("lambda");
              list.stream().filter((p) -> (p.getEdad() >=30 )).forEach((p) -> {
                System.out.println(" --> "+p.toString());
            });
        } catch (Exception e) {
            System.out.println("Error "+e.getLocalizedMessage());
        }
      
    }

Ejecutamos el proyecto

    
}

AVBravo - March 20, 2014 04:35 PM
One Click Open Sesame

Geertjan Wielenga, desarrollo el plugin  One Click Open Sesame 
que permite abrir los archivos al dar simplemente un click.

Descargarlo desde: http://plugins.netbeans.org/plugin/53723/?show=true






Instalarlo
Menu NetBeans: Tools-->Plugin


Seleccionar la pestaña Downloaded, dar clic en el botón Add Plugins.., seleccionar el archivo .nbm descargado.

dar clic en el botón Install

luego de haberlo instalado simplemente al dar un clic sobre el archivo este se abre en el Editor.



AVBravo - March 18, 2014 07:50 PM
NetBeans IDE 8.0 Disponible

Esta disponible la versión final de NetBeans 8.0
https://netbeans.org/downloads/index.html


AVBravo - March 18, 2014 07:39 PM
JAVA SE8 disponible


Disponible JDK8





AVBravo - March 18, 2014 05:05 PM
Conexión Base Datos WildFly

Conexión Base Datos WildFly

Fuente:

Agregar Driver JDBC MySQL

Descargarlo desde
http://dev.mysql.com/downloads/connector/j/


En Runtime→Manage Deployments→presionar el botón Adda.png


presionar el botón Seleccionar archivo

sd.png










seleccionar el driver jdbc mysqlmysql.png



Presionar el botón Nextn.png




Presionar el botón Savesa.png



Se muestra el driver agregado,Dar clic en En/Disables.png





Confirmar la solicitud

r56.png

Se muestra el conector habilitado

ens.png

Crear un modulo

Pasos:
  1. Entrar al directorio /modules/system/layers/base/com dentro de wildFly
  2. crear el directorio mysql/main
  3. Copiar el jdbc driver a ese directorio
  4. Crear el archivo module.xml



Entrar el directorio
cd wildfly-8.0.0.Final/modules/system/layers/base/com


Crear el directorio mysql
mkdir mysql


Crear el directorio main
cd mysql
mkdir main


Copiar el driver jdbc mysql al directorio main recién creados.png


Crear el archivo module.xml
gedit module.xml


<?xml version="1.0" encoding="UTF-8"?>
       <module xmlns="urn:jboss:module:1.1" name="com.mysql">
           <resources>
               <resource-root path="mysql-connector-java-5.1.29-bin.jar"/>
           </resources>
           <dependencies>
               <module name="javax.api"/>
               <module name="javax.transaction.api"/>
           </dependencies>
       </module>


Agregar la configuración
Podemos hacerlo desde la línea de comandos o editar directamente el archivo standalone.xml
Editaremos el archivo standalone.xmlt
gedit  wildfly-8.0.0.Final/standalone/configuration/standalone.xml
Localizamos <datasources>, agregamos el driver

d.png

Agregamos el driver
<driver name="mysql" module="com.mysql">
     <xa-datasource-class>
       com.mysql.jdbc.jdbc2.optional.MysqlXADataSource
     </xa-datasource-class>
   </driver>


s.png

En Profile→ Connector→Datasources dar clic en Add

add.png


En Name colocamos el nombre rigemdb
y en JNDI Name a diferencia de GlassFish debemos incluir el prefijo java:/
java:/jdbc/rigmendb

n.png




En la siguiente ventana como detecto el driver mysql dar clic en Nextd.png




Especificar


  • Connection URL: jdbc:mysql://localhost:3306/rigemdb
  • Username: root
  • Password: secret

d.png







Se muestra, el datasourcesa.png



presionar el botón Enable,d.png
presionar el botón Confirm , para confirmar la solicitud
Queda habilitadoa.png


Seleccione la pestaña Pool y presione el botón Edit4.png



y cambie los valores Min Pool Size a 5 y Max Pool Size a 15 y presione el botón Save

a.png













En la pestaña Connection dar clic en el botón Test Connection

t.png

Nos envía el mensaje de conexión exitosad.png



AVBravo - March 17, 2014 07:21 PM
Línea de Comandos WildFly

Línea de Comandos WildFly

Para usar la consola de administración debemos ejecutar jboss-cli.sh

./jboss-cli.sh

s.png


Conectarse al server
ejecutar el comando
connectcc.png

Si es exitoso se muestra el prompt como aparece en la figura.

Para salir
ejecutar

quit


AVBravo - March 17, 2014 04:26 PM
Crear un pool de Conexiones en GlassFish

En Glassfish podemos crear el pool de conexiones desde la interfaz en el browser


O podemos editar el archivo domain.xml , ubicado
en glassfish-4.0/glassfish/domains/domain1/config

gedit gedit glassfish-4.0/glassfish/domains/domain1/config/domain.xml

en la sección  <resources>
Agregamos
  • jdbc-connection-pool: Para crear el pool de conexión
  • jdbc-resource pool-name: Para crear recursos JDBC

<jdbc-connection-pool datasource-classname="com.mysql.jdbc.jdbc2.optional.MysqlDataSource" 
                          res-type="javax.sql.DataSource" name="scrumwebPool">
      <property name="password" value="secreted"></property>
      <property name="user" value="root"></property>
      <property name="databaseName" value="scrumweb"></property>
      <property name="portNumber" value="3306"></property>
      <property name="url" value="jdbc:mysql://localhost:3306/scrumweb"></property>
    </jdbc-connection-pool>
    <jdbc-resource pool-name="scrumwebPool" jndi-name="scrumweb"></jdbc-resource>








AVBravo - March 17, 2014 02:23 PM
Crear usuarios en WildFly

Arrancar WildFly
cd wildfly-8.0.0.Final/bin/

./standalone.sh

En el browser ingresar



Agregamos un usuario
./add-user.sh
Se despliega un menú donde nos solicita el tipo de usuariotipo.png
en este caso seleccionamos a  y presionamos enter
Ahora solicita  el nombre del usuarioadd.png


Luego ingresamos el passwordpassword.png
Se solicita la confirmación del password
Solicita los grupos. Dejamos en blanco y presionamos entergrupos.png
Respondemos yes a la solicitud de confirmación.yes.png
Solicita confirmación de confirmación, respondemos yesejbs}.png

Ahora si entramos al browser
nos solicita el usuario y password.9090..png
Aparece la página de administraciónadmin.png

AVBravo - March 12, 2014 07:46 PM
Integrar WildFly con NetBeans

Integrar WildFly con NetBeans

Descargar WildFly desde

Descomprimir el archivo .zip
s.png

Entrar al directorio bin
cd /wildfly-8.0.0.Final/bin
Ejecutar
./standalone.sh

En el browser
Para administración: localhost:9990

9990.png
Para aplicaciones:    localhost:8080l.png


Descargar el Plugin WildFly

Instalamos el plugin

En la pestaña Services
add.png



Seleccionamos Server: WildFly Application Server
w.png

Seleccionamos el directorio
ub.png




Y dejamos la configuración predeterminadainstancia.png



Con esto tenemos el servidor configurado
s.png

AVBravo - March 12, 2014 07:05 PM
Reportes Agrupados con iReport + Java Server Faces + JPA

Reportes Agrupados con iReport + Java Server Faces + JPA

y.png

Definimos los Fieldsca.png



dar clio derecho en report name seleccione Add Report Group

aa.png


indicar el nombre y seleccionar el Fielde.png



marcar Add the group header y Add the group footerf.png














En el diseñador arrastrar los atributos a la sección de grupo  y a detalle los correspondientes.A.pngEn



AVBravo - March 12, 2014 06:59 PM
Reportes iReport + Java Server Faces + JPA

Reportes iReport + Java Server Faces + JPA

Crearemos un reporte de usuarios mostrando el grupo de usuario que pertenece el otro  Entity


r.png



Entity Usuarios

Si observamos existe el atributo idgrupousuario de tipo Grupousuario
public class Usuarios implements Serializable {
   @Basic(optional = false)
   @NotNull
   @Size(min = 1, max = 70)
   @Column(name = "tema")
   private String tema;


   @JoinColumn(name = "idmunicipio", referencedColumnName = "idmunicipio")
   @ManyToOne(optional = false)
   private Municipios idmunicipio;
   private static final long serialVersionUID = 1L;
   @Id
   @Basic(optional = false)
   @NotNull
   @Size(min = 1, max = 35)
   @Column(name = "username")
   private String username;
   @Basic(optional = false)
   @NotNull
   @Size(min = 1, max = 150)
   @Column(name = "password")
   private String password;
   @Basic(optional = false)
   @NotNull
   @Size(min = 1, max = 60)
   @Column(name = "nombre")
   private String nombre;
@JoinColumn(name = "idgrupousuario", referencedColumnName = "idgrupousuario")
   @ManyToOne(optional = false)
   private Grupousuarios idgrupousuario;







Editamos el Entity Grupousuario

En el método toString() retornamos el atributo que deseamos mostrar


public class Grupousuarios implements Serializable {
   private static final long serialVersionUID = 1L;
   @Id
   @Basic(optional = false)
   @NotNull
   @Size(min = 1, max = 35)
   @Column(name = "idgrupousuario")
   private String idgrupousuario;
   @Basic(optional = false)
   @NotNull
   @Size(min = 1, max = 50)
   @Column(name = "grupousuario")
   private String grupousuario;


@Override
   public String toString() {
      // return "com.javscaz.rigemjsf.Grupousuarios[ idgrupousuario=" + idgrupousuario + " ]";
       return grupousuario;
   }





Diseñamos el reporte

Agregar los atributos en Fieldsf.png


Nos ubicamos en el atributo idgruposusuario y seleccionar propiedades, en Field Class colocamos java.lang.Object
con esto invocaremos el método toString() del entity Grupousuario.f.png









Arrastramos los atributos al reporte.

d.png

AVBravo - February 26, 2014 08:00 PM
NetBeans IDE 8.0 RC1 Download

Ya esta disponible NetBeans IDE 8.0 RC1 Download
Desde el siguiente enlace
http://dlc.sun.com.edgesuite.net/netbeans/8.0/rc/

Características disponibles con esta liberación
https://netbeans.org/community/releases/80/relnotes.html


AVBravo - February 23, 2014 07:04 PM
Corregir error / UI Layout Initialization Error

Cuando desarrollamos una aplicación Java Server Faces podemos encontrarnos algunos errores en este caso mostraremos la imagen, cuando se trata de cargar una pagina.


Generalmente este error se genera cuando se hace referencia a un objeto con un id no existente,

En NetBeans  nos ubicamos en la consola de GlassFish , como observamos en la figura en el punto 1, indica que se esta haciendo referencia al objeto llamado toolbar, pero en nuestra pagina el componente toolbar tiene el id="toolbar1", lo que muestra que el componente con nombre toolbar no existe, la solución es colocarle el id="toolbar".




AVBravo - February 17, 2014 03:46 PM
PAGINA CON 4 SelectOneMenu

PAGINA CON 4 SelectOneMenu
En este ejemplo mostraremos el uso de selectOneMenu, en el cual se actualizaran dependiente de la selección que se realice

    <h:outputLabel value="#{msg.idnivel1}" for="idnivel1" />
                               <p:selectOneMenu converter="nivel1Converter" id="idnivel1"
                                                value="#{nivel2SearchController.nivel2.idnivel1}"                                                 
                                                filter="true" filterMatchMode="startsWith" effect="fade"
                                                >
                                   <!-- TODO: update below reference to list of available items-->
                                   <f:selectItem itemLabel="#{app['selectonemenu.select']}" itemValue="#{null}"/>  
                                   <f:selectItems value="#{nivel1SearchController.items}"
                                                  var="item"
                                                  itemValue="#{item}"
                                                  itemLabel="#{item.idnivel1} - #{item.nombre}"                                                    
                                                  />
                                   <p:ajax  process="idnivel1"  event="change"
                                            update=":form:idnivel2,:form:growl"
                                            listener="#{nivel2SearchController.changeItems()}"/>                                     
                               </p:selectOneMenu>
                               
                               <h:outputLabel value="#{msg.idnivel2}" for="idnivel2" />
                               <p:selectOneMenu converter="nivel2Converter" id="idnivel2"
                                                value="#{nivel3SearchController.nivel3.idnivel2}"  
                                                required="true" requiredMessage="#{msg.idnivel2} #{app['info.required']}"
                                                filter="true" filterMatchMode="startsWith" effect="fade"
                                                >
                                   <!-- TODO: update below reference to list of available items-->
                                    <f:selectItem itemLabel="#{app['selectonemenu.select']}" itemValue="#{null}"/>  
                                   <f:selectItems value="#{nivel2SearchController.itemsEntity}"
                                                  var="item"
                                                  itemValue="#{item}"
                                                  itemLabel="#{item.idnivel2} -  #{item.nombre}"
                                                  />
                                      <p:ajax  process="idnivel2"  event="change"
                                            update=":form:idnivel3,:form:growl"
                                            listener="#{nivel3SearchController.changeItems()}"/>        
                               </p:selectOneMenu>
                               
                                <h:outputLabel value="#{msg.idnivel3}" for="idnivel3" />
                               <p:selectOneMenu converter="nivel3Converter" id="idnivel3"
                                                value="#{nivel4SearchController.nivel4.idnivel3}"  
                                                required="true" requiredMessage="#{msg.idnivel3} #{app['info.required']}"
                                                filter="true" filterMatchMode="startsWith" effect="fade"
                                                >
                                   <!-- TODO: update below reference to list of available items-->
                                     <f:selectItem itemLabel="#{app['selectonemenu.select']}" itemValue="#{null}"/>
                                   <f:selectItems value="#{nivel3SearchController.itemsEntity}"
                                                  var="item"
                                                  itemValue="#{item}"
                                                  itemLabel="#{item.idnivel3} -  #{item.nombre}"
                                                  />
                                             <p:ajax  process="idnivel3"  event="change"
                                            update=":form:idnivel4,:form:growl"
                                            listener="#{nivel4SearchController.changeItems()}"/>     
                               </p:selectOneMenu>
                               
                                
                                    <h:outputLabel value="#{msg.idnivel4}" for="idnivel4" />
                               <p:selectOneMenu converter="nivel4Converter" id="idnivel4"
                                                value="#{nivel5Controller.nivel5.idnivel4}"  
                                                required="true" requiredMessage="#{msg.idnivel4} #{app['info.required']}"