miércoles, 15 de febrero de 2012

MIDlet

Al conjunto de aplicaciones que se basan en la configuración CLDC y perfil MIDP ,se les denomina MIDlet.

Las acciones que un dispositivo debe realizar antes de lanzar un MIDlet son:
  • Localizar el MIDlet.
  • Descargar el MIDlet.
  • Almacenar el MIDlet.
  • Gestionar el MIDlet.
  • Localizar los archivos JAD que pueden venir incluidos en un MIDlet.
  • Ejecutar los MIDlets descargados.
  • Conectarse a un servidor de internet utilizando el protocolo http y descargar tanto el MIDlet como su JAD asociado.
  • Proporcionar un nombre de usuario y contraseña cuando necesite conectarse a internet y la petición web lo solicite.
  • Instalar y borrar los MIDlets descargados.
Para realizar estos pasos el dispositivo tiene un programa que se encarga de realizar estas acciones llamado AMS o Gestor de aplicaciones.

Estructura de J2ME

Está compuesto por varias partes:
  • Perfil --> es un conjunto de API’s orientado a cubrir específicamente las necesidades de una familia de dispositivo.
  • Configuración -->conjunto de APIs que va a soportar los dispositivos.Existen 2 configuraciones básicas, CDC y CLDC.
  • Máquina Virtual --> Encargada de ejecutar el código, podemos utilizar una de estas dos JVM o KVM.Elegiremos una u otra dependiendo de las características del dispositivo que vamos a crear la aplicación.
Si elegimos la maquina virtual JVM, la configuración que le corresponde sería la CDC y si elegimos la KVM, entonces trabajaríamos con la CLDC y están destinada para dispositivos de pocos recursos.

Existen diferencias entre JVM y KVM haciendo que esta última no tenga características que incluye la primera.:
  1. KVM no trabaja con tipos de datos float ni double.
  2. No existe el main() sino el starApp().
  3. No tienen recolector de basuras.
  4. La verificación de código se hace fuera del dispositivo.
  5. Elimina el JINI.
  6. Elimina los threads.
  7. No tiene método que finalice las clases.
  8. Limitada capacidad para gestionar excepciones.
  9. Incluye una biblioteca gráfica nueva para ser empleada en dispositivos de poca memoria y con un tipo de pantalla más pequeña.
También tenemos que saber que la configuración CDC esta basada en J2SE e incorpora muchas de sus clases y CLDC es un subconjunto de CDC.

Con respecto a los distintos perfiles que hay, ocurre lo mismo con la maquina virtual, si elegimos la configuración CDC, los perfiles que tenemos son:
  • Foundation Profile
  • Personal Profile
  • RMI Profile
Y para la configuración CLDC tenemos:
  • PDA Profile
  • Mobile Information Device Profile (MIDP)--> es el perfil más utilizado.

J2ME

Es un lenguaje de programación y a su vez una plataforma donde se pueden ejecutar software creado en java.

Está orientado al desarrollo de aplicaciones para pequeños dispositivos electrónicos con recursos limitados como móviles, pdas,smartphone,etc...

El sitio oficial de J2ME se encuentra en http://java.sun.com/j2me/index.jsp

miércoles, 1 de febrero de 2012

La serialización de objetos

Es un tipo de persistencia, esto consiste en la codificación de un objeto en cadenas de bytes y almacenar ese objeto o transmitirlo, para poder llevar acabo esta acción lo hacemos mediante la interfaz java.io.Serializable que no tiene métodos solo sirve para indicar que esa clase se puede serializar. Los objetos de clases que no implementan Serializable no pueden salvar o restaurar sus estados.
Toda clase que implemente esta interfaz puede transformar sus objetos a cadenas de bytes y viceversa.Para ello utilizamos las clases del paquete java.io writeObject y readObject.
Hay clases que no se pueden serializar porque sus datos están cambiando constantemente como java.io.FileInputStream y java.lang.Thread.Tenemos que tener cuidado a a hora de serializar un objeto, si este contiene una referencia a un elemento no-serializable,fallaría y se lanzaría la excepción NotSerializableException.

Cuando pasamos objetos Serializable de un lado a otro podemos tener el problema de que la versión de un lado tenga una versión más antigua que en el otro lado. Si sucede esto, la reconstrucción de la clase en el lado que recibe es imposible.Para evitar este problema se aconseja que la clase serializable tenga el atributo privado serialVersionUID. Así java es capaz de detectar rápidamente que las versiones de objeto_serializable.class en ambos lados son distintas o no.

