[l-desarrollo] Desarrollo de aplicacion de escritorio en Java

14 views
Skip to first unread message

Samuel Duarte

unread,
Mar 21, 2012, 10:22:01 PM3/21/12
to l-desa...@velug.org.ve
Buenas Noches, les escribía porque estoy trabajando actualmente en un proyecto donde se debe desarrollar una aplicación de escritorio en java que va a reemplazar a un app que actualmente esta en funcionamiento y fue desarrollada en visual basic 6, haciendo uso de unos .dll muy específicos de windows.

¿Que se recomienda en este caso para utilizar esos .dll desde la aplicación hecha en java de tal forma que pueda ejecutarse en linux u otro sistema operativo sin problemas?

De antemano, gracias por la ayuda.
Hasta Luego.

Daniel Antonio Peraza Cedrez

unread,
Mar 21, 2012, 11:00:15 PM3/21/12
to Aplicaciones y Desarrollo en Linux
Para que una aplicación sea multiplataforma no necesariamente tiene que estar escrita en Java. Ademas, creo que deberías proporcionarnos mayor información sobre las librerías dinámicas con las que necesitas enlazar para poder ayudarte con mayor precisión, o en todo caso sobre las características de tu aplicación.

Sin embargo te comento que con Python, Ruby, Perl, e incluso C++ podrías crear una aplicación multiplataforma que se ejecute bien en ambos sistemas, tal vez incluso mejor que con Java. En el caso de C++ la diferencia sería que tendrías que compilar un ejecutable por separado para cada plataforma, mientras que con lenguajes interpretados como los que te mencioné, la metodología es Write Once, Run Anywhere.

Te recomiendo determinar primero para qué necesitas esos DLLs, y luego buscar algún wrapper que los sustituya. Ejemplo: Qt crea ventanas para Windows, Linux y Mac, pero el código subyacente siempre depende de la plataforma en la cual se ejecuta el sistema.
_______________________________________________
l-desarrollo mailing list
l-desa...@velug.org.ve
http://listas.velug.org.ve/mailman/listinfo/l-desarrollo

josema...@gmail.com

unread,
Mar 21, 2012, 11:02:52 PM3/21/12
to Aplicaciones y Desarrollo en Linux
Disclaimer: no soy experto java ni quiero serlo...

Pienso que la respuesta depende principalmente del tipo de dll del cual se trate.

Si el dll en cuestión es una librería dinámica estándar de windows puedes acceder mediánte el uso de Java Native Interface(JNI) o Java Native Access(JNA)[1]. Para ambos casos hay q generar un envoltorio o wrapper que encapsule las llamadas a las funciones del dll. El primero no lo recomiendo por q obligatoriamente hay q generar el wraper en C++ y es algo complicado. El segundo es mucho mas directo y hay utilidades q permiten la automatización del wrapper partiendo de un header de C.

En cualquiera de los casos anteriores necesitas el header en c. Si no lo tienes debes reconstruirlo a mano de las llamadas extern de VB. No hay mas opción.

Si los dlls son enamblados .net estas de suerte por q seria muy trivial utilizarlos usando Mono y exponiéndolos a java.

Si el dll en cuestión es un dll tipo COM o activex hay q generar un wrapper usando el compilador java de microsoft. Desconozco si hay otras opciones.

Ahora bien, dado que dices q esos dlls son muy específicos de windows no se si te refieres a que son los dlls estándar o core de windows(user,kernel,gdi,etc) en cuyo caso supongo q podrás utilizar los q vienen con wine.

Si se trata de drivers debes buscar sus respectivas versiones para linux y utilizar esos.

Como todo tiene solución menos la muerte, siempre podrás, en ultima instancia, dejar tus dlls dentro de una maquina virtual, crear los wrappers con JNA y exponerlos como servicios web o rpc (soap,rest,jms,remoting,etc) y llamarlos desde la aplicación java desde el host.

[1] una vez tuve q hacer algo así y encontré una utilidad para hacer el wrapper automagicamente cuyo nombre es jnareator.

Espero sea de ayuda.

Saludos,

José Manuel Peña P.
Twitter: @josemanuelp2

Sent from my BlackBerry® smartphone

Luis Hernandez

unread,
Mar 21, 2012, 11:05:11 PM3/21/12
to Aplicaciones y Desarrollo en Linux
Lo que yo haría....

Si los dlls son de librerías del negocio, se supone que se tienen los fuentes, entonces los migraría completamente a Java (aunque por nada del mundo usaría Java).

Si los dlls son de librerías utilitarias, estoy completamente seguro que existen librerías para hacer casi cualquier cosa en Java para reemplazar las dlls que comentas.

