Spring config для загрузки ресурсов в комплекте - PullRequest
3 голосов
/ 25 ноября 2010

У меня есть пакет war osgi, который я создал из устаревшего веб-приложения. У меня проблема в том, что в весенней конфигурации есть ссылки на файлы, которые находятся на пути к классам (см. Ниже), что хорошо, когда устаревшая война была развернута на tomcat, поскольку их можно найти в файловой системе thr. Однако, поскольку osgi не имеет понятия файловой системы, эти файлы не могут быть найдены, и я получаю исключение для файла, который не найден. Может ли кто-нибудь, пожалуйста, сообщите мне, если я могу продолжать загружать ресурсы Classpth таким или другим способом. Или я должен загрузить их программно, используя org.springframework.osgi.io.OsgiBundleResource для примера.

<bean id="manager" class="com.xyz.abc.Manager" depends-on="workflowCache">
    <property name="configuration" value="classpath:com/xyz/abc/resource/workflow.xml"/>
</bean>

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 14 января 2011

Ребята, у меня была похожая проблема.Поэтому я попробовал это (изменил classpath -> file)

Это сработало, хотя это не кажется логичной причиной, поскольку файл находился в classpath и равноденствие не смоглонайдите его, используя classpath: но нашли файл, используя file:

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

1 голос
/ 25 ноября 2010

Проблема здесь, скорее всего, не в том, что OSGi не имеет понятия файловой системы, а в том, что файл больше не находится на пути к классам.

Я предполагаю, что когда война идет в обычном режиме, рабочий файл workflow.xml, на который вы ссылаетесь, находится в файловой системе и доступен через путь к классу tomcat. Загрузчик классов для WAR делегирует родительский загрузчик классов, который может получить доступ к файлу workflow.xml.

В OSGi ваш classpath определяется Bundle-Classpath и любым импортом пакета или требованиями к пакету. Этот файл workflow.xml, очевидно, недоступен с помощью любого из этих механизмов.

Есть несколько вариантов:

  1. Поместите файл workflow.xml в комплект и поместите его в Bundle-Classpath. Это не очень хорошо, если вы хотите, чтобы файл был редактируемым без перестройки WAB.
  2. При запуске платформы OSGi добавьте файл workflow.xml в путь к классам. Затем в качестве опции запуска фреймворка установите org.osgi.framework.bootdelegation как com.xyz.abc.resource. Обратите внимание, что если вы сделаете это, вы больше не сможете загружать com.xyz.abc.resource из среды OSGi, он всегда будет загружать их из родительского загрузчика классов инфраструктуры
  3. Если вы используете равноденствие, вы можете поместить внешние файлы в путь к классам комплекта, добавив external: в начало пути к файлу в Bundle-Classpath. Это несколько искусственно, так как ваш пакет вряд ли будет работать в другом месте.

Все это немного (очень) странно, так что вы можете посмотреть другой способ загрузки этого файла. Я не знаком с OsgiBundleResource.

Если вы работаете в OSGi, возможно, вы захотите взглянуть на спецификацию Blueprint Container, основанную на Spring DM. Мне известны две реализации: Apache Aries и Eclipse Gemini.

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