Вы можете попробовать проверить флаг autoCommit соединения, чтобы увидеть, находится ли он в транзакции (независимо от того, откуда он пришел).
(Видимо, посмотрите принятый ответ, это не очень хорошо работает. Я не удаляю этот ответ, потому что следующее все еще остается:)
Но я думаю, что вы действительно должны изменить свой API, чтобы он зависел исключительно от внешних транзакций. Если вы все еще хотите поддерживать простой JDBC, оберните его в отдельный API, который просто запускает транзакцию.
Обновление: просто перечитайте свой вопрос и увидите, что вы не предоставляете API, но хотите использовать соединение, управляемое контейнером. Но все же, можете ли вы просто обязать (как часть требований вашего приложения), чтобы JTA вступил в силу? Если нет, вы можете предоставить опцию конфигурации для возврата к транзакциям, управляемым вручную. Для такой критической функции кажется разумным требовать правильной конфигурации (вместо того, чтобы пытаться угадать, что будет уместно).