--- обновление 2 ---Создание Hibernate сессии в OSGi службы с getServiceReference
Кажется, странная ошибка была вызвана другой странной ошибкой относительно расслоения начать заказ. Несмотря на то, что я установил начальный ордер для «проекта A, THEN project B», он иногда запускал его наоборот, тем самым вызывая проблему с ServiceReference. Кажется, наконец, работать без проблем.
Еще раз спасибо за то, что нашли время!
--- обновление ---
После тестирования моей программы сегодня утром, проблема внезапно исчезла. Я даже не модифицировал код в этот момент. После этого я получил довольно далеко от моего сервиса, но пока я пытался решить проблему с загрузкой класса сопоставления, проблема внезапно возникла. Перезапуск Eclipse ничего не сделал, перезагрузка моего ПК снова решила проблему. Кажется, что у меня нет связи с моим кодом ...
Несколько минут назад я получил свое обслуживание, я сделал несколько тестовых записей в своей базе данных, все в порядке. Теперь я работаю над созданием моей службы (предоставляя больше возможностей для взаимодействия с базой данных и т. Д.), И проблема в том, что снова, хотя я ничего не изменил в этой части кода.
TL; DR:
Кажется, совершенно случайно ошибка.
Благодарим за ответы, так или иначе. Я рассмотрю эти варианты, если мне когда-нибудь понадобится разобраться в этом вопросе, но сейчас я думаю, что я согласен с тем, что доказал, что моя программа работает, потому что эта спорадическая ошибка, похоже, не моя ошибка. (Это было всего лишь упражнение в любом случае, программа для меня не имеет практического применения).
--- original --- Итак, я работал над простой службой OSGi, которая использует Hibernate для доступа к базе данных.
--- опциональный стена текста ---
Большая часть информации по этой теме, кажется, довольно устаревшим, в основном потому, что официальная OSGi-поддержка спящего режима едва исполнился год. Все до этого довольно сложно и не очень полезно. (Я трачу на это некоторое время, прежде чем сдаваться). Devguide на эту тему (http://docs.jboss.org/hibernate/orm/4.2/devguide/en-US/html/ch17.html) также довольно редкий (я новичок как для Hibernate, так и OSGi, и это руководство, похоже, ожидает довольно глубоких знаний). Я попытался запустить проект quickstart «неуправляемый родной», но раньше я не использовал maven или karaf и сталкивался с некоторыми проблемами.
После этого я просто пытался интегрировать их HibernateUtil (https://github.com/hibernate/hibernate-orm/blob/4.2/documentation/src/main/docbook/quickstart/tutorials/osgi/unmanaged-native/src/main/java/org/hibernate/osgitest/HibernateUtil.java) в моей программе, но я всегда получаю NullPointerException на этой линии: sf = (SessionFactory) context.getService(sr);
потому что sr
является null
.(Стер получает указанный в строке выше ServiceReference sr = context.getServiceReference(SessionFactory.class.getName());
)
--- конец текста ---
Так основно я наткнулся на эту шаг за шагом руководство в ответ: Hibernate and OSGi integration, it unable to load hibernate configuration file и, казалось, работать хорошо для меня до сих пор (гораздо меньше работа с зависимостями и требуемыми связями), но потом я добрался до строки ServiceReference<?> ref = context.getServiceReference(SessionFactory.class.getName());
, и я уже знал, что произойдет; yup, ref
- null
, поэтому он не будет создавать сеанс.
После того, как вы нашли несколько других примеров «работающих» сервисов Hibernate, все они, похоже, создают свою сессию аналогичным образом, но я не могу найти кого-либо другого с этой проблемой.
Что я делаю неправильно, что может быть причиной этой проблемы? Есть ли что-то еще?
примечание: для простоты предположим, что моя программа выглядит точно так же, как в вышеупомянутом ответе. Единственный дополнительный шаг, который я сделал, это поместить пакет «Project A» в необходимые Bundes для «B», затем я начинаю расслоения в равноденствии eclipse.
нет ошибок, но при отладке я могу сказать, что ref
является null
(Очевидно, что я намерен представить себе его немного, но для этого мне нужно, чтобы заставить его работать в первую очередь ...)
Теперь я закончил свой пример для спящего режима. Вы можете найти его здесь: https://github.com/cschneider/Karaf-Tutorial/tree/master/tasklist-cdi –