当前位置: 首页 > 知识库问答 >
问题:

CDI不工作

轩辕乐邦
2023-03-14

它有一个servlet和一个JAX-RS资源POJO,两者都运行良好。接下来,我在与servlet和JAX-RS POJO相同的包中创建了一个类:

package com.example.test;

import java.util.logging.Logger;

import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.inject.Produces;

@ApplicationScoped
public class Bean {

  @Produces @ApplicationScoped
  public static Bean produce () {
    return new Bean();
  }

  public Bean () {
    Logger.getGlobal().info("Bean()");
  }

}
package com.example.test;

import javax.annotation.Resource;
import javax.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;

@Resource(name = "foo", type = Rest.class)
@Path("/rest")
public class Rest {

  @Inject Bean b;

  @GET
  @Produces("text/html")
  public String f () {
    return "<h1>rest</h1>";
  }
}

当我访问POJO的rest路径时,我在Glassfish日志中得到消息:

WARNING: StandardWrapperValve[com.younum.web.test.App]: Servlet.service() for servlet com.example.test.App threw exception
org.glassfish.hk2.api.UnsatisfiedDependencyException: There was no object available for injection at Injectee(requiredType=Bean,parent=Rest,qualifiers={}),position=-1,optional=false,self=false,unqualified=null,1573724652)
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.younum.web</groupId>
  <artifactId>test</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
</project>

共有1个答案

秦锐
2023-03-14

您需要将beans.xml文件放在META-INF文件夹中。默认情况下,部署项目时不启用或激活CDI。所以要激活它,我们需要beans.xml文件,它应该驻留在meta-inf文件夹下。

下面是beans.xml示例

<beans 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/beans_1_0.xsd">
</beans>
 类似资料:
  • 首先,我密集地谷歌了一下,根据http://jglue.org/cdi-unit-user-guide/在单元测试中生产注入的东西应该可以正常工作。 我的设置: 例外情况: 组织。jboss。焊接例外情况。DeploymentException:包含3个异常的异常列表: 异常0:org.jboss.weld.exceptions.部署异常: WELD-001408:带限定符的类型记录器的不满意依赖

  • 我对Java EE(依赖项注入)有点陌生,我不明白为什么@inject给我的是null,但是initialcontext.dolookup确实起作用。 这是我的豆子。它只是一把刀。EntityManager的包装器 --jar(PersonData-EJB模块-包含PersonManager) --war(PersonRest-web模块-包含PersonService)

  • 我正在尝试在我的应用程序中实现注销,因此我做了以下操作: 但是当我检查用户是否登录时,它说是: 我错过什么了吗?在使会话无效后,我是否应该获得一个新的AuthorizedUser实例(sessionScoped)? 编辑:如果有人需要,添加getHandler;)

  • 我的环境:weblogic 12c 使用jpa2.1补丁设置:SET PRE\u CLASSPATH=%MW\u HOME%\oracle\u common\modules\javax。持久性2.1。jar;%MW\U HOME%\wlserver\modules\com。神谕weblogic。jpa21support_1.0.0.0_2-1。罐子 我的ear/APP-INF/lib包含: 我的p

  • 我正在尝试建立一个简单的应用程序,以便在WildFly14上使用springboot 2.1.1和Java 11(因为Eclipse不支持WildFly15)。 部署失败,因为Wildfly在项目中找不到CDI BeanManager。我只是试图按照简单的(官方的)教程操作,所以我不明白为什么会出现错误。 这是代码: pom.xml application.java 这是StackTrace: 1

  • 我正在用JAX-RS制作一个Rest服务应用程序。这是学校的一些项目。对于这个项目,我需要使用以下技术: Maven JAX-RS CDI JPA-EJB JNDI Bean验证 所以现在我已经用一个假的DB(“CafeStub”)和一个使用JPA(“CafeDB”)的真实DB制作了我的域名“Cafes”。我的域名也稍微使用了CDI。(@Inject在CafeService类中…) 我不知道如何解