jboss EJB无状态会话Bean为空

lymgl2op  于 2022-12-04  发布在  其他
关注(0)|答案(1)|浏览(221)

我试图从本地服务访问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();

    }

应用程序配置:

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

  • 谢谢-谢谢
kmbjn2e3

kmbjn2e31#

我通过添加beans.xml文件解决了这个问题,它在我创建项目的那一刻并不存在,我偶然发现了这个文件,在几个小时后搜索解决方案.
所以我把文件放在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。
谢谢你的帮忙。

相关问题