Как передать данные из приложения в адаптер ресурсов JCA? - PullRequest
0 голосов
/ 17 ноября 2011

Я хочу настроить самописный адаптер входящих ресурсов JCA 1.6 (RA).Моя большая проблема заключается в том, что RA должен получить доступ к некоторым (динамическим) данным конфигурации, живущим в приложении, которое использует RA.Теперь я знаю, что это противоречит первоначальной идее всей идеи JCA, но, к сожалению, я не могу изменить этот дизайн так быстро, как бы мне хотелось / нужно.Данные, которые мне нужно получить в RA:

  • порт, который он должен прослушивать,
  • лицензия, используемая для всего приложения (функция, предоставляемая RA, требует дополнительной лицензии)
  • дополнительные данные конфигурации, хранящиеся в БД

У меня есть четыре идеи:

  1. Использование asadmin create-resource-adapter-config,Из-за того, что Glassfish, похоже, не перезапускает приложения в зависимости от RA, нам нужно перезапустить приложение после этого.Хотя эта попытка подходит для порта, она не подходит для других данных.
  2. Используйте администрируемые объекты, чтобы дать моему приложению возможность передавать данные в RA.Эта идея упоминается здесь .Я полагаю, что это так, но в главе 13.4.2.3 спецификация гласит, что

    Обратите внимание, что администрируемые объекты не используются для настройки асинхронной доставки сообщений на конечные точки сообщений.JavaBean ActivationSpec используется для хранения всей необходимой информации активации, необходимой для настройки асинхронной доставки сообщений.

    Но я не могу получить какие-либо динамические данные для объекта ActivationSpec (ни через DeploymentDescriptor, ни через аннотации).Или я что-то здесь упустил?: -)

  3. Используйте JDBC напрямую для доступа к данным (также взял идею из здесь ).Хотя это, вероятно, лучшая идея, она не работает для упомянутых данных лицензирования, поскольку они не хранятся в БД.

  4. Последняя идея, которую я имел, заключалась в том, чтобы поместить метод вMessageDrivenBean (через мой интерфейс), который используется для извлечения данных из RA.Этот метод может быть вызван из RA и предоставит данные.Но: я просто думаю, что это довольно оскорбительно, поскольку связывает RA с приложением.

Уважаемое сообщество, что вы думаете об этом?Боюсь, что не так просто найти ответы на эти вопросы, поэтому я был бы очень рад узнать мнения!

Спасибо и ура, Юлий

Ответы [ 2 ]

0 голосов
/ 14 марта 2012

Решение, которое я наконец-то придумал, заключается в использовании аннотации @ConfigProperty.Это означает, что я использую первый вариант моего вопроса выше.

Так что мой класс ResourceAdapter выглядит следующим образом:

public class Hl7ResourceAdapter implements ResourceAdapter {
    @ConfigProperty
    private Integer port = null;

    // Rest from ResourceAdapter interface omitted here...

    // Use port here to open socket...
}

Поля @ConfigProperty теперь можно задавать с помощью либо

  • ресурс-адаптер-config
  • дескриптор развертывания ra.xml

Теперь, чтобы перенастроить эти настройки, я использую интерфейс REST Glassfish для изменения этих настроек программно (можно также использовать команду asadmin create-resource-adapter-config).Я обхожу проблему тем, что glassfish не перезапускает приложение, использующее адаптер ресурсов, просто перезапуская его самостоятельно через REST.(Если быть точным: я отключаю приложение, а затем снова включаю его, чтобы обойти еще одну ошибку в Glassfish)

Несколько дополнительных замечаний:

  • Мы развернемФайл .rar адаптера ресурсов в .ear приложения, использующего его.
  • У нас есть отдельное приложение за пределами Glassfish (автономное), которое вызывает интерфейс REST для таких вещей, как перезапуск приложения адаптера ресурсов и т. д.Очевидно, что приложение не может перезапустить себя должным образом.

Надеюсь, это поможет. kutuzof , это даст вам дальнейшее развитие?

0 голосов
/ 06 марта 2012

В ra.xml есть возможность определить config-свойства.В Websphere они затем отображаются как редактируемые поля в таблице пользовательских свойств для выбранного адаптера ресурса.Я работаю над аналогичной проблемой, мне также нужно передать информацию об имени хоста / порте в RA.К сожалению, я не понял, как читать содержимое этих полей из RA.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...