Mucho por aprender en Tecnologia JAVA.......

Recorrer un Listado de Objetos en Java

| martes, 25 de diciembre de 2012

Supongamos que tenemos un Listado de Objetos "Cuentas" y necesitamos iterarlo para extraer sus valores y efectuar una serie de operaciones, aqui tenemos las formas de hacerlo: Primero importamos las siguientes clases:
import java.util.Iterator; //Importo la interfaz Iterator para iterar el arrayList
import java.util.ArrayList; //Importo la clase ArrayList para poder usar la lista

Una forma de recorrer el Listado es :
ArrayList listaCuentas = new ArrayList(); //Creo el ArrayList;

Iterator iterador = listaCuentas.listIterator(); //Le solicito a la lista que me devuelva un iterador con todos los el elementos contenidos en ella

//Mientras que el iterador tenga un proximo elemento
while( iterador.hasNext() ) {
       Cuenta b = (Cuenta) iterador,next();
}
La Segunda forma es:
for ( Iterator iterador = listaCuentas.listIterator(); iterador.hasNext(); ) {
      Cuenta b = (Cuenta) iterador.next();
}
Como verán en esta ultima forma en la primer parte de la estructura for defino e inicializo la variable de control, en este caso el iterador, en la segunda parte defino la condición de corte del bucle, y como incremento de la variable no necesito, ya que no se va incrementando el iterador ni nada por el estilo, simplemente dentro del for pido sus elementos. Aqui les muestro un ejemplo cuando se requiere eliminar un elemento del listado que estamos recorriendo:
List lDetDocumentos = null;
lDetDocumentos = documentosDao.obtenerDetalleDocCobro(254362);

if(lDetDocumentos.size()>0){
   Iterator iterador = lDetDocumentos.listIterator(); 
   while( iterador.hasNext() ) {
    DetalleDocCobro b = (DetalleDocCobro) iterador.next();
    System.out.println(b.codigo);
   //si es necesario lo borramos con:
          //iterador.remove();
   }
}

Convertir una fecha String a un objeto java.sql.Date

| sábado, 22 de diciembre de 2012
Si se requiere convertir una fecha en formato String del tipo por ejemplo "2003/01/10" a un objeto tipo Date para enviarlo como parametro a una sentencia SQL o Stored Procedure/Function se puede usar lo siguiente
import java.text.ParseException;
import java.text.SimpleDateFormat;

public class MainClass {

  public static void main(String[] args) throws ParseException {
    try {
      SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd");
      String date = "2003/01/10";
      java.util.Date utilDate = formatter.parse(date);
      java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());
      System.out.println("date:" + date);
      System.out.println("sqlDate:" + sqlDate);
    } catch (ParseException e) {
      System.out.println(e.toString());
      e.printStackTrace();
    }

  }

}

Convertir un Date en un String en formato dd/MM/yyyy

|
Si tenemos un valor del tipo Date y lo queremos convertir en una fecha, por ejemplo, en el formato "dd/MM/yyyy" , simplemente hay que hacer:
java.util.Date date = new java.util.Date(); 
java.text.SimpleDateFormat sdf=new java.text.SimpleDateFormat("dd/MM/yyyy");
String fecha = sdf.format(date);
Con la clase SimpleDateFormat, podemos dar el formato que deseemos a las fechas. Si por ejemplo quisiésemos poner la fecha en formato anglosajón, simplemente habría que cambiar la línea donde usamos el constructor por lo siguiente:
java.text.SimpleDateFormat sdf=new java.text.SimpleDateFormat("yyyy/MM/dd");

Cambiar formato miles en Ireport

|
Cuando presentamos reportes hechos en iReport el algunos casos debemos mostrar datos numéricos o flotantes con varios puntos decimales para ellos ingresamos en el campo "Pattern" aquel patrón que convierta este en los decimales que necesitemos, tal como "#,#00.00". 

Sin embargo cuando compilamos el reporte y lanzamos desde Java su llamado nos muestra en un formato distinto al configurado con la propiedad "Pattern".Por ejemplo si deseamos mostrar el siguiente monto 1.000,24 al ejecutar el reporte nos mostraría lo siguiente 1,000.24 

Esto tiene que ver con el idioma que se haya configurado o enviado desde Java, sino enviamos ningún parámetro de idioma dese Java se tomara el por defecto el cual es US.

La solución es agregar un parámetro mas desde Java tal como sigue:

