Java 在数据库中存储进程对象

Java 在数据库中存储进程对象,java,persistence,Java,Persistence,我在做什么 Process p = null; if(CheckOS.isWindows()) p = rt.exec(filebase+port+"/hlds.exe +maxplayers "+players+ " -game cstrike -console +port "+port+" -nojoy -noipx -heapsize 250000 +map de_dust2 +servercfgfile server.cfg +lservercfg

我在做什么

Process p = null;
        if(CheckOS.isWindows())
            p = rt.exec(filebase+port+"/hlds.exe +maxplayers "+players+ " -game cstrike -console +port "+port+" -nojoy -noipx -heapsize 250000 +map de_dust2 +servercfgfile server.cfg +lservercfgfile +mapcyclefile mapcycle.txt +motdfile motd.txt +logsdir logs -zone 2048",null,  new File(filebase+port)) ;
并且想在数据库中存储
p
,但进程不可序列化,如何将其保存在数据库中


我们是否可以检查进程
p
是否仍在运行,或者是否由于某个崩溃或其他原因而死机没有简单的方法将进程保存到数据库中。相反,您可以在数据库中保存对它的引用。如果我这样做,我会:

  • 创建一个新流程
  • 将进程保存到具有某个id的映射
  • 将该id保存到数据库

  • 查找时,您可以使用id查找进程,以查看它是否已结束

    没有简单的方法将进程保存到数据库中。相反,您可以在数据库中保存对它的引用。如果我这样做,我会:

  • 创建一个新流程
  • 将进程保存到具有某个id的映射
  • 将该id保存到数据库

  • 查找时,您可以使用id查找进程,以查看它是否已结束

    您绝对不能将进程本身存储在数据库中。但是,如果您试图保留流程以备将来使用(在VM的范围内),那么您可以有如下内容:

    public class ProcessRegistry {
    
      public static class Key {}
    
      private static final ProcessRegistry INSTANCE = new ProcessRegistry();
    
      public static ProcessRegistry getInstance() { return INSTANCE; }
    
      private final Map<Object, Process> _processes = new HashMap<...>();
    
      public Key registry(Process p) {
        Key key = new Object();
        _processes.put(key, p);
        return key;
      }
    
      public Process lookup(Key key) {
        return _processes.get(key);
      }
    }
    

    等等。

    您绝对不能将进程本身存储在数据库中。但是,如果您试图保留流程以备将来使用(在VM的范围内),那么您可以有如下内容:

    public class ProcessRegistry {
    
      public static class Key {}
    
      private static final ProcessRegistry INSTANCE = new ProcessRegistry();
    
      public static ProcessRegistry getInstance() { return INSTANCE; }
    
      private final Map<Object, Process> _processes = new HashMap<...>();
    
      public Key registry(Process p) {
        Key key = new Object();
        _processes.put(key, p);
        return key;
      }
    
      public Process lookup(Key key) {
        return _processes.get(key);
      }
    }
    

    等等。

    在数据库中存储进程意味着什么?流程实例在操作系统级别与诚实的流程相关联。。。您是否试图在web会话或类似的内容中保留对进程的引用?总而言之,这个用例是什么?事实上,我将在一段时间后检查进程是否正在运行,所以要保存它在数据库中存储进程意味着什么?流程实例在操作系统级别与诚实的流程相关联。。。您是否试图在web会话或类似的内容中保留对进程的引用?总而言之,这个用例是什么?实际上我将在一段时间后检查流程是否正在运行,因此,要保存itI,我还认为您可以生成一个新线程来读取输出,并在需要时为您准备好。我还认为您可以生成一个新线程来读取输出,并在需要时为您准备好。