В вашем вопросе есть две проблемы, которые необходимо рассмотреть отдельно:
JNDI
Нет, вызов JMS-службы не зависит от наличия JNDI-ресурса, и вам не нужно развертывать JMS-клиент в контейнере. Причина использования JNDI в контейнере состоит в том, чтобы избежать жестко запрограммированных параметров конфигурации в коде вашего приложения (используя «каталог» именованных «вещей».)
Например, мы используем JNDI для получения пула соединений, из которого можно получить соединение jdbc, но я мог бы в равной степени создать соединение jdbc напрямую. Последнее подходит для тестирования или для утилиты командной строки, но, конечно, не подходит для общего случая (именно поэтому мы обычно выбираем первый вариант, основанный на jndi.)
С JMS, да, вам действительно нужен JNDI, но это не значит, что ваш клиент должен находиться в контейнере EE. Посмотрите учебное пособие по JMS на сайте Oracle / Sun и посмотрите раздел простых примеров:
http://download.oracle.com/javaee/1.3/jms/tutorial/1_3_1-fcs/doc/client.html
IIRC, каждый пример показывает клиентов, которых можно запустить из командной строки, и где вы просто передаете имя очереди и другие параметры из командной строки. Должно быть легко модифицировать этот код, чтобы вы могли загружать его из файла свойств или в качестве параметров при вызове функции.
Java в процедурах магазина
Если у вас есть клиент командной строки, который может получить доступ к очереди JMS, к которой вы хотите получить доступ, вы можете модифицировать этот код, чтобы он выполнялся как хранимая процедура. Да, вы можете использовать Java для написания хранимых процедур с Oracle ...
... теперь я думаю, что это ужасная особенность, слишком открытая для злоупотреблений. Но если у вас есть законная необходимость доступа к провайдеру JMS из PL / SQL, это может быть одним из способов.
Сначала преобразуйте ваш jms-клиент из командной строки в хранимую процедуру. Проверьте существующую документацию о том, как создавать хранимые процедуры на основе Java с Oracle.
http://www.stanford.edu/dept/itss/docs/oracle/10g/java.101/b12021/storproc.htm
http://download.oracle.com/docs/cd/B10501_01/java.920/a96659.pdf
Затем ваш PL / SQL-код вызывает хранимую процедуру так же, как они вызывают любой другой хранимый метод proc или SQL. И вуаля.
Прощальные мысли
Я никогда этого не делал, и на этом пути могут возникнуть проблемы. Однако, по крайней мере, концептуально, это должно быть возможно. По крайней мере, вы сможете создать утилиту командной строки jms, которую затем сможете конвертировать в хранимый процесс на основе Java.
редактировать
Очевидно, что в Oracle есть нечто, называемое Oracle Advanced Queuing, где вы можете напрямую обращаться к провайдеру JMS через PL / SQL.
http://www.akadia.com/services/ora_advanced_queueing.html
http://technology.amis.nl/blog/2384/enqueuing-aq-jms-text-message-from-plsql-on-oracle-xe
http://download.oracle.com/docs/cd/B10500_01/appdev.920/a96587/qintro.htm
Похоже, что для этого требуется много чтения и смазывание локтем, но это, безусловно, возможно (при условии, что вы используете правильную версию Oracle.)