使用OWB在TomEE上部署Wicket CDI

时间:2014-06-02 05:00:12

标签: java wicket cdi tomee openwebbeans

尝试在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)
…

我一直在网上寻找信息,但似乎没有任何内容。我的classpath上有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:

以下是用于创建我部署的EAR文件的application.xml文件的代码:

<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目录中,这看起来很奇怪
  • OWB没有认识到wicket-cdi JAR是bean JAR - 听起来几乎不可能,特别是因为在META-INF下的JAR中有一个beans.xml和MANIFEST.MF作为cdi spec的请求

仍然不知所措,任何帮助都会受到赞赏。

编辑4:

以下是我在WAR文件中的JAR列表,如果它有帮助:

  • 缝会话-SPI-3.0.0.Final.jar
  • 速度-1.7-dep.jar
  • 速度-1.7.jar
  • 便门-AUTH-角色的6.15.0.jar
  • 检票豆验证-6.15.0.jar
  • 检票自举-0.17.jar
  • 便门-CDI-6.15.0.jar
  • 检票芯6.15.0.jar
  • 检票日期时间-6.15.0.jar
  • 检票devutils-6.15.0.jar
  • 检票的扩展-6.15.0.jar
  • 检票吉斯-6.15.0.jar
  • 检票IOC-6.15.0.jar
  • 检票JMX-6.15.0.jar
  • 检票请求6.15.0.jar
  • 检票弹簧6.15.0.jar
  • 检票util的-6.15.0.jar
  • 便门网速度6.15.0.jar

1 个答案:

答案 0 :(得分:1)

Wicket希望AutoConversion bean能够注入ConversationPropagator。

请参阅org.apache.wicket.cdi.ConversationPropagator源代码的片段:

@Inject
Conversation conversation_;

@Inject
AutoConversation autoConversation;

解决方案:

  1. 将org.apache.wicket.cdi.AutoConversation类型的bean添加到bean定义中。

  2. 禁用ConversationPropagator

  3. 查看修改后的代码,如何禁用ConversationPropagator

    new CdiConfiguration(manager).setPropagation(ConversationPropagation.NONE).configure(this);