Java-клиент для вызова алгоритма в jar-файле, который является частью веб-интерфейса в Java Spring - PullRequest
0 голосов
/ 07 мая 2019

У меня есть приложение, написанное на Java (Netbeans 8.0, JDK 1.7), в котором алгоритм выполняет технические вычисления. Алгоритм упакован в jar-файл, и я использую его в настоящее время двумя способами:

  1. Я обращаюсь к jar-файлу, содержащему алгоритм, через его открытые методы из локальной программы на Java, где jar-файл находится в пути к библиотеке этой программы.
  2. Я создал веб-интерфейс для этого jar-файла, используя Spring MVC (Spring Framework 3.2.7). Получившийся военный файл (содержащий jar-файл, содержащий алгоритм) теперь находится на сервере (Glassfish 4), и алгоритм можно вызвать через веб-браузер.

Оба отлично работают. Теперь я хочу получить доступ к этому jar-файлу, содержащему алгоритм, который находится в war-файле на сервере, также используя мой локальный клиент Java. Я потратил довольно много времени на это, но у меня большие трудности, чтобы начать.

У меня сложилось впечатление, что я не могу напрямую вызывать публичные методы jar-файла по сети. Это правильно?

Я думал о расширении Spring MVC, как добавление выделенного сервлета, который обрабатывает связь между моим локальным Java-клиентом и jar-файлом, содержащим алгоритм.

Возможно ли это вообще? Имеет ли это смысл? Если да, может ли кто-нибудь указать мне пример, как это можно сделать? Мол, где поставить нужные классы?

Ответы [ 2 ]

0 голосов
/ 08 мая 2019

Я наконец смог заставить его работать, по крайней мере, на локальном сервере:

В классе контроллера веб-интерфейса я добавляю такой метод:

@RequestMapping(value = "/xx0/", method = RequestMethod.GET)
public @ResponseBody String getCalculationResults (
            @RequestParam String id, @RequestParam double e1, @RequestParam double e2
    ) {
    System.out.println("getCalculationResults(): Input ... id="+id+"   e1="+e1+"   e2="+e2); 
    // here we can pass the parameters e1 and e2 to the algorithm 
    // (implemented in the jar-file, which is in the library when creating the war-file)

    // we get results e.g. as x1, x2, x3, and send them back in some format
    return new String("x1, x2, x3"); 
}

Java-клиент, например автономная программа теперь может вызывать jar-файл, который является частью war-файла на сервере, с кодом, подобным следующему:

public class AlgoCallerForTesting {

public static void main (String[] args) {
    AlgoCallerForTesting algoCaller= new AlgoCallerForTesting(); 
    algoCaller.processRequestToServiceTest(); 
}

private void processRequestToServiceTest () {
    String strId= "userXYZ"; 
    double e1=12.34, e2=56.7; 
    String request= "http://localhost:8080/AlgoGUI/" + "xx0/?id="+strId+"&e1="+e1+"&e2="+e2; 
    String erg=""; 
    try {
        URL url = new URL(request);
        BufferedReader dis = new BufferedReader(new InputStreamReader(url.openStream())); 
        String txt=""; 
        while ((txt=dis.readLine()) != null) erg += txt; 
    } catch (Exception e) { e.printStackTrace(); }
    System.out.println(erg);
}

}
0 голосов
/ 07 мая 2019

создалось впечатление, что я не могу напрямую вызывать публичные методы jar-файла по сети.Это правильно?

Я предлагаю вам взглянуть на RPC: «Удаленный вызов процедуры (RPC) - это когда компьютерная программа вызывает выполнение процедуры (подпрограммы) в другом адресном пространстве (обычнона другом компьютере в общей сети), который закодирован так, как если бы это был обычный (локальный) вызов процедуры, при этом программист явно не кодирует детали для удаленного взаимодействия. То есть программист пишет, по сути, один и тот же код, независимо от того,локально к исполняемой программе или удаленно. " википедии

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...