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