【发布时间】: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