Objetivos.
- Conocer que hace el framework Java Native Interfaz (JNI).
- Describir las fases necesarias para trabajar con JNI.
- Realizar un ejemplo.
Introducción.
El lenguaje java es lo suficientemente completo como para escribir aplicaciones robustas. Pero en ocasiones se hace necesario utilizar código no java, por ejemplo para acceder a funciones especificas del sistema operativo, para interactuar con dispositivos de hardware especiales, como el puerto RS-232 entre otros. La solución estándar proporcionada por java es la Interfaz Nativa de java (Java Network Interface).
¿Que hace JNI?
Java Native Interface (JNI), es un framework de programación que permite enlazar métodos nativos en una aplicacion java, contenidos en archivos de tipo dynamic link library (dll) en el caso del sistema operativo windows, o archivos de tipo Shared Object (os) para el caso de sistemas operativos como Open Solaris y Linux.
La siguiente figura muestra un esquema de
fases para trabajar con JNI.
Fases para trabajar con JNI.
FASE A. Lo primero que se debe hacer es crear y compilar la clase que incluirá los métodos nativos. La siguiente gráfica muestra un modelo de declaración de un método nativo, observe
que no se implementa, es decir termina con ";".
FASE B. Luego de tener la clase compilada, se recurre a la aplicación javah.exe incluida en el jdk, a la cual se le indica que cree un archivo de cabecera (con extención .h ) a partir de la clase compilada, es decir a partir del archivo con extencion .class.
FACE C. A partir de las firmas (declaraciones de funciones) del archivo de cabecera generado en la fase anterior se implementan las funciones en un proyecto C/C++, el cual se debe configurar para que al compilar, genere un archivo con extensión .dll (para el caso del sistema operativo windows) o un archivo con extensión .so en el caso de sistemas operativos como Open Solaris y Linux.
FASE D. En esta fase se enlaza el archivo generado en la fase anterior, al proyecto Java. Esto se hace con la declaración de un bloque static{}, al inicio de la clase que declara los métodos nativos. El bloque estático contendrá la sentencia System.load ("ruta absoluta del archivo con extensión") o System.loadLibrary(nombre del archivo sin extencion), si se utiliza esta ultima sentencia el archivo debe estar ubicado en la carpeta raíz del proyecto.
FASE E. Finalmente se podrán utilizar los métodos desde la aplicación java, basta con Construir y ejecutar el proyecto.