【发布时间】:2016-10-20 03:39:58
【问题描述】:
据我了解,每个 osgi 包都有自己的 cdi 容器。所以我有以下情况 - 我有两个捆绑包:A 和 B。捆绑包部署在 glassfish4 中。在捆绑包 A 中,我有 cdi bean。在包 B 中,我没有 beans.xml -> 没有为包 B 创建 cdi 容器。
在捆绑包 B 中,我引用了捆绑包 A(捆绑包 A)。我如何获得对 bundle A cdi 容器的 bundle B 引用。我当前的解决方案(在 B 包中):
BeanManager bm = CDI.current().getBeanManager();
抛出异常:
StandardWrapperValve[default]: Servlet.service() for servlet default threw exception
org.jboss.weld.exceptions.IllegalStateException: WELD-001328: Unable to identify the correct BeanManager. The calling class com.temp.MyClass is not placed in bean archive
at org.jboss.weld.SimpleCDI.unsatisfiedBeanManager(SimpleCDI.java:89)
at org.glassfish.weld.GlassFishWeldProvider$GlassFishEnhancedWeld.unsatisfiedBeanManager(GlassFishWeldProvider.java:89)
at org.jboss.weld.SimpleCDI$ClassNameToBeanManager.findBeanManager(SimpleCDI.java:67)
at org.jboss.weld.SimpleCDI$ClassNameToBeanManager.load(SimpleCDI.java:47)
at org.jboss.weld.SimpleCDI$ClassNameToBeanManager.load(SimpleCDI.java:40)
at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3589)
at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2374)
at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2337)
at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2252)
at com.google.common.cache.LocalCache.get(LocalCache.java:3990)
at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3994)
at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4878)
at com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:4884)
at org.jboss.weld.SimpleCDI.getBeanManager(SimpleCDI.java:105)
at org.jboss.weld.SimpleCDI.getBeanManager(SimpleCDI.java:38)
【问题讨论】:
-
第一句话令人困惑:“据我所知,每个 osgi 包都有自己的 cdi 容器”。我写过的包都没有自己的 CDI 容器(我写了很多......)。
-
对于它的价值——我对 CDI 一无所知,也不想这样做——听起来你想做的事情应该用 OSGi 服务来解决。
-
@Neil Bartlett 请仔细阅读。问题是关于 javaee 和 glassfish。
-
是什么让你认为我没有仔细阅读?这句话仍然是绝对错误的。也许您的意思是“每个 OSGi 部署到 Glassfish 都有自己的 CDI 容器”。我仍然不知道这是否属实,但它可能更接近真相。
标签: java jakarta-ee glassfish osgi cdi