Я уверен, что это ошибка новичка ...
Итак, у меня есть приложение Java EE 6 с сущностями, фасадами (реализующими уровень сохраняемости) и сессионными компонентами без сохранения состояния (EJB3) с удаленными интерфейсами (обеспечивающими доступ к сущностям через фасады).
Это нормально работает. Через SLSB я могу извлекать объекты и управлять ими.
Теперь я пытаюсь сделать это из веб-приложения (развернутого в том же Glassfish, определения сущности + интерфейса из приложения Java EE, импортированные как отдельная банка). У меня есть сервлет, который получает экземпляр внедренного SLSB. Я получаю его для получения объекта, и происходит следующее (я вижу это в журналах):
- создается экземпляр удаленного SLSB, его метод называется
- SLSB создает экземпляр фасада, вызывает метод get
- фасад извлекает экземпляр сущности из БД, возвращает его
- SLSB returns the instance of the entity to the caller
- (all is good until here)
- вызывающий сервлет получает .. пустой экземпляр объекта !!
Что не так? Это должно сработать, правда?
MyServlet:
public class MyServlet extends HttpServlet {
@EJB
private CampaignControllerRemote campaignController; // remote SLSB
protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/plain");
PrintWriter out = response.getWriter();
try {
Campaign c = campaignController.getCampaign(5L); // id of an existing campaign
out.println("Got "+ c.getSomeString()); // is null !!
} finally {
out.close();
}
}
...
}
Пожалуйста, дайте мне знать, если вы хотите увидеть другой код, и я обновлю сообщение.
cсуществует, не равно нулю.c.getSomeString()возвращает ноль. Когда SLSB извлекает кампанию "5L",someStringзаполняется правильно. - person Hank   schedule 21.04.2010