Como último comentario, si quieres algo que funcione en linux (o sea multiplataforma), debes partir por no usar dlls, y mentalizarte a migrar todo.

PD: presiento que este hilo va a ser laaaaaaaargo, tratemos de no hacerlo, y olvidémos que dijo Java, xD


_______________________________________________
l-desarrollo mailing list
l-desa...@velug.org.ve
http://listas.velug.org.ve/mailman/listinfo/l-desarrollo




--
Ing. Luis Hernández
Ingeniero en Computación
Ubuntu 11.10 / Debian squeeze
lue...@gmail.com
http://cyberrevolucionario.blogspot.com/
@luelher
0424-5558074
0416-5013339
Usuario Linux Nro 429461

Samuel Duarte

unread,
Mar 21, 2012, 11:18:43 PM3/21/12
to Aplicaciones y Desarrollo en Linux
Gracias por la respuesta de todos. Aprovecho a aclarar que el uso de Java fue practicamente impuesto en el proyecto aunque en base a lo sugerido tratare de negociarlo y los dll's son drivers para unas lectoras  de carnets inteligentes (que se compraron a una empresa) que esta conectada a la pc via puerto serial.

2012/3/21 Luis Hernandez <lue...@gmail.com>

Luis Hernandez

unread,
Mar 21, 2012, 11:38:29 PM3/21/12
to Aplicaciones y Desarrollo en Linux
Revisa bien que hacen estos dlls, porque si usan el puerto serial (o emulan uno serial por usb), normalmente la información no va encriptaba, y si no va encriptada y el equipo es "propietario ocultista" o sea que no entregan el protocolo, nunca es mala idea intentar colocar un sniffer en el puerto serial y hacerle ingeniería inversa al protocolo (te puede sorprender lo "fácil" que podría ser una comunicación serial), y si puedes ver el protocolo podrás usar cualquier librería de comunicación serial que ya exista en Java, y no depender de los drivers propietarios, por otro lado te invito a buscar en la comunidad de software libre si el driver o alguna implementación ya está hecha, si es un equipo muy comercial de seguro debes encontrar algo.

Atte.

Carlos Guerrero

unread,
Mar 21, 2012, 11:29:20 PM3/21/12
to Aplicaciones y Desarrollo en Linux
Que marca y modelo son las impresoras exactamente ?

2012/3/21 Samuel Duarte <s.du...@gmail.com>:

--
Atte:
Carlos A. Guerrero M.

Salvador Spataro

unread,
Mar 21, 2012, 11:57:47 PM3/21/12
to Aplicaciones y Desarrollo en Linux
Por que si quieren que corra en linux y java solo hay drivers para windows?

On 3/21/2012 10:48 PM, Samuel Duarte wrote:
> Gracias por la respuesta de todos. Aprovecho a aclarar que el uso de
> Java fue practicamente impuesto en el proyecto aunque en base a lo
> sugerido tratare de negociarlo y los dll's son drivers para unas
> lectoras de carnets inteligentes (que se compraron a una empresa) que
> esta conectada a la pc via puerto serial.
>

> 2012/3/21 Luis Hernandez <lue...@gmail.com <mailto:lue...@gmail.com>>


>
> Lo que yo haría....
>
> Si los dlls son de librerías del negocio, se supone que se tienen
> los fuentes, entonces los migraría completamente a Java (aunque por
> nada del mundo usaría Java).
>
> Si los dlls son de librerías utilitarias, estoy completamente seguro
> que existen librerías para hacer casi cualquier cosa en Java para
> reemplazar las dlls que comentas.
>
> Como último comentario, si quieres algo que funcione en linux (o sea
> multiplataforma), debes partir por no usar dlls, y mentalizarte a
> migrar todo.
>
> PD: presiento que este hilo va a ser laaaaaaaargo, tratemos de no
> hacerlo, y olvidémos que dijo Java, xD
>
>
> El 21 de marzo de 2012 21:52, Samuel Duarte <s.du...@gmail.com

> <mailto:s.du...@gmail.com>> escribió:


>
> Buenas Noches, les escribía porque estoy trabajando actualmente
> en un proyecto donde se debe desarrollar una aplicación de
> escritorio en java que va a reemplazar a un app que actualmente
> esta en funcionamiento y fue desarrollada en visual basic 6,
> haciendo uso de unos .dll muy específicos de windows.
>
> ¿Que se recomienda en este caso para utilizar esos .dll desde la
> aplicación hecha en java de tal forma que pueda ejecutarse en
> linux u otro sistema operativo sin problemas?
>
> De antemano, gracias por la ayuda.
> Hasta Luego.
>
> _______________________________________________
> l-desarrollo mailing list

