Можно ли активировать сервлеты doGet () из EJB - PullRequest
0 голосов
/ 15 ноября 2011

У меня есть уникальный сценарий, в котором я использую сервлет для динамического вывода в браузер с вызовами в базу данных.Тип контента - RSS-XML, поэтому он может обновлять XML-канал RSS из базы данных.Это работает нормально.Однако у меня также есть EJB, доступный как веб-сервис @WebService.Так что все его публичные методы доступны через транзакции SOAP.Я также успешно реализовал это.Так как я обновляю базу данных через Java-WS / SOAP, моя проблема в том, что я не обновляю одновременно doGet () сервлета, что означает, что он не обновляет вызов сервлета - даже если база данных успешно обновлена.

Как заставить вызов doGet () моего сервлета из EJB?Единственный способ обновить эти теги HTML / XML - это вызвать сервлет и, следовательно, метод doGet ().

Спасибо.

РЕДАКТИРОВАТЬ для ясности: мой сервлет в настоящее время доступен со страницы jsp в виде URL.На него ссылаются как на ссылку, по которой люди могут щелкнуть.Он обновляется нормально, когда люди нажимают на него, но так как это канал RSS, я также хотел бы иметь возможность вызывать / обновлять канал, когда я добавляю данные в базу данных.Пока что я могу добавлять данные, но канал не обновляется, потому что я не знаю, как вызвать doGet () в моей бизнес-логике.

Вот как выглядит соответствующая часть моего сервлета:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws     ServletException, IOException {

    Statuses = rssbean.arrayUpdates();

    XMLOutputFactory factory = XMLOutputFactory.newInstance();
    try {
        XMLStreamWriter writer = factory.createXMLStreamWriter(response.getOutputStream());
        response.setContentType("application/rss+xml; charset=UTF-8");


        writer.writeStartDocument();
        writer.writeStartElement("rss");
        writer.writeAttribute("version", "2.0");
        writer.writeStartElement("channel");
for(int i = 0; i < (Statuses.length); i++){
                writer.writeStartElement("item");
                    writer.writeStartElement("title");
                        writer.writeCharacters(Statuses[i]);
                    writer.writeEndElement();
                    writer.writeStartElement("link");
                        writer.writeCharacters("http://www.link.com");
                    writer.writeEndElement();
                    writer.writeStartElement("description");

                    writer.writeEndElement();
                writer.writeEndElement();

Как вы можете видеть, я создаю этот файл .rss на лету через doGet ().Это прекрасно работает, когда вы ссылаетесь на него, но я не уверен, как выполнить эти вызовы писателя из моего EJB (не из браузера).

1 Ответ

0 голосов
/ 15 ноября 2011

Ваш rssBean.arrayUpdates () должен запрашивать базу данных и каждый раз возвращать результат. Если он возвращает некоторые ранее существующие данные, то это не сработает.

Как только вы щелкаете ссылку и получаете доступ к сервлету, сервлет извлекает информацию из базы данных и передает результат клиенту.

Когда вы обновляете свои данные через веб-сервис, нет необходимости вызывать сервлет, чтобы убедиться, что он обновляется, как вы, вероятно, ожидаете.

HTTP - это запрос / ответ. После того как клиент получил ответ, ему необходимо обновить страницу или щелкнуть ссылку, чтобы обновить содержимое.

см. Также заголовки HTTP для управления кэшем http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

...