【发布时间】:2014-06-02 05:00:11
【问题描述】:
我在尝试在 TomEE 上进行部署(使用 OWB)时遇到了问题。 我收到以下异常:
javax.enterprise.inject.UnsatisfiedResolutionException: Api type [org.apache.wicket.cdi.AutoConversation] is not found with the qualifiers
Qualifiers: [@javax.enterprise.inject.Default()]
for injection into Field Injection Point, field name : autoConversation, Bean Owner : [null]
at org.apache.webbeans.util.InjectionExceptionUtil.throwUnsatisfiedResolutionException(InjectionExceptionUtil.java:60)
at org.apache.webbeans.container.InjectionResolver.getInjectionPointBean(InjectionResolver.java:250)
at org.apache.webbeans.inject.AbstractInjectable.inject(AbstractInjectable.java:76)
at org.apache.webbeans.inject.InjectableField.doInjection(InjectableField.java:65)
at org.apache.webbeans.portable.InjectionTargetImpl.injectFields(InjectionTargetImpl.java:372)
at org.apache.webbeans.portable.InjectionTargetImpl.inject(InjectionTargetImpl.java:358)
at org.apache.webbeans.portable.InjectionTargetImpl.inject(InjectionTargetImpl.java:342)
at org.apache.wicket.cdi.NonContextual.postConstruct(NonContextual.java:129)
at org.apache.wicket.cdi.NonContextualManager.postConstruct(NonContextualManager.java:65)
at org.apache.wicket.cdi.ConversationPropagator.(ConversationPropagator.java:122)
at org.apache.wicket.cdi.CdiConfiguration.configure(CdiConfiguration.java:188)
…
我一直在网上找资料,但上面好像什么都没有。我的类路径上有 seam-conversation-spi 和 seam-conversation-owb jar,所以这不是依赖问题(有一些问题,但克服了它们)。
我从其他人那里了解到,在其他应用程序服务器上部署带有 wicket-cdi 的 EAR 非常简单直接。不过,我真的很喜欢 TomEE(整个“基于 TomCat”的概念),并且不想切换。
我在这里不知所措,有人知道发生了什么吗?
编辑 1:
这是我的应用程序类init方法的内容:
public void init() {
super.init();
BeanManager manager = (BeanManager)new InitialContext().lookup(“java:comp/BeanManager”);
new CdiConfiguration(manager).configure(this);
}
课堂上真的没有什么了。
编辑 2:
这是我的 application.xml 文件的代码,用于创建我部署的 EAR 文件:
<application xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_6.xsd"
version="6">
<initialize-in-order>true</initialize-in-order>
<module>
<ejb>integration.jar</ejb>
</module>
<module>
<ejb>application.jar</ejb>
</module>
<module>
<web>
<web-uri>presentation.war</web-uri>
<context-root>app</context-root>
</web>
</module>
</application>
编辑 3:
从我在 wicket-cdi 和 openwebbeans 的代码中读到的内容,我认为它必须是以下场景之一:
- OWB 没有找到 AutoConversation 类(即 wicket-cdi JAR) - 我使用 Ant 的标准任务将类捆绑在 lib 目录中的 WAR 中,所以这看起来很奇怪
- OWB 无法识别 wicket-cdi JAR 是一个 beans JAR - 这听起来几乎是不可能的,特别是因为在 META-INF 下的 JAR 中有一个 beans.xml 和 MANIFEST.MF 作为 cdi 规范的请求李>
仍然不知所措,任何帮助将不胜感激。
编辑 4:
这是我在 WAR 文件中的 JAR 列表,以防万一:
- seam-conversation-spi-3.0.0.Final.jar
- velocity-1.7-dep.jar
- velocity-1.7.jar
- wicket-auth-roles-6.15.0.jar
- wicket-bean-validation-6.15.0.jar
- wicket-bootstrap-0.17.jar
- wicket-cdi-6.15.0.jar
- wicket-core-6.15.0.jar
- wicket-datetime-6.15.0.jar
- wicket-devutils-6.15.0.jar
- wicket-extensions-6.15.0.jar
- wicket-guice-6.15.0.jar
- wicket-ioc-6.15.0.jar
- wicket-jmx-6.15.0.jar
- wicket-request-6.15.0.jar
- wicket-spring-6.15.0.jar
- wicket-util-6.15.0.jar
- wicket-velocity-6.15.0.jar
【问题讨论】:
-
你能发布一些代码吗?
-
课堂上真的什么都没有,我刚刚开始并尝试了Ygor的示例:integrating-cdi-into-wicket。我在问题中添加了我的应用程序类的
init()方法的内容(它扩展了WebApplication),尽管它几乎与帖子中的完全一样。 -
尝试从类路径中删除 cdi jar。您应该使用 TomEE cdi OWB 依赖项。
-
我一开始没有 JAR 文件,但后来我得到了一大堆 ClassDefNotFound 异常。添加 JAR 可以解决这些问题。
-
您是使用 maven 还是手动添加罐子?
标签: java wicket cdi apache-tomee openwebbeans