Добрый день! К стати, с Новым Годом!
Есть ли способ получить объект, на который ссылается RMI Proxy, если известно, что объект этот находится в той же виртуальной машине?
Сценарий таков:
Имеем интерфейс-фабрику, который создаёт и выдает клиентам некоторые объекты через RMI.
Все объекты, которые создает фабрика — Remote, то есть, передаются по ссылке, а не по значению.
Этот же интерфейс содержит методы, в которые клиент может передать эти только-что созданные объекты, для некоторой обработки. Пример:
class MyFactoryImpl implements IMyFactory {
public IMyObject createObject() {
return new MyObjectImpl();
}
public void processObject(IMyObject object) {
// do something with object
// MyObjectImpl impl = (MyObjectImpl) object; // <------
}
}
В отмеченной строке объект, переданный от клиента, должен подвергнуться некой обработке, причем должен использоваться тот факт, что на самом деле это ссылка на MyObjectImpl. То есть, фабрика "знает" о внутренностях объектов, которые она же и плодит. Однако при вызове метода processObject через RMI приходит прокси, реализующий IMyObject и все вызовы методов на нем отправляются через RMI/TCP в ту же виртуальную машину, где и находится моя фабрика.
А теперь вопрос:
как с наименьшими затратами (без дополнения IMyObject новыми методами для получения какого-нибудь "UID" объекта) получить из IMyObject реальный MyObjectImpl, на который "указывает" прокси. Считаем, что "чужие" объекты, созданные в других фабриках, сюда передаваться не будут, поэтому известно, что получить MyObjectImpl можно всегда.
Поиском пользовался — возможно, есть способ сделать подобное через смарт-прокси, но нет ли способа проще?
Спасибо заранее!