Amdatu JPA(bndtools,felix DM)没有解析DataSource服务

时间:2015-03-29 22:30:34

标签: osgi apache-felix bndtools amdatu felix-dependency-manager

所以我松散地遵循Amdatu JPA视频教程,我几乎让它工作......

一眼看上去一切都很好,只有DataSource服务没有解决,我不知道为什么。在我看来,它已注册。那么我该如何调试呢,应该有一些方法来调试这个,对吧? 启动时我在msg日志中有这个:

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

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

1 个答案:

答案 0 :(得分:2)

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

Import-Package: javax.sql;version=1.0.0

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

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

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