Будьте в спящем режиме, JDBC-драйвер и проблема OSGi

Обновление Ionic Angular до версии 4.2.0 исправило это. Казалось, это ошибка в Ionic 4.0.0

5
задан 25 March 2009 в 16:59
поделиться

5 ответов

Некоторое время назад я столкнулся с подобной проблемой . Решением было зарегистрировать пакет jdbc-provider и пакеты jdbc-user в качестве «приятелей». Это связано с тем, что один пакет не может использовать классы (как и драйверы jdbc) из другого без явного объявления этого. Это было для Eclipse, поэтому я полагаю, что это может вам помочь.

1
ответ дан 18 December 2019 в 12:02
поделиться

Я люблю TextMate, хотя заигрываю с NetBeans. Если вам нравится полнофункциональная (известная как раздутая) IDE, попробуйте. Довольно мило:

Если вы используете Spring для настройки Hibernate, то я предлагаю вам использовать класс SimpleDriverDataSource , так как это работает в OSGi, а Spring позволяет вам настраивать Hibernate с конкретным источником данных, а не передавать имя класса, в котором нуждается Hibernate для создания экземпляра.

Как только вы преодолеете эту проблему, вы, вероятно, столкнетесь с проблемами Hibernate, не видя классов вашего домена. У меня есть только опыт работы с подходом сопоставления XML, с которым я думаю, что проще в OSGi, так как я думаю, что способ аннотации требует некоторого вида AOP-ткачества, и это еще одна актуальная проблема с OSGi.

На данный момент, если вы не используете что-то как и dm-сервер Spring, вам нужно намного лучше ознакомиться с механизмом загрузки классов Java и с тем, как вы можете использовать OSGi ' Подход к сервисам для обхода несовместимостей между Vanilla Java и миром OSGi.

В частности, посмотрите, как корпоративные библиотеки используют загрузчик классов контекста, и как вы можете управлять этим. Я использую Spring dm для переноса унаследованного кода в сервисы OSGi, поскольку это облегчает управление загрузчиком классов контекста.

7
ответ дан 18 December 2019 в 12:02
поделиться

Вы заботились о корректном пакете, начинают заказывать? Существует способ установить уровень запуска каждого пакета, так, чтобы Ваша система могла загрузиться правильно. Корректный уровень запуска пакетов мог бы требоваться, если некоторые активаторы пытаются получить сервисы непосредственно. В случае, если сервисы не доступны, сервисные потребители просто застрянут.

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

Другая проблема могла бы состоять в том, что у Вас есть некоторые нерешенные зависимости. Удостоверьтесь, что все там. Можно сделать это путем получения консоли OSGi и просьбы список сервисов. В Равноденствии это сводится к - консольный параметр командной строки и "ss", сопровождаемый командами "диагонали" в оболочке OSGi.

РЕДАКТИРОВАНИЕ (отвечают на Ваш комментарий):

Драйверы регистрируются их интерфейсом. Будьте в спящем режиме затем, вероятно, ищет драйвер его интерфейсом, никакая потребность импортировать определенные классы драйвера. Это так или иначе представило бы нежелательную зависимость от реализации определенный класс.

3
ответ дан 18 December 2019 в 12:02
поделиться

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

Мы обходим проблему, используя политику партнеров Equinox, чтобы каждый комплект, поставляющий Объекты домена - это приятель Hibernate по загрузке классов. Мне не очень нравится этот подход, но у меня нет времени писать (надеюсь) элегантное решение, которое находится в моей голове.

Как я уже сказал в своем предыдущем посте, управление загрузчиком классов контекста, вероятно, является лучшая долгосрочная ставка, когда дело доходит до Hibernate.

3
ответ дан 18 December 2019 в 12:02
поделиться

Я не пробовал этого (так как я анти- СУБД, а значит и анти-ОРМ), но одним из решений может быть использование фрагментов OSGi.

Создайте фрагмент, содержащий ваши доменные классы, и укажите в качестве хоста пакет Hibernate. Этот фрагмент должен экспортировать пакеты ваших доменных классов.

Аналогично, вы можете сделать то же самое для драйвера JDBC, который вы хотите использовать. Возьмите классы драйверов и включите их в OSGi фрагмент, в котором в качестве пакета хостов указан Hibernate. Однако, вам не нужно экспортировать пакеты драйверов, так как они будут использоваться только в Hibernate-пакете.

Я подозреваю, что фрагменты не были полностью поддержаны Феликсом 9 месяцев назад, но сейчас, похоже, что это так: http://osgithoughts.blogspot.com/2009/09/felix-now-fully-supports-osgi-fragments.html

1
ответ дан 18 December 2019 в 12:02
поделиться
Другие вопросы по тегам:

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