java - 使用 OWB 在 TomEE 上部署 Wicket CDI

标签 java wicket cdi apache-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)
…

一直在网上找资料,好像什么都没有。我的类路径上有 seam-conversation-spi 和 seam-conversation-owb jar,所以这不是依赖性问题(有一些,但克服了它们)。

我从其他人那里了解到,在其他应用程序服务器上使用 wicket-cdi 部署 EAR 非常简单直接。但是,我真的很喜欢 TomEE(整个“基于 TomCat”的概念),不想切换。

我在这里不知所措,有人知道发生了什么事吗?

编辑 1:

这是我的应用程序类初始化方法的内容:

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——这听起来几乎不可能,特别是因为根据 cdi 规范的要求,META-INF 下的 JAR 中有一个 beans.xml 和 MANIFEST.MF<

仍然不知所措,我们将不胜感激。

编辑 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

最佳答案

Wicket 期望 AutoConversion bean 注入(inject) ConversationPropagator。

查看org.apache.wicket.cdi.ConversationPropagator源码片段:

@Inject
Conversation conversation_;

@Inject
AutoConversation autoConversation;

解决方案:

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

  2. 禁用 ConversationPropagator

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

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

关于java - 使用 OWB 在 TomEE 上部署 Wicket CDI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23987588/

相关文章:

wicket - 将行添加到刷新 View 而不重新绘制整个刷新 View

java - Wicket PageParameters 干扰页面的模型对象

java - 如何在 WicketTester 中测试 AjaxFormChoiceComponentUpdatingBehavior

java - java se环境下应用程序如何 Weld 容器服务?

java - CDI TransactionPhase.BEFORE_COMPLETION 不适用于 WebSphere

java - 在 Linux 上执行 Java 程序时使用 chmod +x 后权限被拒绝

java - 如何使用 Docx4J 为 pdf 输出设置字体

java - C#相当于Java的FloatBuffer/ShortBuffer?

java - smslib 不发送短信为什么?

java - 使用 Seam、RichFaces 和 PopupPanel 传递参数