Ревностное соблюдение стандартов стоит на пути простоты.
MVC завышен для веб-сайтов. В основном это просто ВК, иногда М.
Я использую не 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
Попробуйте использовать Bundle-ClassPath, как это, в своем манифесте
Bundle-ClassPath:., /Location/of/persistence.xml
Каталог Meta-inf не находится в пути к классам. Это должно работать, просто поместив его в свой каталог src . Если вы хотите, чтобы он находился в отдельном месте, вам нужно будет указать Bundle-Classpath, чтобы включить этот каталог. По умолчанию путь к классам - '.'.
Используйте EclipseLink и забудьте о Hibernate и других реализациях, потому что:
Вам придется слишком много играть с загрузчиком классов ... Thread.currentThread (). SetContextClassLoader (...)
У вас возникнет соблазн установить атрибут bundle-classpath и добавлять зависимости вручную вместо установки пакетов jar.
Вы получите провайдер не обнаружил ошибки, или вы не сможете найти persistence.xml
Все вышеперечисленные попытки могут не сработать после многих попыток.
Однако с EclipseLink это не проблема, реализация была разработана для работы в среде OSGI "из коробки", и здесь нет проблем с загрузкой классов.
У вас должен быть каталог, содержащий META-INF в пути к классам. В каждом каталоге выполняется поиск META-INF и, если он найден, выполняется поиск в файле persistence.xml.
Если вы поместите «META-INF» в путь к классам, вам понадобится еще один META-INF в этом каталоге.