использование аннотаций со стойками 2 в jboss не находит действий

Приложение использует Jboss и имеет файл ear, который содержит файл war и файл jar. Война захватила все наши веб-страницы. Классы действий, которые я аннотировал, находятся в файле jar, который находится в ухе. Из моего googleing я настроил свой файл struts.xml со следующими константами:

<constant name="struts.convention.action.fileProtocols" value="ear,jar,vfsfile,vfszip" />
<constant name="struts.convention.action.disableJarScanning" value="false"/>
<constant name="struts.convention.action.includeJars" value=".*/lightspeed.*?jar(!/)?,.*/lightspeed*?jar(!/)?,.*lightspeed.*?jar(!/)?,.*lightspeed*?jar(!/)?" />

Контейнер Jboss запускается нормально, но мое действие не загружается. Я загрузил исходный код для плагина соглашения, чтобы увидеть, что он использует для поиска классов действий, и, похоже, он просматривает военный файл только для классов действий при сканировании. Есть ли способ заставить его просматривать файл jar, содержащий класс действий, когда он сканирует аннотированные классы действий?

структура файла:
-application.ear
|--application.war
|--aplication_logic_actions.jar ‹--- содержит аннотированные классы действий

Я отладил код для плагина соглашения, и здесь я вижу свою проблему. В классе PackageBasedActionConfigBuilder и методе buildUrlSet() есть следующая строка кода:

UrlSet urlSet = new UrlSet(classLoaderInterface, this.fileProtocols);

после этого кода я получаю около 200+ URL-адресов. Затем он проходит через этот код:

if (excludeParentClassLoader) {

Этот блок условий удаляет все мои URL-адреса, так как все они, я думаю, из jboss, и у меня для excludeParentClassLoader установлено значение true. Затем он попадает в этот код:

urlSet = urlSet.includeClassesUrl(classLoaderInterface);

после этого я получаю один URL-адрес в моем наборе URL-адресов:

файл:/C:/evolution/trunk/powersports/jboss/server/dms/deploy/http-invoker.sar/invoker.war=file:/C:/evolution/trunk/powersports/jboss/server/dms/deploy/ http-invoker.sar/invoker.war

Теперь он, наконец, доходит до той части, в которой jar включает регулярное выражение.

List<URL> rawIncludedUrls = urlSet.getUrls();
Set<URL> includeUrls = new HashSet<URL>();
boolean[] patternUsed = new boolean[includeJars.length];

for (URL url : rawIncludedUrls) {

поскольку в наборе URL-адресов есть 1 URL-адрес, а моих банок нет, он их не находит. Должно быть что-то еще, что мне не хватает в том, как заставить мой URL-адрес отображаться в этом наборе URL-адресов до запуска кода сравнения регулярных выражений, я просто не знаю, что это такое


person Jarad Duersch    schedule 27.09.2012    source источник


Ответы (1)


Не уверен, что, по моему мнению, вам нужно иметь в файле struts.xml для Jboss.

<constant name="struts.convention.exclude.parentClassLoader" value="true" />

подробности см. на странице плагина ConventionPlugin-JBoss .

По умолчанию плагин Convention не будет сканировать jar-файлы на наличие действий. Для сканирования jar-файла его URL-адрес должен соответствовать хотя бы одному из регулярных выражений в struts.convention.action.includeJars.

У вас уже есть список включаемых банок в вашем struts.xml. Плагин Convention будет оценивать регулярное выражение по URL-адресу банки, а не по имени файла.

person Umesh Awasthi    schedule 28.09.2012
comment
Я пробовал это, думая, что он получит мой URL-адрес jar, но к тому времени, когда он просматривает регулярное выражение для включения jar-файлов, у него нет этого URL-адреса в списке URL-адресов для просмотра. У меня есть расширенное объяснение в моем вопросе выше с кодом плагина соглашения. - person Jarad Duersch; 28.09.2012