martes, 10 de abril de 2012

JasperReports Problemas/Solución

He tenido esta semana que generar informes con esta herramientas y me he encontrado con 2 problemas a la hora de generar el pdf.

  1. Me daba el siguiente error:
    Caused by: java.lang.NullPointerException
    at net.sf.jasperreports.engine.JRPropertiesMap.readObject(JRPropertiesMap.java:185)
    at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:946)
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1812)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1719)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1910)
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1834)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1719)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
    at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1634)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1299)
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1910)
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1834)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1719)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1910)
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1834)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1719)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:348)
    at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:192)
    at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:361)
    at JasperService$_closure1.doCall(JasperService.groovy:89)
    at JasperController$_closure2.doCall(JasperController.groovy:85)
    at JasperController.invokeMethod(JasperController.groovy)
    at JasperController$_closure1.doCall(JasperController.groovy:56)
    at JasperController$_closure1.doCall(JasperController.groovy)

    Despúes de mirar que las variables que mandaba no llevara nulos y de mirar por internet, encontré la solución.

    Resulta que los archivos jrxml estaban ya creados,y habían sido compilados en una versión diferente al programa que yo estaba utilizando y el proyecto usaba la librería jasperreport 2.0.4 y yo estaba compilando con la versión 4.5.1, al modificar la librería que se descargaba mi proyecto a la misma que del programa que utilizaba para compilar. Error solucionado.


  2. Me daba el error: java.lang.NoSuchFieldError: PRINTSCALING, este también era un error por incompatibilidad de versiones, concretamente de la librería itext.jar que estaba usando una versión muy antigua, al actualizarla se solucionó ese error.

miércoles, 14 de marzo de 2012

Generic Connection Framework

El soporte que da MIDP2.0 a la programación en red se basa, como en MIDP1.0, en elGeneric Connection Framework.

Generic Connection Framework define una serie de interfaces para dar soporte a la variedad de tipos de conexiones que nos podemos encontrar en dispositivos móviles, pero no implementa ninguna de ellas. Es en los perfiles donde se debe realizar esta implementación.

martes, 6 de marzo de 2012

RMS

El Record Management System (RMS) es el sistema que utilizan los dispositivos MIDP para almacenar datos persistentemente. Sólo existe uno para todas las suites que el dispositivo utilice, pudiendo tener cada una de ellas, una o varias zonas de almacenamiento (RecordStore) en él reservadas.

miércoles, 29 de febrero de 2012

Aplicaciones MIDP

MIDP nos provee de API’s para poder crear una aplicación de dos formas distintas:
  1. Interfaz de bajo nivel --> utiliza la pantalla entera dibujando pixe a pixel los elementos que van a formar la aplicación.Sus elementos y métodos derivaban de la clase Canvas.
  2. Interfaz de alto nivel -->utiliza componentes definidos en MIDP y que cualquier dispositivo MIDP soporta:cajas de textos, grupos de opciones, etc siendo esta su mayor ventaja y su desventaja es que no son personalizable. Sus elementos y métodos derivaban de la clase Screen.
La característica más importante en un dispositivo móvil MIDP es su permanente posibilidad de conexión con el exterior, la cual permitirá establecer una conexión HTTP con un servidor J2EE (entre otras muchas).
Toda conexión en MIDP hereda de la interface Connection. Dicha interface representa la conexión más abstracta posible. Para obtener una instancia de ella o de cualquiera de sus hijas debe usarse alguno de los métodos open() de la clase factoría Connector.
Los tipos de conexión actualmente soportados por MIDP 2.0 son el HTTP, su versión segura HTTPS, las conexiones basadas en SOCKETS (de espera, en servidor, seguros, comunes), la realizada por medio de DATAGRAMAS y la comunicación con puertos serie COMM.


Una conexión HTTP siempre se encontrará en alguno de los tres estados siguientes: Establecimiento, Conectado o Cierre.
Podrán mejorarse las aplicaciones que requieran comunicación HTTP con múltiples consideraciones. Dos de ellas son: cuidar un redireccionamiento adecuado de la URL a buscar y otra, el uso de cookies utilizando el RMS del dispositivo para permitir que el servidor a conectar mantenga un seguimiento adecuado de la sesión.

viernes, 17 de febrero de 2012

API's de MIDP

Esta api esta formada por apis de la clase J2SE:
  • Paquete java.util.
y otra propia:
  • Paquete javax.microedition.

API's de CLDC

Parte de estas API's proviene del API de J2SE:
  • Paquete java.util
  • Paquete java.lang.
  • Paquete java.io.
y otra propia:
  • Generic Connection Framework --> da soporte para la creación de ficheros y para comunicaciones de red.

miércoles, 15 de febrero de 2012

Pasos para desarrollar un MIDlet

Como son dispositivos de capacidades muy limitadas, los pasos aconsejados a seguir son:
  1. Escribir el código fuente.
  2. Compilación.
  3. Preverificador de clases -->mira que las clases cumplan los requisitos necesarios, como no sobrepasar los límites de la pila de la Máquina virtual,uso correcto de las variables y se respeta la estructura de clases. Esta herramienta no la incorpora el KVM ya que pesa mucho y hay que hacerlo desde un entorno externo a ella.
  4. Empaquetamiento (jar,jad).
  5. Ejecución y depuración.