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 может прокомментировать это и прояснить это?
Другой подвопрос заключается в том, что, как было показано в этом видео, полезно добавить этот импорт, что я могу сделать, чтобы он работал, или, если это не важно, мне просто не надоедать?