Persistence.xml и OSGi (равноденствие)

Ревностное соблюдение стандартов стоит на пути простоты.

MVC завышен для веб-сайтов. В основном это просто ВК, иногда М.

6
задан mainstringargs 30 June 2009 в 13:09
поделиться

5 ответов

Я использую не persistence.xml, а похожий hibernate.cfg.xml:

src/main/resource/hibernate/hibernate.cfg.xml

В моем активаторе я получаю файл через контекст пакета: Вот пример кода, как я это делаю, а также ссылка на этот файл:>

private void initHibernate(BundleContext context) {
        try {
            final AnnotationConfiguration cfg = new AnnotationConfiguration();
            cfg.configure(context.getBundle().getEntry("/src/main/resource/hibernate/hibernate.cfg.xml"));
            sessionFactory = cfg.buildSessionFactory();

        } catch (Exception e) {
            // TODO Auto-generated catch block
        }
    }

Как вы можете видеть, строка, которая получает файл конфигурации:

context.getBundle().getEntry("/src/main/resource/hibernate/hibernate.cfg.xml")

Как вы можете видеть, мой hibernate.cfg.xml НЕ находится внутри META- Папка INF. Он находится в корневой папке в /src/......

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

Christoph

1
ответ дан 10 December 2019 в 00:42
поделиться

Попробуйте использовать Bundle-ClassPath, как это, в своем манифесте

Bundle-ClassPath:., /Location/of/persistence.xml

0
ответ дан 10 December 2019 в 00:42
поделиться

Каталог Meta-inf не находится в пути к классам. Это должно работать, просто поместив его в свой каталог src . Если вы хотите, чтобы он находился в отдельном месте, вам нужно будет указать Bundle-Classpath, чтобы включить этот каталог. По умолчанию путь к классам - '.'.

0
ответ дан 10 December 2019 в 00:42
поделиться

Используйте EclipseLink и забудьте о Hibernate и других реализациях, потому что:

  • Вам придется слишком много играть с загрузчиком классов ... Thread.currentThread (). SetContextClassLoader (...)

  • У вас возникнет соблазн установить атрибут bundle-classpath и добавлять зависимости вручную вместо установки пакетов jar.

  • Вы получите провайдер не обнаружил ошибки, или вы не сможете найти persistence.xml

Все вышеперечисленные попытки могут не сработать после многих попыток.

Однако с EclipseLink это не проблема, реализация была разработана для работы в среде OSGI "из коробки", и здесь нет проблем с загрузкой классов.

6
ответ дан 10 December 2019 в 00:42
поделиться

У вас должен быть каталог, содержащий META-INF в пути к классам. В каждом каталоге выполняется поиск META-INF и, если он найден, выполняется поиск в файле persistence.xml.

Если вы поместите «META-INF» в путь к классам, вам понадобится еще один META-INF в этом каталоге.

1
ответ дан 10 December 2019 в 00:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: