Передача И Вызов Лямбд На Сервере И Отказ От Docker/Deploy/…

При разработке клиент-серверного приложения у меня всегда возникает вопрос: как мне его развернуть на сервере, упаковать в jar/war/docker после написания кода, а потом еще нужно перенести на сервер и сделать много других вещей, просто чтобы запихнуть кусок кода на сервер.

Было бы неплохо просто передать код на сервер как лямбду, точно так же, как мы передаем лямбду в функцию, точно так же передаем ее на сервер.

Но у меня была идея, как облегчить этот процесс, и мне это удалось.

  
   

1 | var query = TcpQuery 2 | .

create(IEnv.class).

host("myserver.com").

port(9988) 3 | .

build(); 4 | 5 | query.apply( 6 | env -> env.processes().

stream().

filter( 7 | p -> p.getName().

contains("java") 8 | ) 9 | .

collect(Collectors.toList()) 10| ).

forEach(System.out::println);

Вот Java-код,
  • Строки с 1 по 5 включительно и 10 - работа на клиенте
  • И строки с 6 по 9 (тело лямбды env-> .

    ) работают на сервере.

И это не псевдокод, это реальный рабочий код на Java (11).

Действительно, код строк с 6 по 9 (тело самой лямбды) передается на сервер и выполняется на сервере, при этом сервер ничего не знает об этом куске кода, он принимает этот код, выполняет его и отдает. обратно к клиенту - и затем продолжаю писать код без какого-либо развертывания, не выходя из IDE (Idea/Eclipse/etc.).

Статья будет о том, что такое Serializable Lambda в Java, и как передать байт-код таких лямбд на сервер, без перезапуска сервера, т.е.

в теории отказаться от привычных схем развертывания приложений и написать более удобный API (это моя фантазия).




Допустим, у нас есть следующий интерфейс IEnv:

public interface IEnv {

Теги: #программирование #java #языки программирования #компиляторы #пиар
Вместе с данным постом часто просматривают: