Frankly hầu hết các cách bằng cách nào đó chạy Python trực tiếp từ bên trong JVM không hoạt động. Chúng tương đối không tương thích (bản phát hành mới của thư viện bên thứ ba có thể sử dụng các tính năng python 2.6 và sẽ không hoạt động với Jython 2.5) hoặc hacky (nó sẽ phá vỡ với chồng chéo JVM khó hiểu không thực sự dẫn đến giải pháp).
Cách ưa thích của tôi để tích hợp cả hai sẽ sử dụng RPC. XML RPC không phải là lựa chọn tồi ở đây, nếu bạn có lượng dữ liệu vừa phải. Nó được hỗ trợ khá tốt — Python có trong thư viện chuẩn của nó. Các thư viện Java cũng dễ tìm. Bây giờ tùy thuộc vào thiết lập của bạn hoặc là phần Java hoặc Python sẽ là một máy chủ chấp nhận kết nối từ ngôn ngữ khác.
Cách thức thay thế ít phổ biến hơn nhưng đáng xem xét để thực hiện RPC là trình khởi động trước Google, có 2/3 hỗ trợ cho nice rpc. Bạn chỉ cần cung cấp lớp vận chuyển của bạn. Không phải là nhiều công việc và sự tiện lợi của văn bản là hợp lý.
Một tùy chọn khác là viết trình bao bọc C xung quanh các phần chức năng Python mà bạn cần để hiển thị với Java và sử dụng nó thông qua các plugin gốc của JVM. Bạn có thể giảm đau bằng cách đi với SWIG SWIG.
Về cơ bản trong trường hợp của bạn nó hoạt động như thế:
- Tạo một giao diện SWIG cho tất cả các phương pháp các cuộc gọi từ Java đến C++.
- Tạo mã C/C++ sẽ nhận cuộc gọi của bạn và gọi nội bộ thông dịch viên python bằng thông số chính xác.
- Chuyển đổi phản hồi bạn nhận được từ python và gửi nó qua swig quay lại mã Java của bạn.
Giải pháp này khá phức tạp, một chút quá mức cần thiết trong hầu hết các trường hợp. Tuy nhiên nó là giá trị làm nếu bạn (vì lý do nào đó) không thể đủ khả năng RPC. RPC vẫn sẽ là lựa chọn ưa thích của tôi.
Nếu thư viện python là tất cả được viết bằng python tinh khiết, những gì về việc sử dụng Jython? – fabrizioM