Nota:Los objetos con las propiedades static y transient no se pueden serializar y la mayoría de las clases Java son serializable.

Stream

Cada vez que queramos enviar o traer información sea del tipo que sea (imagenes,caracteres,objetos) utilizamos los stream.Hay streams de entrada (InputStream,Reader) y stream de salida (OutputStream,Writer).

Los stream soportan 2 tipos de datos:
  1. bytes brutos-->implementados por subclases de la clase InputStream y los streams de salida de bytes son implementados por subclases de la clase OutputStream.
  2. caracteres Unicode--> implementados por subclases de la clase Reader y los streams de salida de caracteres son implementados por subclases de la clase Writer.

martes, 31 de enero de 2012

Applet

Un applet es una clase Java que se incrusta en una página HTML y que se descarga y ejecuta con un navegador. Es un tipo específico de contenedor de tecnología Java.

Para ejecutar un applet, el navegador lo carga y después invoca un método init para realizar la inicialización básica del applet. Cuando termina init, el navegador invoca el método start. Este método se invoca en general cuando el applet se hace visible. El método stop se invoca cuando el applet se hace invisible, esto es, cuando el navegador es minimizado o sigue un enlace a otro URL.

Normalmente, un applet se ejecuta dentro de un navegador aunque, para simplificar y acelerar el desarrollo, se usa la herramienta appletviewer diseñada para visualizar applets. Es una aplicación Java que permite la ejecución de applets sin utilizar un navegador. Se puede considerar como un navegador mínimo.

Otros elementos del applet:
  • getDocumentBase -->Devuelve un objeto URL que describe el directorio de la página actual del navegador, donde reside el fichero HTML con la etiqueta applet.

  • getCodeBase -->Devuelve un objeto URL que describe el directorio fuente del fichero de la clase Applet. Frecuentemente es el mismo que el directorio del fichero HTML, pero no siempre es así.

  • getImage(URL base, String target) -->Extrae una imagen del fichero indicado por target localizado en el URL especificado por base. El valor devuelto es una instancia de la clase Image.

  • getAudioClip(URL)--> base, String target) Extrae un sonido del fichero indicado por target localizado en el URL especificando por base. El valor devuelto es una instancia de la clase java.applet.AudioClip.La manera más fácil de escuchar un sonido es usando alguno de los métodos play de la clase Applet.También tenemos loop que reproduce el sonido indefinidamente y stop que finaliza la reproducción del sonido.

En un fichero HTML, una etiqueta "< param >" en un contexto "< applet >" puede pasar información de configuración al applet. Estos parámetros se recogen desde el código del applet por medio de getParameter(nombre). Si el nombre del parámetro no se puede encontrar, devuelve null. El tipo del parámetro es siempre String. Si se desea de otro tipo, se debe convertir.

jueves, 26 de enero de 2012

Excepciones

Las excepciones se generan en la máquina virtual de Java, como respuesta a una condición inesperada, o en el código, como resultado de la ejecución de una instrucción throw.

Una excepción puede ocurrir por dos razones:
  1. Porque se produzca un error en tiempo de ejecución en la máquina virtual de Java: en tal caso, se crea una instancia de un objeto excepción (cualquier objeto que descienda de la clase java.lang.Throwable). A estas excepciones se les denomina excepciones no verificadas.
  2. Porque un método genere explícitamente un objeto que descienda de la clase Throwable (generable): los objetos generables se generan mediante la palabra clave throw. Las excepciones generadas de esta forma se denominan excepciones verificadas.
Vamos a explicar más detalladamente los tipos de excepciones:
  • Excepciones no verificadas-->se generan por errores en tiempo de ejecución. Son no verificadas ya que el compilador no es capaz de determinar si el código gestiona la excepción debido a que un error en tiempo de ejecución puede ocurrir en cualquier parte de un programa y por multitud de razones.Las clases de excepción que descienden de las clases RuntimeException y Error son excepciones no verificadas.
  • Excepciones verificadas -->Las excepciones son verificadas por dos razones:
  1. El compilador comprueba durante la compilación que el método incluye código para generar una excepción de tipo generable (las excepciones no verificadas no necesitan que las declaremos).
  2. El compilador obliga a que el código que llame a uno de estos métodos incluya la llamada en una instrucción try-catch y que proporcione un bloque catch para capturar la excepción.
Las clases de excepción que descienden de las clases Throwable (Error y Exception) son excepciones verificadas.