У нас был похожий случай, когда мы разработали соединитель для доступа к внешнему хранилищу WebDav и хотели использовать его также из отдельного приложения (неуправляемого).
Я верю, что самый простой способ - решить эту проблему на уровне разработки и организовать свой код таким образом, чтобы основная логика коннектора была независимой от JCA и могла легко использоваться повторно. Затем вы можете обернуть это специальным кодом JCA, который выставляет соединитель на AS. Возможно, он даже может быть упакован в две банки - это, по крайней мере, решение, которое мы выбираем (но мы упаковали все в одну .jar).
В противном случае разъем JCA является «клеем» между следующими тремя сторонами:
- Сервер приложений
- EIS
- Компонент приложения.
Должна быть возможность имитировать AS с облегченной реализацией необходимых классов, а затем напрямую использовать соединитель JCA.
Одной из основных задач AS в отношении JCA-соединителя является управление пулом соединений, и, насколько я помню, соответствующий интерфейс, который вы затем должны реализовать, - ConnectionManager
.
Соединитель JCA получает ссылку на ConnectionManager
, но реализация зависит от AS. Написание легкой реализации, которая обеспечивает элементарное объединение (или вообще без объединения), звучит выполнимо.
Однажды я написал диаграмму последовательности механизма распределения соединений . Может быть, вы найдете это полезным. Другой интерфейс - ResourceAdapter
, где вы определяете запуск / выключение, но это легко вызвать вручную.
(Вероятно, это немного больше, и, конечно, это зависит от того, что использует ваш JCA-соединитель. Например, если он использует Work
и WorkManager
, тогда он становится намного сложнее для имитации. То же самое замечание, если разъем является транзакционным. Но это не похоже на ваш случай.)
В противном случае, я думаю, что Spring имеет некоторую поддержку JCA, возможно, стоит посмотреть, как они это сделали.
При чтении спецификации JCA, есть
предположительно некоторая поддержка для выполнения
код в неуправляемой среде
Можете ли вы упомянуть конкретную часть спецификации, о которой вы говорите?