Francamente la mayoría de las formas de ejecutar Python directamente desde dentro de JVM no funcionan. No son bastante compatibles (la nueva versión de la biblioteca de terceros puede usar las funciones de Python 2.6 y no funcionará con Jython 2.5) o hacky (se romperá con una pila de JVM críptica que no conducirá realmente a la solución).
Mi forma preferida de integrar los dos sería usar RPC. XML RPC no es una mala elección aquí, si tiene cantidades moderadas de datos. Es bastante compatible con — Python lo tiene en su biblioteca estándar. Las bibliotecas de Java también son fáciles de encontrar. Ahora, dependiendo de su configuración, la parte de Java o Python sería un servidor que acepte la conexión de otro idioma.
Una manera alternativa menos popular que vale la pena considerar para hacer RPC es Google protobuffers, que tienen 2/3 de soporte para nice rpc. Solo necesita proporcionar su capa de transporte. No es mucho trabajo y la conveniencia de escribir es razonable.
Otra opción es escribir un envoltorio en C sobre las piezas de la funcionalidad de Python que necesita exponer en Java y usarlo a través de los complementos nativos de JVM. Puede aliviar el dolor yendo con SWIG SWIG.
En esencia, en su caso, funciona así:
- crear una interfaz SWIG para todas las llamadas a métodos de Java a C++.
- Crea el código C/C++ que recibirá tus llamadas y llama internamente al intérprete de python con los parámetros adecuados.
- Convertir la respuesta que obtienes de python y enviarla a través de swig a tu código Java.
Esta solución es bastante compleja, un poco exagerada en la mayoría de los casos. Aún así, vale la pena hacerlo si (por algún motivo) no puede pagar los RPC. RPC aún sería mi elección preferida, sin embargo.
Si la biblioteca de python está escrita en python puro, ¿qué hay de usar Jython? – fabrizioM