0

所以我松散地遵循 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

“dm”的输出:

[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;

到我的一项服务,但这也无法解决。感谢您对此提供的任何帮助,但我最感激的是一种自己调试和解决此问题的方法。

4

1 回答 1

2

所以,Amdatu 视频教程建议我应该添加

Import-Package: javax.sql;version=1.0.0

到我的包裹。我尝试删除它并且它有效(当我将所有版本设置为小范围后它停止解析导入时我这样做了。仍然不知道它为什么这样做并希望我早点尝试)

所以我猜测它为什么现在可以工作 - 我的 OSGi 容器中的包可能使用了 javax.sql.DataSource 的两个不同版本/实例。可能来自 postgres 包和其他地方(系统?)。也许其中一位 OSGi 大师可以对此发表评论并澄清它?

另一个子问题是该视频建议添加该导入是一件好事,我该怎么做才能使其工作,或者如果它不重要,我应该不打扰?

于 2015-03-30T19:52:16.303 回答