HelloWorld EJB依赖注入

时间:2012-10-20 21:44:50

标签: maven glassfish dependencies ejb code-injection

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

对于源代码,IDE和app服务器,我喜欢使用尽可能简单的替代方案。我尝试使用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);
}

显示webapp但变量服务始终为null。让这些代码工作并不是那么重要,但我可以让任何DI工作。在遥远的未来,我也喜欢坚持,但我想手动完成,而不是从一个巨大的工作应用程序。我的目标是了解我在做什么...任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:2)

问题是您尝试注入的类是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。

答案 1 :(得分:1)

如果要将LinkService EJB的引用注入LinkResource资源,那么LinkResource必须是托管组件,换句话说就是无状态会话bean。如果在LinkResource类中添加@Stateless注释,那么你应该没问题。

答案 2 :(得分:1)

需要为每个项目启用上下文和依赖注入。在netbeans中,右键单击您的项目,然后选择New>其他

在类别下选择上下文和依赖注入,然后在文件类型下选择beans.xml。

然后单击“下一步”,然后单击“完成”。

或者您可以在Web Pages / WEB-INF文件夹中手动创建beans.xml文件。内容应该是:

<?xml version="1.0" encoding="UTF-8"?>
<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>