我在 Karaf 4.1 中执行自己的包时遇到问题,我使用 Shiro 来保存用户 session ,但是当我恢复保存的 session 时,出现异常:
Caused by: java.lang.ClassNotFoundException: io.twim.models.User
block 引用>at java.net.URLClassLoader.findClass(URLClassLoader.java:381) ~[?:?] at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[?:?] at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:?] at org.apache.felix.framework.BundleWiringImpl.doImplicitBootDelegation(BundleWiringImpl.java:1782) ~[?:?] at org.apache.felix.framework.BundleWiringImpl.searchDynamicImports(BundleWiringImpl.java:1717) ~[?:?] at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1552) ~[?:?] at org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:79) ~[?:?]
我理解我的情况下的问题,Shiro 正在执行(强制转换)反序列化持久 session 对象,但在 Shiro 的 ClassLoader 中没有我的类 io.twim.models.User。我的 karaf 实例已安装此 bundle :
karaf@twim()> list START LEVEL 100 , List Threshold: 50 ID │ State │ Lvl │ Version │ Name ───┼────────┼─────┼─────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 51 │ Active │ 80 │ 3.1.0 │ DataStax Java Driver for Apache Cassandra - Core 52 │ Active │ 80 │ 19.0.0 │ Guava: Google Core Libraries for Java 73 │ Active │ 50 │ 2.16.1 │ camel-blueprint 83 │ Active │ 80 │ 1.3.0 │ Apache Shiro :: Core 86 │ Active │ 80 │ 1.0.0.SNAPSHOT │ twim-cache :: Distributed cache for TWIM 87 │ Active │ 80 │ 1.0.0.SNAPSHOT │ twim-cassandra :: Implementation Cassandra to TWIM 88 │ Active │ 80 │ 1.0.0.SNAPSHOT │ twim-common :: Bundle utility for all models, utilities, constants 89 │ Active │ 80 │ 1.0.0.SNAPSHOT │ twim-core-model :: Bundle utility for all models used in TWIM 90 │ Active │ 80 │ 1.0.0.SNAPSHOT │ twim-db :: Utilitaries to persitence into TWIM 91 │ Active │ 80 │ 1.0.0.SNAPSHOT │ twim-jaas :: JAAS authentication module for TWIM
我需要在 bundle 83 处添加标签 DynamicImport-Package:
83 │ Active │ 80 │ 1.3.0 │ Apache Shiro :: Core
在karaf中执行dynamic-import命令,我已经解决了这个问题:
karaf@twim()> dynamic-import 83
但我想在我的功能安装程序中自动执行此操作,添加此标签DynamicImport-Package:io.twim.models,现在我的 features.xml 如下所示:
<feature name="twim-auth" version="${project.version}"> <feature>twim-cassandra</feature> <bundle>mvn:org.apache.shiro/shiro-core/1.3.0</bundle> <bundle>mvn:io.twim/twim-core-model/${project.version}</bundle> <bundle>mvn:io.twim/twim-jaas/${project.version}</bundle> </feature>
如何在 features.xml 中执行此操作?
最佳答案
wrap protocol可用于从 jar 即时构建 osgi 包。您可能可以使用它向现有包添加一些指令,但我从未以这种方式使用过它。尝试这样的事情:
<bundle>wrap:mvn:org.apache.shiro/shiro-core/1.3.0$DynamicImport-Package=io.twim.models</bundle>
关于osgi - Karaf 4.1 - 如何在第三方 osgi jar 包中添加 DynamicImport-Package 标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39071269/