Я пишу адаптер ресурсов JCA. Я также пытаюсь полностью понять часть управления соединениями в спецификации JCA. В качестве мысленного эксперимента представьте, что единственным клиентом этого адаптера будет клиент приложения Java Swing, расположенный на другом компьютере. Также предположим, что адаптер ресурсов также будет связываться со своей «корпоративной информационной системой» (EIS) по сети.
Как я понимаю спецификацию JCA, файл .rar развертывается на сервере приложений. Сервер приложений создает реализацию файла .rar интерфейса ManagedConnectionFactory. Затем он просит его создать фабрику соединений, которая является непрозрачным объектом, который развернут в JNDI для пользователя, чтобы использовать его для получения соединения с ресурсом. (В случае JDBC фабрика соединений представляет собой javax.sql.DataSource.)
Требуется, чтобы фабрика соединений сохраняла ссылку на ConnectionManager, предоставляемый сервером приложений, который, в свою очередь, должен быть сериализуемым. Это имеет смысл - для того чтобы фабрика соединений была сохранена в JNDI, она должна быть сериализуемой, а для того, чтобы она сохраняла ссылку на ConnectionManager, ConnectionManager также должен быть сериализуемым. Так хорошо, этот маленький граф объектов устанавливается в дерево JNDI клиента приложения.
Здесь я начинаю тошнить. Является ли ConnectionManager - компонент, поставляемый сервером приложений, который должен обрабатывать управление соединением, совместное использование, объединение в пул и т. Д. - полностью присутствующим на клиенте в этот момент? Одной из его задач является создание экземпляров ManagedConnection, и ManagedConnection не обязательно должен быть Serializable, а пользовательское соединение, обрабатывающее его, также не должно быть Serializable. Это наводит меня на мысль о том, что весь механизм пула соединений оптово поставляется клиенту приложения и помещается в его дерево JNDI.
Означает ли это, что JCA-взаимодействия со стороны клиента обходят серверные компоненты сервера приложений? Где границы сети в JCA API?