Java - Urgente JNI y PseudoTerminales

 
Vista:

Urgente JNI y PseudoTerminales

Publicado por Almathely Vivas (1 intervención) el 18/11/2003 16:23:13
Hola a todos!!

Tengo problemas con una aplicacion la cual consiste en una pseudoterminal programada en C, la cual ejecuto desde Java usando JNI. Además, utilizo dos variables
compartidas (esquema productor-consumidor) para escribir y leer de la
pseudoterminal. Esto con el fin de poder ejecutar programas de consola
mediante una interfaz web (applet - servlet).

El esquema es mas o menos asi: (Para efectos de prueba tengo el mismo
esquema pero sin la interfaz web, sino que se ejecuta directo en la
consola.)

Clases Java:

Buffer.java

Es la objeto compartido (una variable tipo String) implementado mediante
un semaforo. Posee 2 métodos principales, poner() y recoger(), ambos
sincronizados.

Consola.java

Es la clase donde se encuentra declarado el método nativo y en la cual se
carga la biblioteca compartida.

Pty.java

Es un hilo en el cual se ejecuta en si la pseudoterminal.

Leer.java Escribir.java

Son los hilos encargados de leer y escribir en los Objetos (Buffer)
compartidos con la pseudoterminal.

Principal.java

El código principal de ejecución de la aplicación.

El problema radica en la necesidad de poder ejecutar varias instancias de
la pseudoterminal dentro de una misma maquina virtual. (Por lo de las
sesiones de usuarios conectados al servidor web).

Cuando se ejecuta una sola pseudoterminal funciona sin ningún problema,
pero si instancio dos objetos de tipo Pty (el cual internamente tiene un
objeto tipo Consola), e inicio el segundo hilo, al momento en que se
invoca el método nativo (por segunda vez), la máquina virtual de java
reporta un error (número 11).

He hecho la prueba de ejecutar dos pseudoterminales desde la misma
máquina virtual, pero utilizando archivos diferentes de la biblioteca
compartida (y por ende clases diferentes para Consola y Pty) y funciona
sin ningún problema.

También trate de cargar y ejecutar dos archivos diferentes de la
biblioteca compartida utilizando las mismas clases Consola y Pty
(utilizando un parámetro para ñla identificación de los archivos), y la
máquina virtual reportaba el mismo error.

Yo tengo la sospecha de que el error radica en que el método usado para
realizar la carga de la biblioteca compartida es un método estático, y
por lo tanto no puedo utilizar el mismo objeto para cargar y ejecutar
estáticamente dos pseudoterminales (sean o no el mismo archivo). Pero
quiero descartar algun error en el código C, o alguna falla en el control
de la concurrencia que se me esté pasando por alto, antes de asumir
definitivamente que el error es el que yo sospecho.

Si alguien esta interesado en revisar los codigos, yo con mucho gusto se los envio... De verdad que necesito urgentemente que me ayuden a resolver este problema.

Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder