Я не знаю о реализации.Я не думаю, что новое соединение установлено.Но то, что я знаю, это то, что чем больше объектов вы делите удаленно, тем больше объектов зависит от удаленной разыскивания для сбора мусора (поэтому будет больше объектов, живущих дольше, а не хорошо).
Альтернативный подход
Я рекомендую смешанный подход.Используйте хороший подход для клиента, но реализуйте его не так-то хорошо внутри:
interface Server {
public Handler getHandler(...);
}
interface Handler extends Serializable {
// it gets copied!
public X doThis(...);
public Y doThat(...);
}
class HandlerImpl implements Handler {
public X doThis(...) {
backDoor.doThis(this, ...);
}
public Y doThat(...) {
backDoor.doThat(this, ...);
}
private BackDoor backDoor;
}
interface BackDoor {
public X doThis(Handler h, ...);
public Y doThat(Handler h, ...);
}
class ServerImpl imlpements Server, BackDoor {
public Handler getHandler(...) {
return /*a handler with a self reference as backdoor, only ONE remote obj shared via TWO interfaces */
}
...
// it does everything
// it receives the handler
}
BackDoor и Handler являются синхронизированными интерфейсами.Первый имеет методы с Handler в качестве аргумента, второй имеет чистые методы.Я не думаю, что это имеет большое значение.А два разных интерфейса позволяют вам работать чисто, а клиент ничего не знает и позволяет тонкому сериализуемому обработчику выполнять грязную работу.
Надеюсь, вам понравится!