Как подключиться к внешней, уже запущенной JVM, используя Inline::Java
?
Я пытаюсь подключиться к работающему OSGi-приложению, чтобы я мог отправлять и получать объекты, массивы, списки и т.д. Как я понимаю, Inline::Java
создает свою собственную JVM для запуска кода Java; все, что мне нужно, чтобы выяснить, как общаться между этим JVM и тем, в котором работает приложение.
Я пробовал использовать RMI со следующим кодом для клиента:
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import example.hello.Hello;
public class Client {
private Client() {}
public static void main(String[] args) {
String host = (args.length < 1) ? null : args[0];
try {
Registry registry = LocateRegistry.getRegistry(host);
Hello stub = (Hello) registry.lookup("Hello");
String response = stub.sayHello();
System.out.println("response: " + response);
} catch (Exception e) {
System.err.println("Client exception: " + e.toString());
e.printStackTrace();
}
}
Когда я компилирую и запускаю его отдельно, он работает, но когда я пытаюсь внедрить этот код в Perl-скрипт с использованием Inline::Java
, он дает ошибку:
C:\Users\josesong\Documents\RMI_Test>perl hello.pl
A problem was encountered while attempting to compile and install your Inline
Java code. The command that failed was:
"C:\Program Files\Java\jdk1.8.0_20\bin\javac.exe" -deprecation -d "C:\Users\j
osesong\Documents\RMI_Test\lib\auto\hello_pl_5a5a" Client.java > cmd.out 2>&1
Каталог сборки:
C:\Users\josesong\Documents\RMI_Test\build\hello_pl_5a5a
Сообщение об ошибке:
Client.java:3: error: package example.hello does not exist
import example.hello.Hello;
^
Client.java:14: error: cannot find symbol
Hello stub = (Hello) registry.lookup("Hello");
^
symbol: class Hello
location: class Client
Client.java:14: error: cannot find symbol
Hello stub = (Hello) registry.lookup("Hello");
^
symbol: class Hello
location: class Client
3 errors
Чтобы отладить проблему, я cd
к каталогу сборки и проверил выходной файл, который выглядел следующим образом:
at hello.pl line 2.
BEGIN failed--compilation aborted at hello.pl line 2.
Что может быть причиной этого?
Perl-скрипт:
use Inline (Java => Config => DIRECTORY => 'C:\Users\josesong\Documents\RMI_Test');
use Inline Java => 'C:\Users\josesong\Documents\RMI_Test\Client.java';
Решила проблему, указав путь к классам и используя конфигурацию STUDY, например:
use Inline (Java => Config => DIRECTORY => 'tmp');
use Inline Java => 'C:\Users\josesong\Documents\RMI_Test\Client.java',
CLASSPATH => 'C:\Users\josesong\Documents\RMI_Test',
STUDY => ['example.hello.Hello', 'example.hello.Server'];
$obj = Client -> new();
$obj -> main([]);
Inline::Java
; если это не сработает, опубликуйте вопрос с указанием кода, который вы пробовали, и точной ошибки, которую вы получили. Если есть реальный код и конкретное сообщение об ошибке, вы, скорее всего, получите помощь.