所以我松散地跟随着安达图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没有解决呢?我检查了一下,它似乎是用属性name=ManagedDS注册的,但是我对Felix非常陌生,所以我不太确定这里发生了什么。
我也试着添加这个
@ServiceDependency(filter="(name=ManagedDS)")
private volatile DataSource ds;为我的一个服务,但这也无法解决。谢谢您在这方面的帮助,但是我最感激的是一种自己调试和解决这个问题的方法。
发布于 2015-03-30 19:52:16
所以,Amdatu视频教程建议我应该添加
Import-Package: javax.sql;version=1.0.0给我的包。我试着删除它,它起作用了(当它在我将所有版本设置为小范围后停止解析该导入时,我就这样做了。)我还是不知道它为什么这么做,希望我能早点尝试)
因此,我猜想它为什么现在起作用了--我的OSGi容器中的包可能使用了两个不同的javax.sql.DataSource版本/实例。可能是来自postgres包裹和其他地方(系统?)。也许OSGi的一位专家可以对此发表评论并澄清这一点?
另一个子问题是,正如那个视频所暗示的那样,添加这个导入是一件好事,我能做些什么来使它发挥作用,或者如果它不重要,我就不去费心了?
https://stackoverflow.com/questions/29335706
复制相似问题