Ожидает ответа.Интерфейс-EJB не инжектирован в no-interface-EJB
У меня есть контроллер JAX-RS (Jersey 2.21 на WildFly 9.0).
@Named
@Path("v1/populateList/")
public class PopulateDataController {
@EJB
ListItemService listItemService;
@GET
@Path("auto")
@Produces(MediaType.TEXT_PLAIN)
public String populateList(){
listItemService.populateList();
return "done";
}
}
Ниже ListItemService
нет-интерфейса EJB не будет успешно введен в контроллере выше JAX-RS.
@Stateless
public class ListItemService {
@EJB
ListItemDao listItemDao;
public void populateList(){
listItemDao.persist();
}
}
Тем не менее, ниже ListItemDaoImpl
интерфейс-EJB не в свою очередь инъецируют в выше не-интерфейса EJB.
@Stateless
public class ListItemDaoImpl implements ListItemDao{
@PersistenceContext(unitName = "pu")
private EntityManager em;
public void persist(){
ListItem listItem = new ListItem();
listItem.setLevel(1);
listItem.setName("item1");
em.persist(listItem);
}
}
listItemDao
остается в populateList()
методом ListItemService
null
, вызывая NullPointerException
.
Как это вызвано и как я могу его решить?
--- Редактирование и обновление ---
Я попытался сделать боб Singleton для запуска при запуске (чтобы проверить мое приложение логики). Он отлично работает без JAX RS. Поэтому ясно, что проблема связана не с EJB, а с JAX RS. (поправьте меня, если ошибаюсь)
@Singleton
@Startup
public class TestController {
@EJB
ListItemService listItemService;
@PostConstruct
void test(){
System.out.println("starting..........");
listItemService.populateList();
System.out.println("ending..........");
}
}
Вы комментировали свой интерфейс ListItemDao с помощью функции @Local? – Szarpul
@BalusC Спасибо за исправление моего вопроса – Mab
@Szarpul да. '@Local public interface ListItemDao { void persist(); } ' – Mab