是否可以从EJB激活servlet doGet()

时间:2011-11-14 23:03:49

标签: java-ee servlets get ejb

我有一个独特的场景,我使用servlet通过调用数据库动态输出到浏览器。内容类型是RSS-XML,因此它可以从数据库更新RSS提要xml。这工作正常。但是,我还有一个可以作为Web服务@WebService访问的EJB。因此,所有公共方法都可以通过SOAP事务访问。我也成功实现了这一点。因此我通过Java-WS / SOAP更新数据库,我的问题是我没有同时更新servlet的doGet(),这意味着它不会更新Servlet调用 - 即使数据库已成功更新。

如何从EJB强制对我的servlet执行doGet()调用?这些HTML / XML标记更新的唯一方法是调用Servlet,因此调用doGet()方法。

谢谢。

为清晰起见编辑:我的Servlet当前是作为URL从jsp页面访问的。它被引用为人们可以点击的链接。一旦人们点击它就会更新,但由于它是RSS提要,我还希望能够在向数据库添加数据时调用/更新提要。到目前为止,我可以添加数据但是Feed没有更新,因为我不知道如何在业务逻辑中调用doGet()。

这就是我的servlet的相关部分:

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();

正如您所见,我正在通过doGet()动态创建此.rss文件。当你链接到它时,这工作正常,但我不知道如何从我的EJB(而不是浏览器)运行这些编写器调用。

1 个答案:

答案 0 :(得分:0)

您的rssBean.arrayUpdates()需要查询数据库并每次都返回结果。如果它返回一些预先存在的数据,那就不行了。

一旦点击链接并访问servlet,servlet就会从数据库中提取信息并将结果提供给客户端。

当您通过Web服务更新数据时,无需调用servlet以确保它已更新,正如您所希望的那样。

HTTP是请求/响应。一旦给客户端做出响应,他们就必须刷新页面或点击链接刷新内容。

另请参阅缓存控制的http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

HTTP标头