找不到限定符的Api类型[org.atmosphere.cpr.AtmosphereResource]

时间:2015-07-22 10:36:56

标签: java dependency-injection websocket atmosphere tomee-7

我正在使用Atmosphere做一个websocket应用程序,我正在尝试在我自己的环境中重现chat sample。我正在使用TomEE 7 plus服务器,示例工作正常。

我将maven依赖添加到了大气运行时和servlet 3.0,就像它在示例中所做的那样

    <!-- PubSub dependencies -->
    <dependency>
        <groupId>org.atmosphere</groupId>
        <artifactId>atmosphere-runtime</artifactId>
        <version>2.3.3</version>
    </dependency>

    <!-- Spécification servlet 3.0 nécessaire pour atmosphere -->
    <dependency>
        <groupId>org.apache.geronimo.specs</groupId>
        <artifactId>geronimo-servlet_3.0_spec</artifactId>
        <version>1.0</version>
    </dependency>

然后我将我的servlet放在web.xml文件中

<!-- Atmosphere Servlet -->
<servlet>
    <description>AtmosphereServlet</description>
    <servlet-name>AtmosphereServlet</servlet-name>
    <servlet-class>org.atmosphere.cpr.AtmosphereServlet</servlet-class>
    <!-- limit classpath scanning to speed up starting, not mandatory -->
    <init-param>
        <param-name>org.atmosphere.cpr.packages</param-name>
        <param-value>my.package.web.websocket</param-value>
    </init-param>
    <init-param>
        <param-name>org.atmosphere.interceptor.HeartbeatInterceptor.clientHeartbeatFrequencyInSeconds</param-name>
        <param-value>10</param-value>
    </init-param>
    <load-on-startup>0</load-on-startup>
    <async-supported>true</async-supported>
</servlet>
<servlet-mapping>
    <servlet-name>AtmosphereServlet</servlet-name>
    <url-pattern>/chat/*</url-pattern>
</servlet-mapping>

但是当我尝试在AtmosphereResource课程中注入Chat时,我收到了这个错误:

 GRAVE: CDI Beans module deployment failed
org.apache.webbeans.exception.inject.DeploymentException: javax.enterprise.inject.UnsatisfiedResolutionException: Api type [org.atmosphere.cpr.AtmosphereResource] is not found with the qualifiers 
Qualifiers: [@javax.enterprise.inject.Default()]
for injection into Field Injection Point, field name :  resource, Bean Owner : [Chat, Name:null, WebBeans Type:MANAGED, API Types:[my.package.web.websocket.Chat,java.lang.Object], Qualifiers:[javax.enterprise.inject.Any,javax.enterprise.inject.Default]]
    at org.apache.webbeans.config.BeansDeployer.deploy(BeansDeployer.java:215)
    at org.apache.openejb.cdi.OpenEJBLifecycle.startApplication(OpenEJBLifecycle.java:192)
    at org.apache.openejb.cdi.ThreadSingletonServiceImpl.initialize(ThreadSingletonServiceImpl.java:160)
    at org.apache.openejb.cdi.CdiBuilder.build(CdiBuilder.java:41)
    at org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:846)
    at org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:652)
    at org.apache.tomee.catalina.TomcatWebAppBuilder.startInternal(TomcatWebAppBuilder.java:1261)
    at org.apache.tomee.catalina.TomcatWebAppBuilder.configureStart(TomcatWebAppBuilder.java:1100)
    at org.apache.tomee.catalina.GlobalListenerSupport.lifecycleEvent(GlobalListenerSupport.java:130)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
    at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5416)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1575)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1565)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
Caused by: javax.enterprise.inject.UnsatisfiedResolutionException: Api type [org.atmosphere.cpr.AtmosphereResource] is not found with the qualifiers 
Qualifiers: [@javax.enterprise.inject.Default()]
for injection into Field Injection Point, field name :  resource, Bean Owner : [Chat, Name:null, WebBeans Type:MANAGED, API Types:[my.package.wen.websocket.Chat,java.lang.Object], Qualifiers:[javax.enterprise.inject.Any,javax.enterprise.inject.Default]]
    at org.apache.webbeans.util.InjectionExceptionUtil.throwUnsatisfiedResolutionException(InjectionExceptionUtil.java:60)
    at org.apache.webbeans.container.InjectionResolver.checkInjectionPoint(InjectionResolver.java:195)
    at org.apache.webbeans.container.BeanManagerImpl.validate(BeanManagerImpl.java:960)
    at org.apache.webbeans.config.BeansDeployer.validate(BeansDeployer.java:491)
    at org.apache.webbeans.config.BeansDeployer.validateInjectionPoints(BeansDeployer.java:422)
    at org.apache.webbeans.config.BeansDeployer.deploy(BeansDeployer.java:202)
    ... 18 more

哈和另一个有用的信息我不使用ObjectMapperInjectable.java所以我没有META-INF/Services/org.atmosphere.inject.Injectable文件(它在样本中使用)。 我的项目中有一个beans.xml,我可以在Chat.java

注入我的业务服务

我知道它没有找到Default限定符,但我不明白为什么。

我是否需要为AtmospherResource界面指定限定符(我不这么认为)?是不是有默认实现?

有人解决了同样的问题吗?

由于

修改

经过一些测试后,似乎来自beans.xml。如果我在META-INF /下的原始示例项目中添加它,我得到了同样的错误。

0 个答案:

没有答案