Можно ли отслеживать Pid почтового ящика, который представляет почтовый ящик Java через JInterface?

У меня есть процесс Java, который отправляет мои сообщения erlang gen_server через JInterface. Отправляемое мне сообщение включает в себя Pid почтового ящика, созданного на стороне Java. Этот Pid действителен в том смысле, что я могу отправлять сообщения обратно этому Pid, ​​и эти сообщения успешно хранятся в почтовом ящике на стороне Javan.

Однако выполнение монитора (process, Pid) приводит к мгновенному сообщению nodedown (noproc).

Есть ли способ контролировать этот Пид?

2 ответа

Решение

Узлы Java (и C) отличаются от узлов Erlang. Они скрыты и не реализуют все, что делают узлы Erlang. В частности, они не реализуют поддержку монитора.

Это задокументировано с помощью протокола распространения Erlang:

11.7 Новые сообщения Ctrl для distrvsn = 4 (OTP R6)

Они распознаются только узлами Erlang, а не скрытыми узлами.

MONITOR_P

...

OTP реализует механизм резервирования мониторинга для выполнения вызовов (псевдо)-gen_servers на таких узлах. Комментарий поучителен:

    %% Node (C/Java?) is not supporting the monitor.
    %% The other possible case -- this node is not distributed
    %% -- should have been handled earlier.
    %% Do the best possible with monitor_node/2.
    %% This code may hang indefinitely if the Process 
    %% does not exist. It is only used for featureweak remote nodes.

Почтовый ящик Java отправляет сигналы выхода и прерывает любые ссылки на него, но, насколько мне известно, не поддерживает мониторы. Таким образом, вы можете ссылаться на него, просто будьте осторожны, так как ссылки являются двунаправленными.

Другие вопросы по тегам