maven - HelloWorld EJB 依赖注入(inject)

标签 maven glassfish dependencies ejb code-injection

我无法让 @EJB 依赖注入(inject)工作。我使用 Linux 和 Maven 作为构建工具。

对于源代码、IDE 和应用程序服务器,我喜欢使用使其尽可能简单的替代方案。我尝试了 Glassfish 3.1.2.2、NetBeans 7.2,但没有成功。我没有在 Glassfish 中进行任何配置。

这里是一些示例源代码,但是任何有效的代码都会有所帮助。此外,任何有关如何调试此类问题的想法都将受到赞赏。似乎每个初学者都拥有它们......

LinkResource.java

package se.xyz.webapp;
import javax.ejb.EJB;
import javax.ws.rs.DefaultValue;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import se.xyz.server.LinkService;

@Path("links/{username}")
public class LinkResource {
    @EJB
    LinkService service;
    @GET
    @Produces("text/plain")
    public String link(@PathParam("username") @DefaultValue("NoName") String name ) {
       return service.store(name); // Always nullpointer exception here!
   }     
}

LinkServiceImpl.java

package se.xyz.server;

import javax.ejb.Stateless;

@Stateless
public class LinkServiceImpl implements LinkService {
    public String store(String name)
    {
        return "From eJB";
    }
}

LinkService.java

package se.xyz.server;

import javax.ejb.Local;

@Local
public interface LinkService {
    public String store(String name);
}

Web 应用程序正在显示,但变量服务始终为空。让这段代码正常工作并不重要,重要的是我能让任何 DI 正常工作。在遥远的 future ,我也想坚持下去,但是我想手动完成,而不是从原型(prototype)中获得一个巨大的工作应用程序。我的目标是了解我在做什么...任何帮助将不胜感激。

最佳答案

问题在于您尝试注入(inject)的类是 JAX-RS 资源。

JAX-RS 资源在 Java EE 中有点疏忽,它涉及托管 bean 类型的对齐。当 Java EE 6 创建时,恰巧 JAX-RS(和 JSF 2)完成得较早,而 CDI 和总体的“托管 bean”概念完成得较晚。

JAX-RS 容器管理的 bean 类型,但不幸的是不是官方的“托管 bean”类型,因此它不直接支持 @EJB。

您可以将其设为 CDI 托管 Bean,然后使用 @Inject 而不是 @EJB。

关于maven - HelloWorld EJB 依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12992991/

相关文章:

java - JSON 中的 WebApplicationException 使用

c# - 多个项目依赖于同一二进制引用的解决方案

maven - 如何将特定的Maven配置文件分配给intellij运行配置?

jsp - 通过 javamail 发送电子邮件时出现 NullPointer 异常

java - Maven、Lombok 和 Eclipse - 有意义的集成模式

json - GlassFish 4.0/Jersey 2.0 - JsonStructureBodyReader 的 NoClassDefFoundError

java - 简单的基于REST的程序中的HTTP 500 Internal Server Error。从服务器接收/发送响应时,在GET和POST中感到困惑

java - 如何处理java.lang.OutOfMemoryError : GC overhead limit exceeded gracefully?

android - Assemble gradle flavor 编译来自其他 flavor 的依赖项

java - 无法使用gradle的依赖