使用Servlet与持久性Java应用程序对话

用户名

请参阅下面的更新

我很困惑,并尝试在论坛中搜索可能的解决方案。我确定那里有解决方案,但也许我现在还不知道正确的术语。

所以这是我的问题:我有一个Java应用程序,它执行非常复杂的数值计算,并根据环境中的内核数等很好地进行扩展。但是,我现在正尝试将此计算公开给Internet接口。

第一步:我只是尝试将其放在servlet中,但是意识到这在解决方案上是个头绪,特别是考虑到可以将多个servlet称为产生多个实例。我只希望此计算的一个实例在后台运行,因为多个用户将只使用同一数据集。

我想要的是:1.用户向“开始”此计算的servlet发出请求。此计算需要几分钟才能运行。2.返回“开始”请求,以便现在可以使用ajax查询进度。3.如果计算已经在运行,并且另一个用户尝试开始计算,则不会。

我之前的搜索结果是这样的,我试图模仿它的设计:java中的请求触发的进程状态

谢谢!

更新:好的,因此我能够找到一个简单示例,该示例具有我想要的95%的示例:AJAX(原型/ java)在执行过程中获取部分状态更新

package main;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Main extends HttpServlet {


public void doPost(HttpServletRequest request, HttpServletResponse response) 
throws ServletException, IOException {
    System.out.println("Found post request!");
    processPostRequest(request, response);

}

/**
* Handles http get requests by mapping them to processRequest()
*/
public void doGet(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException {

    System.out.println("Found get request!");
    processPostRequest(request, response);
}

public void processPostRequest(HttpServletRequest request, HttpServletResponse response) 
throws ServletException, IOException {
    LongProcess longProcess = null;
    if(request.getSession().getAttribute("longProcess") != null) {
        longProcess = (LongProcess) request.getSession().getAttribute("longProcess");
        System.out.println("Found longProcess object in JVM!");

        response.getWriter().write(String.valueOf(longProcess.getProgress()) + "%");
    }
    else {
        longProcess = new LongProcess();
        //longProcess.setDaemon(true);
        longProcess.start();
        request.getSession().setAttribute("longProcess", longProcess);
        response.getWriter().write("The long process has started!");
    }   
}
}
class LongProcess extends Thread {

    private int progress;
     public void run() {
        while (progress < 100) {
            try { sleep(1000); } catch (InterruptedException ignore) {}
            progress++;
        }
    }

    public int getProgress() {
        return progress;
    }
}

我现在的问题是:我正在请求的上下文中存储单独的线程对象“ longProcess”。虽然这可以定期查询流程的状态,例如(我将得到1%.... 5%.... 9%....一直到100%),但是当我开始请求时从一个浏览器,然后从另一个浏览器发出请求,我得到两个单独的实例在运行。我认为这是由于将其存储在请求的上下文中。

有没有一种方法可以将线程对象存储在JVM中,从而使来自各地的请求都可以访问同一对象?我知道我将需要同步等...但是我希望能够从不同的请求上下文中看到相同的对象。

我尝试查看System.setProperty(),但这似乎仅适用于字符串。是否有等效于:request.getSession()。setAttribute(“ longProcess”,longProcess); 而是将其存储在JVM中以供所有请求访问?

尼伯(JB Nizet)

您可以简单地将其存储在servlet本身的字段中,因为相同的servlet实例用于处理所有请求。

如果希望几个不同的Servlet都可以使用它,则将其存储为ServletContext的属性,该属性也称为“应用程序范围”。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

NEDB在电子应用程序中的持久性

来自分类Dev

HAProxy + Websockets +应用程序持久性

来自分类Dev

如何使用cookie在持久性Perl Web应用程序中处理SOAP服务?

来自分类Dev

使用Cloud Firestore时是否需要为React Native应用程序启用离线持久性?

来自分类Dev

与Rails应用程序进行pubnub聊天的数据持久性

来自分类Dev

Firebase持久性如何为我的Android应用程序存储本地数据

来自分类Dev

卸载应用程序后的核心数据持久性

来自分类Dev

具有应用程序管理的持久性的quarkus

来自分类Dev

将持久性添加到Vue应用程序的本地存储

来自分类Dev

是否可以使管理员在应用程序中保持持久性?

来自分类Dev

E 4.5 Aquaris删除持久性作用域/应用程序

来自分类Dev

卸载应用程序后的核心数据持久性

来自分类Dev

如何在AppDelegate中初始化Core Data的持久性容器,并在整个应用程序中使用它?

来自分类Dev

客户端应用程序中本地存储管理和数据持久性的最佳实践是什么?

来自分类Dev

在TomEE中使用Hibernate作为持久性提供程序

来自分类Dev

Java对象持久性

来自分类Dev

Java 持久性异常

来自分类Dev

持久性单元在首次发布应用程序时无法注入,但在重新启动应用程序时成功

来自分类Dev

使用Java持久性API进行Spring Hibernate集成?

来自分类Dev

持久性提供程序密码困境

来自分类Dev

JPA:配置持久性提供程序

来自分类Dev

在运行时检查Java EE服务器使用哪个持久性提供程序?

来自分类Dev

如何在共享同一数据库的两个不同应用程序之间同步持久性上下文?

来自分类Dev

Kafka-即使将应用程序配置为仅一次且具有最高的持久性,也不会出现消息

来自分类Dev

持久性Java数据库

来自分类Dev

Java持久性查询语言-LIKE

来自分类常见问题

如何使用Redis禁用持久性?

来自分类Dev

如何使用Swift将持久性数据存储在iOS应用上?

来自分类Dev

从Java GUI应用程序调用servlet?

Related 相关文章

  1. 1

    NEDB在电子应用程序中的持久性

  2. 2

    HAProxy + Websockets +应用程序持久性

  3. 3

    如何使用cookie在持久性Perl Web应用程序中处理SOAP服务?

  4. 4

    使用Cloud Firestore时是否需要为React Native应用程序启用离线持久性?

  5. 5

    与Rails应用程序进行pubnub聊天的数据持久性

  6. 6

    Firebase持久性如何为我的Android应用程序存储本地数据

  7. 7

    卸载应用程序后的核心数据持久性

  8. 8

    具有应用程序管理的持久性的quarkus

  9. 9

    将持久性添加到Vue应用程序的本地存储

  10. 10

    是否可以使管理员在应用程序中保持持久性?

  11. 11

    E 4.5 Aquaris删除持久性作用域/应用程序

  12. 12

    卸载应用程序后的核心数据持久性

  13. 13

    如何在AppDelegate中初始化Core Data的持久性容器,并在整个应用程序中使用它?

  14. 14

    客户端应用程序中本地存储管理和数据持久性的最佳实践是什么?

  15. 15

    在TomEE中使用Hibernate作为持久性提供程序

  16. 16

    Java对象持久性

  17. 17

    Java 持久性异常

  18. 18

    持久性单元在首次发布应用程序时无法注入,但在重新启动应用程序时成功

  19. 19

    使用Java持久性API进行Spring Hibernate集成?

  20. 20

    持久性提供程序密码困境

  21. 21

    JPA:配置持久性提供程序

  22. 22

    在运行时检查Java EE服务器使用哪个持久性提供程序?

  23. 23

    如何在共享同一数据库的两个不同应用程序之间同步持久性上下文?

  24. 24

    Kafka-即使将应用程序配置为仅一次且具有最高的持久性,也不会出现消息

  25. 25

    持久性Java数据库

  26. 26

    Java持久性查询语言-LIKE

  27. 27

    如何使用Redis禁用持久性?

  28. 28

    如何使用Swift将持久性数据存储在iOS应用上?

  29. 29

    从Java GUI应用程序调用servlet?

热门标签

归档