parametros.put("REPORT_LOCALE", new Locale("es", "ES"));

Si se desea mostra en formato estadounidense con la separacion de miles por puntos enviar lo siguiente:

parametros.put("REPORT_LOCALE", new Locale("en", "US"));

Convertir Proyecto JAVA a un Proyecto WEB en Eclipse

|
En ocasiones tenemos un proyecto realizado en Java y necesitamos convertirlo a un proyecto Web Java manteniendo todo el código desarrollado, pues bien aquí les muestro una manera sencilla de hacer esto: 


Primero: Abrimos el proyecto Java en nuestro Eclipse (estoy usando la versión Helios, en general debe funcionar para cualquier versión).

proyecto java en eclipse
Proyecto Java en Eclipse


Segundo:Damos click derecho sobre el proyecto y seleccionamos sus propiedades.Se muestra una pantalla y seleccionamos "Project Facets" y damos click en el link "convert to faceted form..."

propiedades del proyecto java
Propiedades del Proyecto Java


Seleccionamos "Dynamic Web Module" y "Java"


project facets
Project Facets

Por defecto eclipse generara todos los archivos web (tales como web.xml, WEB-INF,etc) en un folder llamado "WebContent".Si se requiere cambiar la ruta de la carpeta "WebContent", damos click en el link "Further configuration available".

Tercero:  Hecho esto el proyecto java sera convertido a un proyecto web , y se podrá ver el icono de globo de Internet sobre el proyecto.

proyecto web java
Proyecto Web Java

Tiempo de vida por defecto para una sesion en Tomcat

| sábado, 15 de diciembre de 2012
Tiempo de vida por defecto para una sesion en Tomcat

Una de las cosas que se suele olvidar durante el desarrollo de una nueva aplicación web es configurar el tiempo de vida o timeout de la sesión http en el fichero web.xml de la aplicación. Y si esto pasa, ¿habrá timeout o no? Y si lo hay ¿cuánto?

Pues ésto es lo último que he aprendido. En Tomcat existe un fichero web.xml para todos los valores por defecto no fijados en los web.xml de cada aplicación. Se encuentra en la carpeta conf. Si echamos un vistazo por él, encontraremos esto:


<session-config>
   <session-timeout>30</session-timeout>
</session-config>
Así que la respuesta es... 30 minutos! Si queremos modificarlo, añadimos la configuración en el web.xml de nuestra aplicación con el valor deseado, -1 para no tener timeout.

Se puede hacer de 2 maneras:

- Programaticamente:
 
  Cuando crees la session le setteas el tiempo de duración de la siguiente forma:
 
  HttpSession sesion = request.getSession();
  sesion.setMaxInactiveInterval(60);

  el método recibe un entero que es la cantidad de segundos que quieres que dure la sesion. Si le  
  colocas -1 la sesion nunca expirará.

- Declarativamente:

En el web.xml colocas la siguiente etiqueta, y de esta forma configuras el tiempo para todas las sesiones:

<session-config>
   <session-timeout>60</session-timeout>
</session-config>

session time en web.xml
Session Time en Web.xml

Ampliar JVM en Tomcat

|
Ampliar JVM en Tomcat

Si se necesita añadir más memoria para Tomcat en la Máquina Virtual de Java debemos corriendo en Windows se debe hacer lo siguiente:

- Si Tomcat inicia con un .bat:
Añadimos la siguiente linea dentro de catalina.bat

set JAVA_OPTS=%JAVA_OPTS% -Xmx512m -Xms512m -XX:PermSize=256m -XX:MaxPermSize=256m -XX:NewSize=128m

opcional:
set CATALINA_OPTS=-Xms512m -Xmx512m

- Si Tomcat inicia desde un exe, abrimos tomcatw, que nos facilita la gestión de propiedades y en la pestaña de Java agregamos lo siguiente:
-Xms512m -XX:PermSize=256m

- Si Tomcat esta configurado dentro de Eclipse como un New Server, entonces debemos ir la pestaña Windows - Preferences - Tomcat - JVM Settings y pulsar en el boton ADD de la caja de texto que dice "Append to JVM Paremeters". Agregams lo siguiente:
-Xmx512m -Xms512m -XX:PermSize=256m -XX:MaxPermSize=256m -XX:NewSize=128m


Amplicar JVM en tomcat 6
Ampliar JVM en Tomcat 6.0