在OSGi容器中使用Squeryl

时间:2015-05-31 21:51:35

标签: scala osgi apache-karaf karaf squeryl

有没有人成功让Squeryl在OSGi环境中工作,特别是在Karaf 3.03上。

到目前为止,我已经获得了加载,scala库,squeryl和jdbc驱动程序的各个依赖项。已安装的bundle看起来像这样:

51 | Resolved |  80 | 0.3.0.SNAPSHOT                            | ac.za.cput.pe.model                           
52 | Active   |  80 | 2.11.6.v20150224-172222-092690e7bf        | Scala Standard Library                        
53 | Active   |  80 | 0                                         | wrap_mvn_org.squeryl_squeryl_2.10_0.9.5-6     
54 | Active   |  80 | 2.10.0.v20121205-112020-VFINAL-18481cef9b | Scala Standard Library                        
55 | Active   |  80 | 0                                         | wrap_mvn_cglib_cglib-nodep_2.2                
56 | Active   |  80 | 0                                         | wrap_mvn_org.scala-lang_scalap_2.10.0         
57 | Active   |  80 | 2.10.0.v20121205-112020-VFINAL-18481cef9b | Scala Compiler                                
58 | Active   |  80 | 2.10.0.v20121205-112020-VFINAL-18481cef9b | Scala Reflect                                 
59 | Active   |  80 | 0                                         | wrap_mvn_postgresql_postgresql_9.1-901-1.jdbc4

在我的包中,我的代码如下:

Class.forName("org.postgresql.Driver")
SessionFactory.concreteFactory = Some(()=>
  Session.create(
    java.sql.DriverManager.getConnection("jdbc:postgresql://localhost:5432/pe","postgres"
    ,"12345"),new PostgreSqlAdapter
  )
)

基本上尝试创建squeryl会话工厂。

然而,当我启动karaf时,这是我得到的错误:

  

java.lang.LinkageError:加载器约束违规:解析方法时“org.squeryl.SessionFactory $ .concreteFactory_ $ eq(Lscala / Option;)V”类加载器(org / apache / felix / framework / BundleWiringImpl的实例) $ BundleClassLoaderJava5)当前类,ac / za / cput / pe / model / activator / Activator,以及类加载器(org / apache / felix / framework / BundleWiringImpl $ BundleClassLoaderJava5的实例),用于已解析的类,org / squeryl / SessionFactory $,具有签名

中使用的concreteFactory_ $ eq类型的不同Class对象

有没有人有任何想法?我跳出阳台几个小时:(

1 个答案:

答案 0 :(得分:0)

看起来很像你有一些不同的罐子。 首先确保正确导入所有依赖项。其次,请确保您不会将这些依赖项部分嵌入您自己的捆绑包中。 错误消息非常清楚该问题。

您使用的是与运行时提供给您的版本不同的版本。这可能是因为导入错误(确保版本匹配)或您在包中包含不同版本的包。