【问题标题】:EJB Stateless session bean is nullEJB 无状态会话 bean 为空
【发布时间】:2015-05-21 20:04:09
【问题描述】:

我正在尝试从本地服务访问 EJB 无状态会话 bean。 但是当我调用位于 bean 上的方法时,我得到一个 NPE,因为无状态 bean 为空。

代码如下:

无状态的豆子:

@Startup
@Stateless(name = "LoginBean")
@LocalBean
public class LoginBean {


    public List<Long> getItemsForClient(String clientId, Long itemId) {
        System.out.println("clientID: " + clientId);
        System.out.println("itemID: " + itemId);

        List<Long> ret = new ArrayList<Long>();
        ret.add((long) 123456);
        ret.add((long) 123457);
        ret.add((long) 123458);
        ret.add((long) 123459);
        return ret;

    }

    }

服务:

@Stateless
@Path("/ctofservice")
public class CtoFService {

    @EJB
    LoginBean loginBean;

    public CtoFService() {

    }

    @GET
    @Produces("text/plain")
    @Path("test")
    public String convertCtoF() {

        Long l = (long) 123456;
        List<Long> servicesForClient = loginBean.getItemsForClient("cliID", l);
        return itemsForClient.toString();


    }

还有 ApplicationConfig:

@ApplicationPath("/")
public class ApplicationConfig extends Application {

    @SuppressWarnings("unchecked")
    @Override
    public Set<Class<?>> getClasses() {

        Set<Class<?>> resources = new java.util.HashSet<Class<?>>();
        addRestResourceClasses(resources);
        return resources;
    }

    private void addRestResourceClasses(Set<Class<?>> resources) {
        resources.add(CtoFService.class);    
    }
}

我已经尝试了一段时间并寻找可能的解决方案,但没有任何结果。

我正在使用 JBoss AS 7.1 和它附带的 RESTEasy。

什么时候应该实例化 bean?

谢谢。

【问题讨论】:

  • 你需要LoginBean 作为EJB,为什么不把它作为一个JAX_RS 服务。您仍然可以使用 CDI。
  • 是的,我需要这样,因为当我实现实例化它时,我需要添加更多功能。
  • 对不起,我的意思是 CtoFService。您已将其标记为@Stateless
  • 真的,我不知道,我是新手,我把@Stateless 放在那里,因为我在某些网页中看到它可能是解决我的问题的方法。你建议怎么做?
  • 我从 StoFServcie 中删除 @Stateless 并从 addRestResourceClasses() 中删除 LoginBean

标签: java jakarta-ee jboss ejb


【解决方案1】:

我通过添加 beans.xml 文件解决了这个问题,在我创建项目的那一刻它不存在,我在几个小时后发现了该文件以寻找解决方案。 p>

所以我把文件放在WEB-INF目录下

文件包含:

<?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>

问题解决了,我可以通过webService访问bean了。

感谢您的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-12
    • 1970-01-01
    • 2017-08-29
    • 2012-04-04
    • 2013-04-30
    相关资源
    最近更新 更多