所以我松散地遵循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;
我的一项服务,但也无法解决。感谢您对此提供任何帮助,但我最感激的是一种自行调试和解决方法。
答案 0 :(得分:2)
所以,Amdatu视频教程建议我应该添加
Import-Package: javax.sql;version=1.0.0
到我的捆绑包。我尝试删除它并且它有效(当我将所有版本设置为小范围后它停止解析导入时我做到了。仍然不知道它为什么这样做并希望我尽快尝试)
所以我猜到它为什么现在正常工作 - 我的OSGi容器中的软件包可能使用了两个不同的版本/ javax.sql.DataSource实例。可能是一个来自postgres包和其他地方(系统?)。也许其中一位OSGi大师可以对此发表评论并将其清除?
另一个子问题是,该视频表明添加该导入是一件好事,我该怎样做才能使其正常工作,或者如果它不重要我应该不打扰?