我正在尝试从本地服务访问EJB Stateless会话bean。 但是当我调用位于bean上的方法时,我得到一个NPE,因为无状态bean是null。
以下是代码:
无聊的豆子:
@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?
感谢。
答案 0 :(得分:2)
我通过添加 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。
感谢你们的帮助。