Можно ли отслеживать 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 отправляет сигналы выхода и прерывает любые ссылки на него, но, насколько мне известно, не поддерживает мониторы. Таким образом, вы можете ссылаться на него, просто будьте осторожны, так как ссылки являются двунаправленными.