2009-03-04 16 views
5

Estoy trabajando en Java < -> Perl interacción. Me gustaría saber cuál es la mejor manera de pasar información de Perl a Java. (Excelentes respuestas sobre Perl y Java here y here por cierto).¿Cómo puedo pasar datos de Perl a Java?

Hay un montón de texto y XML (XML :: Twig) que estoy analizando en Perl, en un script que debo llamar desde una aplicación web Java. Así que tengo toda esta información recopilada, y la necesito para usarla dentro de ciertos objetos en Java.

¿Cuál podría ser una buena estrategia para enviar la información de Perl a Java? ¿Es posible devolver un objeto u otra estructura de datos compatible de Perl a Java?

Supongo que escribir en un archivo de texto y leerlo desde Java haría que toda la optimización obtenida mediante el uso de Perl careciera de sentido.

Perlformance es un problema importante aquí.

EDIT: Por lo que he visto here, tal vez en línea en Java sería una buena opción?

+0

¿Estás intentando convertir tu antiguo código Java en Perl? – TStamper

+0

1. Pruebe JSON 2. Deshágase de Perl, y use Java solamente :) –

+0

Estaba leyendo la publicación de esa pregunta y se recomendó usar JSON, Inline-Java, abrir conexión TCP y transferir datos y, por último, directamente pasar XML. * ¿Cuál es mejor entre los enfoques sugeridos? * ¿Hay otras opciones mejores para hacerlo, qué pasa con los servicios web o cualquier otra sugerencia? – Rachel

Respuesta

5

Si el rendimiento es importante, recomendaría que se ejecute un proceso persistente de Perl. Comenzar un intérprete de Perl cada vez que quiera ejecutar su código será bastante sobrecargado.

La forma más fácil de comunicarse es que el proceso Java abra una conexión TCP a los procesos Perl, escriba algunos datos y recupere algunos.

El formato que utilice para enviar datos de su proceso de Perl a su Java dependerá de lo que esté enviando y cuán genérico y reutilizable quiera que sea su código. El envío de cadenas XML será agradable y genérico, pero el envío de matrices de bytes creadas con pack en Perl y luego leer una con DataInputStream en Java será mucho, mucho más rápido.

+0

Puede usar Inline :: Java de esta manera. Puede crear un proceso de jvm que se comunique con su proceso de Perl. Es un formato o curso personalizado, pero le permite usar objetos nativos de Java en Perl y viceversa – mpeters

2

si ya tiene XML, su mejor opción es probablemente continuar usándolo.

+0

Nuestra primera implementación hizo que Java analizara los XML, pero descubrimos que Perl es mucho más rápido y más efectivo al hacer esto. Así que estamos tratando de derivar ese trabajo a Perl, que es mejor en eso. –

+0

Probablemente estés haciendo algo muy extraño si Perl está analizando XML más rápido que Java. –

+0

Utilizamos xPath para navegar por archivos XML y obtener valores de nodo; pero, ¿Perl no está orientado a ese tipo de trabajo (análisis de texto y cosas por el estilo)? –

3

JSON es un formato fácil y liviano para pasar datos.

puede agregar Rhino o algo similar a su kit de herramientas y puede obtener un rendimiento adicional (sin mencionar un motor de scripting), pero esto dependerá de qué tan complejo esté planificando su proyecto.

0

También me parece extraño que su código perl para analizar XML sea significativamente más rápido que el código equivalente en java. Sin embargo, incluso si lo es, no puedo imaginar que alguna vez sea más rápido que la sobrecarga incurrida por el IPC. Incluso si usa un proceso de perl persistente, aún tendrá que enviar datos, presumiblemente sobre un socket, luego recuperar algunos datos y finalmente deserializarlos en algo utilizable.

¿Ha intentado mejorar el rendimiento de su análisis XML en java? Si está usando DOM o una biblioteca de terceros como JDOM o Castor, intente usar SAX en su lugar. O tal vez sólo el uso de expresiones regulares en lugar de analizar el archivo XML sería más rápido (. jwz notwithstanding)

En cualquier caso, yo recomendaría usar un perfilador con el código Java para ver si se puede mejorar.

+1

. Hay una biblioteca de análisis de XML perl puro, pero nadie que se preocupe por la velocidad lo usa. La mayoría del análisis XML de Perl involucra a expat o libxml2 bajo el capó, que es rápido. – runrig

+0

No veo cómo va a hacer mucha diferencia. Incluso si el análisis XML sin formato es significativamente más rápido, aún tiene la sobrecarga del IPC. –

2

Inline::Java. Funciona muy bien una vez que lo pone en marcha.Hace unos años, estaba trabajando en un proyecto que tenía una aplicación web de Perl que hablaba con un servidor Java SOAP para comunicarse en tiempo real y era demasiado lento. Lo reemplazamos con un sistema que usaba Inline :: Java para la comunicación y fue mucho más rápido. Definitivamente minimice los puntos en los que pasa objetos de un lado a otro y trate de hacer que esos objetos sean simples (nos aferramos a cadenas, números y matrices) para evitar que las cosas se salgan demasiado de control. ¡Pero definitivamente soy un converso!

Cuestiones relacionadas