> l-desa...@velug.org.ve <mailto:l-desa...@velug.org.ve>


> http://listas.velug.org.ve/mailman/listinfo/l-desarrollo
>
>
>
>
> --
> Ing. Luis Hernández
> Ingeniero en Computación
> Ubuntu 11.10 / Debian squeeze

> lue...@gmail.com <mailto:lue...@gmail.com>
> http://cyberrevolucionario.blogspot.com/
> @luelher <http://twitter.com/luelher>


> 0424-5558074
> 0416-5013339
> Usuario Linux Nro 429461
>
>
> _______________________________________________
> l-desarrollo mailing list

> l-desa...@velug.org.ve <mailto:l-desa...@velug.org.ve>
> http://listas.velug.org.ve/mailman/listinfo/l-desarrollo

Angel Leon

unread,
Mar 22, 2012, 12:16:18 AM3/22/12
to Aplicaciones y Desarrollo en Linux
Para ejecutar tu app en Linux u otro sistema operativo sin problema, si piensas depender de una .dll en el caso de windows, vas a necesitar portear y recompilar el codigo que genera esa .dll en windows y tener el equivalente para tus otros sistemas operativos (en FrostWire le decimos a esos trucos "native dependencies" y tratamos de evitarlas a todo costo)

Puedes integrar esas dependencias nativas utilizando JNI o JNA, JNI es la forma old school mas manual de hacer los wrappers a tus librerias, JNA es una forma un poco mas sencilla pero vas a necesitar el jar de JNA y vas a tener que hacer tus wrappers en Java en un modo muy especifico.

http://twitter.com/gubatron



2012/3/21 Samuel Duarte <s.du...@gmail.com>

Samuel Duarte

unread,
Mar 22, 2012, 12:59:45 AM3/22/12
to Aplicaciones y Desarrollo en Linux
Bien, gracias por las ideas aportadas. Aprovecho para indicar que si bien solo los drivers estan para windows y no es obligatorio que actualmente corra en linux, en un futuro va a tener que ejecutarse en ambas plataformas.

2012/3/21 Angel Leon <guba...@gmail.com>

Aly González

unread,
Mar 22, 2012, 9:01:34 AM3/22/12
to Aplicaciones y Desarrollo en Linux

Si estas pensando en portabilidad y vas a usar comunicaciones seriales en java puedes usar, de una vez, las .jar de txrx para comunicaciones seriales y te independizas de las "dll del fabricante" que utilizas, aunque si quieres seguir en windows utiliza comapi que trabaja con el win32com.dll


________________________________
From: Samuel Duarte <s.du...@gmail.com>


To: Aplicaciones y Desarrollo en Linux <l-desa...@velug.org.ve>

Sent: Thursday, March 22, 2012 12:29 AM
Subject: Re: [l-desarrollo] Desarrollo de aplicacion de escritorio en Java

Alejandro Imass

unread,
Mar 23, 2012, 7:45:14 AM3/23/12
to Aplicaciones y Desarrollo en Linux

Para interactuar con una dll tienes que conocer de antemano su
interfaz, es decir su header file y conocer el lenguaje original de
desarrollo de la dll.

Luego necesitas un traductor entre tu lenguaje, en este caso Java, y
la dll. Esto es porque los tipos nativos de un lenguaje y otro
seguramente no van a ser iguales, ejemplo, mapear una estructura de C
a un objecto Java y vice-versa. Seguramente en Java hay librerías y/o
mecanismos para interactuar con dll en Windoze.

Si estuviesen usando Perl, generalmente es tan sencillo como ejecutar
h2xs con el .h t la gran mayoría del mapeo se hace automágicamente si
está hecha en C. Perl provee un lenguaje "pega" llamado XS que permite
mapear fácilmente entre la estructuras de Perl y otros lenguajes,
especialmente C. En Perl como es de costumbre, hay más de una forma de
hacerlo por lo que también existen libs tales como Win32::APi que
permite invocar la dll en Win32 directamente sin tener que usar XS.

Si quieres "portabilidad" deberías crear una clase que abstraiga las
funciones de acceso a la dll de tal manera que en el futuro puedas
reemplazar la dll por un shared object en Linux y no tener que
modificar el código hacia arriba. Esto se conoce como "wrapper" y
permite aislar tu código de la implementación específica de hardware o
similar.

Saludos,

--
Alejandro Imass

> De antemano, gracias por la ayuda.
> Hasta Luego.
>

Reply all
Reply to author
Forward
0 new messages