Amdatu JPA (bndtools, felix DM) не разрешает службу DataSource

Так что я свободно следил за видеоуроком Amdatu JPA, и у меня почти получилось...

На первый взгляд все в порядке, только служба DataSource не разрешена, и я не знаю почему. Мне кажется, что это зарегистрировано. Итак, как мне отладить это, должен быть какой-то способ отладить это, верно? При запуске у меня это в журнале сообщений:

[CM Configuration Updater (Update: pid=org.amdatu.jpa.datasourcefactory.dd8bf61e-01b1-4732-9b0c-bba96e1f5aff)] DEBUG org.amdatu.jpa.datasourcefactory - ServiceEvent REGISTERED - [javax.sql.DataSource] - org.amdatu.jpa.datasourcefactory

Выход "дм":

[5] org.amdatu.jpa.datasourcefactory
  org.osgi.service.cm.ManagedServiceFactory(service.pid=org.amdatu.jpa.datasourcefactory) registered
    org.osgi.service.log.LogService service optional available
  javax.sql.DataSource(validationQuery=SELECT 1,name=ManagedDS,driverName=postgresql,serviceName=ManagedDS) registered
    org.osgi.service.log.LogService service optional available
    org.osgi.service.jdbc.DataSourceFactory (osgi.jdbc.driver.class=org.postgresql.Driver) service required available
    javax.transaction.TransactionManager service required available

Таким образом, вывод выше должен означать, что DataSource зарегистрирован, верно?

[31] org.amdatu.jpa.extender
  org.amdatu.jpa.extender.PersistenceBundleManager() registered
    org.osgi.service.log.LogService service optional available
    javax.persistence.spi.PersistenceProvider service required available
    active (Meta-Persistence=*) bundle optional available
  java.lang.Object(bundle=32) registered
    org.osgi.service.log.LogService service optional available
    org.amdatu.jpa.extender.PersistenceBundleManager service required available
  org.amdatu.jpa.extender.PersistenceUnitInfoImpl@7175ee92 unregistered
    javax.persistence.spi.PersistenceProvider (javax.persistence.provider=org.eclipse.persistence.jpa.PersistenceProvider) service required available
    javax.sql.DataSource (name=ManagedDS) service required unavailable

Все дальнейшее, что зависит от DataSource, очевидно, не решено

    javax.persistence.EntityManager service required unavailable

Так что я не понимаю, почему DataSource там не разрешен? Я проверил, и кажется, что он зарегистрирован с именем свойства =ManagedDS, но я совершенно новичок в Felix DS, поэтому я не совсем уверен, что здесь происходит.

Я также попытался добавить это

    @ServiceDependency(filter="(name=ManagedDS)")
private volatile DataSource ds;

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

1 ответ

Решение

Итак, видеоурок Amdatu предложил мне добавить

Import-Package: javax.sql;version=1.0.0

в мои связки. Я попытался удалить это, и это работает (я сделал это, когда он прекратил разрешать этот импорт после того, как я установил все версии на небольшие диапазоны. Все еще не знаю, почему это произошло, и хотел бы, чтобы я попробовал это раньше)

Так что я догадываюсь, почему это работает сейчас - пакеты в моем контейнере OSGi, вероятно, использовали две разные версии / экземпляры javax.sql.DataSource. Вероятно, один из пакета postgres, а другой где-то еще (система?). Может быть, один из гуру OSGi может прокомментировать это и прояснить это?

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

Другие вопросы по тегам