Utilizar el Java Native Interface (JNI)

El JDK 1.1 soporta el Interface Nativo Java (JNI). Por un lado, el JNI define un est�ndard de nombres y convenciones de llamadas para que la M�quina Virtual Java (VM) pueda encontrar nuestros m�todos nativos. Por otro lado, el JNI ofrece un conjunto de funciones de interface est�ndard. Se puede llamar a las funciones JNI desde nuestros m�todos nativos para hacer cosas como acceder y manipular objetos Java, liberar objetos Java, crear nuevos objetos, llamar a m�todos Java, etc.

Esta secci�n muestra c�mo seguir las convenciones de nombres y de llamadas del JNI, y como utilizar las funciones del JNI desde un m�todo nativo. Cada ejemplo consiste en un programa escrito en Java que llama a varios m�todos nativos implementados en C. Los m�todos nativos, a su vez, podr�an llamar a las funciones JNI para acceder a los objetos Java.

La secci�n tambi�n muestra c�mo incluir la m�quina virtual Java dentro de una aplicaci�n nativa.

.Declarar M�todos Nativos

En el lado del lenguaje Java, se declara un m�todo nativo con la palabra clave native y un cuerpo de m�todo vac�o. En el lado del lenguaje nativo, se proporciona la implementaci�n del m�todo nativo. Debemos tener cuidado cuando escribamos m�todos nativos que "corresponda" la implementaci�n de la funci�n nativa con la firma del m�todo en el fichero de cabecera del lenguaje Java. La herramienta javah, que se explic� en el Paso 3: Crear el fichero .h, nos ayuda a generar prototipos de funciones nativas que corresponden con la declaraci�n del m�todo nativo en lenguaje Java.

.Mapear entre Tipos Java y Tipos Nativos

El JNI define un mapeado de los tipos del lenguaje Java y los tipos de lenguaje nativo (C/C++). Esta p�gina presenta los tipos nativos correspondientes tanto a los tipos primitivos Java como int y double, y los objetos del lenguaje Java, incluyendo strings y arrays.

.Acceder a Strings Java

Los Strings son un tipo de objeto Java particularmente �til. El JNI proporciona un conjunto de funciones para manipulaci�n de Strings que hace sencilla la terea manejar objetos Strings de Java en el c�digo nativo. El programador puede traducir entre Strings Java y Strings nativos en los formatos Unicode y UTF-8.

.Acceder a Arrays Java

Los Arrays son otro tipo de objetos Java muy utilizados. Se pueden utilizar las funciones de manipulaci�n de arrays del JNI para crear y acceder a los elementos de un array.

.Llamar a M�todos Java

El JNI soporta un completo conjunto de operaciones de llamada que permiten invocar m�todos Java desde c�digo nativo. Se localiza el m�todo utilizando su nombre y su firma. Se pueden llamar tanto a m�todos est�ticos como a m�todos de ejemplar (no est�ticos). Se puede utilizar la herramienta javap para generar firmas de m�todos al estilo JNI para los ficheros de clases.

.Acceder a Campos Java

El JNI permite localizar un campo Java utilizando el nombre y la firma del campo. Se pueden localizar y acceder tanto a campos est�ticos como campos de ejemplar (no est�ticos). Se puede utilizar la herramienta javap para generar firmas de campos al estilo JNI para los ficheros de clases.

.Capturar y Lanzar Excepciones

Esta secci�n ense�a como tratar con excepciones dentro de una implementaci�n de m�todo nativo. Nuestros m�todos nativos pueden capturar, lanzar y borrar excepciones.

.Referencias Locales y Globales

El c�digo nativo se puede referir a objetos Java utilizando referencias locales o globales. Las referencias locales son s�lo v�lidas dentro de una llamada a m�todo nativo. Son liberadas autom�ticamente despu�s de que retorne el m�todo nativo. Las referencias globales deben asignarse y liberarse expl�citamente.

.Threads y M�todos Nativos

Esta p�gina describe la implicaci�n de ejecutar m�todos nativos en un entorno multi-thread. El JNI ofrece constructores de sincronizaci�n b�sicos para m�todos nativos.

.Llamar a la M�quina Virtual Java

Esta secci�n ense�a c�mo cargar la M�quina Virtual Java desde una librer�a nativa en una aplicaci�n nativa. Incluye instrucciones de c�mo inicializar la M�quina Virtual Java e invocar m�todos Java. El API "Invocation" tambi�n permite a�adir threads nativos a una M�quina Virtual Java que ya est� ejecut�ndose y convertirse ellos mismos en threads Java. Actualmente, el JDK s�lo soporta la adici�n de threads nativos en Win32. El soporte para threads nativos en Solaris estar� disponible en una futura versi�n.

.Programaci�n JNI en C++

En el lenguaje C++, el JNI presenta un interface mucho m�s claro y realiza chequeos de tipos est�ticos adicionales.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
ARTÍCULO ANTERIOR

SIGUIENTE ARTÍCULO