2013-12-18 2 views
4

Я пытаюсь найти лучший способ грамматически определить, работает ли моя программа на Jboss 5 или Jboss 7 (eap-6.1). Пути, которые я нашел до сих пор, - это jboss 5 или jboss 7, которые не работают, потому что код должен работать в обоих. Попробовали оба решения отсюда: How do I programmatically obtain the version in JBoss AS 5.1?, и они не сработали. Один из них жаловался на org.jboss.Main, не существующий в jboss 7, другой жаловался не на «jmx/rmi/RMIAdaptor».Определяет версию jboss программно между jboss 5 и 7

Единственный способ, которым я могу видеть, это сделать Class.forName для поиска «org.jboss.Version» (должен быть найден, если jboss 5), и если это не удается, выполните Class.forName «org.jboss.util. xml.catalog.Version "(jboss 7). Но это кажется ужасной идеей.

Причина, по которой мне нужно знать, работает ли война на jboss 5 или 7, заключается в том, что есть некоторые пользовательские файлы, которые расположены в разных местах в обоих. Так как «если JBoss 5, выполнить этот кусок кода, если JBoss 7 выполнить другой.

+0

Меня действительно интересует смысл этого вопроса. Единственный смысл, на который я мог поверить, чтобы приложение совместимо со всеми серверами. И это, на мой взгляд, совершенно невозможно. Pls расскажет мне больше о ваших намерениях. – Diversity

+0

Ну, приложение ищет другой файл войны. На jboss 5 он находится в «deploy» на jboss 7, он находится в папке «deployments». Я предполагаю, что другой способ, которым я могу это сделать, - это проверить только одну или другую папку внутри «jboss.server.base.dir» – Creature

+0

Я только что обновил свой последний ответ – Diversity

ответ

2

Хорошо, я только что увидел, в чем проблема.

Я предлагаю вам подумать о проблемах дизайна/рефакторинга вашего программного обеспечения.

Если вы хотите предоставить свое программное обеспечение в разных средах, отделите свою логику от от технологических зависимостей.

Сборка облицовок и интерфейсов для удовлетворения экологических условий.

В моем oppionen гораздо лучше думать, что мы должны поддерживать все платформы интеграции и поддерживать все версии. Это невозможно.

Отделите свою бизнес-логику и предложите конкретные интерфейсы. Эти интерфейсы (адаптеры) намного проще реализовать и поддерживать.

Надеюсь, это поможет.


ОБНОВЛЕНИЕ ОТНОСИТЕЛЬНО КОММЕНТАРИИ.


Я думаю, что решение для серверов 4 до 6 является использование MBean сервер JBoss для поиска зарегистрированного веб-приложения , который связан с развернутым WarFile.

Предлагаю сначала просмотреть зарегистрированный MBean веб-приложения вручную с помощью jmx-консоли JBoss. Имя WebApplication должно быть найдено под «веб-сайтом» или «веб-развертыванием» в jmx-консоли.

Если вы нашли это имя, вы можете реализовать собственный механизм поиска на основе jmx , чтобы проверить это имя.

Вот учебник: довольно старый, но я думаю, что он дает вам представление о том, как это сделать. Там должно быть больше учебных пособий для этой проблемы:

http://www.theserverside.com/news/1364648/Using-JMX-to-Manage-Web-Applications

В JBoss 7 я просто не могу дать вам подсказку, что его архитектура основана на OSGI. Поэтому для поиска других сервисов вы должны взглянуть на этот механизм.

В любом случае у вас нет прямого доступа к файловой системе и директории развертывания из приложения, которое развертывается в контейнере JEE, за исключением с использованием механизмов, предоставляемых контейнером. JNDI Lookup, механизм JMX ManagedBean, Java Connector Archicture (JCA) (не имеет смысла в вашем случае)

1

Это не ответ, просто предложения, поскольку реализация совершенно разные

Одним из способов может быть использовать» перехватчиков ", которые выполняются во время начальной загрузки и перед любым вызовом ejb, и там у вас есть доступ к контексту вызова, другими словами, контейнер ejb.

Я не могу привести вам какой-либо пример, но это будет точка доступа для запуска.

Еще одна точка доступа - это проверка на наличие компонентов JMX Beans, Консоль Adminstratore сервера JBoss. Вы можете ввести состояние JMX Bean в ваше приложение через Context Mechansim. Взгляните с версии 4 на механизм JMX Managed Bean. Архитектура JMX является основной концепцией JBoss 3-6, поэтому на данный момент вы можете влиять и поддерживать поведение JBoss.

Кроме того, я думаю, что у вас есть отличия от версии 4 до 6.x и 7.0, потому что с 7 это совершенно новая архитектура. С 7.0 архитектура JMX больше не существует.