【问题标题】:Using Squeryl inside a OSGi container在 OSGi 容器中使用 Squeryl
【发布时间】:2015-05-31 21:51:34
【问题描述】:

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

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

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 的实例当前类 ac/za/cput/pe/model/activator/Activator 的 $BundleClassLoaderJava5) 和已解析类 org/squeryl/SessionFactory 的类加载器(org/apache/felix/framework/BundleWiringImpl$BundleClassLoaderJava5 的实例) $,对于签名中使用的类型concreteFactory_$eq有不同的Class对象

有人有什么想法吗?我还有几个小时要跳出阳台:(

【问题讨论】:

    标签: scala osgi apache-karaf karaf squeryl


    【解决方案1】:

    看起来很像您包含了一些不同的罐子。 首先确保您正确导入了所有依赖项。其次,确保您没有将这些依赖项部分嵌入到您自己的包中。 错误消息非常清楚地说明了这个问题。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-23
      • 2016-11-27
      • 2013-05-18
      • 2012-05-02
      • 1970-01-01
      • 2011-06-30
      • 1970-01-01
      • 2014-03-31
      相关资源
      最近更新 更多