Теоретически JCA действительно будет выделенным API для этого.
Если приложение представляет собой EAR и классы EJB живут в чистом модуле EJB, существуют некоторые ограничения на то, что EJB разрешено делать. JCA может делать именно те вещи, которые EJB запрещены (отражение, статические поля, создание потоков, загрузка собственных библиотек и т. Д.).
Недостатком является то, что JCA - это «тщательно» недокументированный API, который больше предназначен для использования продавцами таких устаревших систем, которые вы описываете, чем «обычными» программистами приложений. Если вы хотите пойти по пути JCA, возможно, одним из источников информации является исходный код Quartz, который содержит адаптер входящего ресурса JCA для Quartz .
Непосредственную регистрацию синглтона в качестве слушателя следует делать осторожно. Устаревшая библиотека должна получить ссылку на прокси-класс Singleton, а не на фактическую реализацию (т.е. не передавать this
в унаследованную библиотеку).
Другим вариантом может быть предоставление обычного класса, который реализует необходимый интерфейс и регистрируется в устаревшей библиотеке. Получив уведомление, он может найти фабрику соединений JMS и очередь из JNDI, а затем отправить сообщение JMS, которое прослушивает компонент, управляемый сообщениями.