Как я могу подключиться к внешней JVM, используя Inline :: Java?

1

Как подключиться к внешней, уже запущенной 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';
  • 0
    Привет, Джо, ты задал целый ряд вопросов с неудовлетворительными результатами. Я бы порекомендовал другую тактику: задайте вопрос о том, как подключиться к работающей JVM на чистой Java . Специалисты по Java наверняка смогут вам в этом помочь. Как только вы это выясните, попробуйте запустить этот код с Inline::Java ; если это не сработает, опубликуйте вопрос с указанием кода, который вы пробовали, и точной ошибки, которую вы получили. Если есть реальный код и конкретное сообщение об ошибке, вы, скорее всего, получите помощь.
  • 0
    @ThisSuitIsBlackNot Я смог написать простой привет мир, используя RMI для связи между JVM в чистом Java, моя проблема, когда я пытался реализовать клиентский код в Perl с использованием Inline, заключался в том, что после компиляции он не мог найти класс Server. Я не вносил никаких изменений в код Java, просто указал на него скрипт Perl ...
Показать ещё 13 комментариев
Теги:
jvm
perl-module

1 ответ

1

Решила проблему, указав путь к классам и используя конфигурацию 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([]);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню