Моя цель высокого уровня - использовать код JPA, сгенерированный NetBeans, с помощью мастера «RESTful web services from the database» в моих сервлетах.Как я могу вставить сессионный компонент без состояния в сервлет?
Чтобы быть более точным, я хотел бы получить доступ к фасаду непосредственно из сервлета, чтобы не загружать некоторые данные с помощью JavaScript на стороне клиента.
Соответствующая часть моего фасада выглядит следующим образом:
@Stateless
@Path("wgm.rest.balanceview")
public class BalanceViewFacadeREST extends AbstractFacade<BalanceView> {
@PersistenceContext(unitName = "WGManagerPU")
private EntityManager em;
@GET
@Override
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public List<BalanceView> findAll() {
return super.findAll();
}
}
Теперь я попытался следующее:
@WebServlet(name = "BalanceServlet", urlPatterns = "/balance/*")
public class BalanceServlet extends HttpServlet {
@Inject
private BalanceViewFacadeREST balanceFacade;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
List<BalanceView> balances = balanceFacade.findAll();
// ...
}
}
Однако при развертывании GlassFish, я получаю следующее исключение:
java.lang.RuntimeException: Unable to load the EJB module. DeploymentContext does not contain any EJB. Check the archive to ensure correct packaging for /home/severin/Projects/WGManager/build/web.
If you use EJB component annotations to define the EJB, and an ejb or web deployment descriptor is also used, please make sure that the deployment descriptor references a Java EE 5 or higher version schema, and that the metadata-complete attribute is not set to true, so the component annotations can be processed as expected
Это звучит так, как если бы инжектор не мог найти BalanceViewFacadeREST. Что мне не хватает?
Спасибо! К сожалению, я действительно новичок в EJB, поэтому я не знаю, зачем нам @LocalBean, но я думаю, мне придется погрузиться глубже в эту тему. В любом случае, это разрешило вышеупомянутую проблему, но теперь я получаю серьезное сообщение журнала: «Тяжелый: класс [Lwgm/rest/service/BalanceViewFacadeREST;] не найден. Ошибка при загрузке [class wgm.servlets.BalanceServlet]» и I получите 404 для всех моих путей (также те, которые не связаны с/балансом). Может быть, это связано или это еще одна проблема? Btw, im используя версию Glassfish 4.1.1. – Severin
Я больше не получаю серьезное сообщение журнала, так как я полностью очистил и перестроил приложение и удалил каталоги «сгенерированный» и «osgi-chache» в Glassfish (просто чтобы быть уверенным). Кажется, проблема связана с развертыванием NetBeans в Glassfish. Когда я вручную копирую архив войны в папку autofploy Glassfish, он отлично работает. Но я думаю, что я открою новый вопрос по этому вопросу. – Severin