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

时间:2011-08-05 17:17:02

标签: 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 +lservercfgfile +mapcyclefile mapcycle.txt +motdfile motd.txt +logsdir logs -zone 2048",null,  new File(filebase+port)) ;

并希望将p存储在数据库中,但进程不可序列化,如何将其保存在数据库中?

我们可以检查进程p是否因某些崩溃或某种原因仍在运行或死亡

2 个答案:

答案 0 :(得分:1)

您绝对无法将进程本身存储在数据库中。但是如果你试图保留进程以备将来使用(在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);
  }
}

您可以使用

从任何地方(在类加载器的范围内)进行存储和查找
ProcessRegistry.getInstance().register(...)

答案 1 :(得分:0)

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

  1. 创建新流程
  2. 将流程保存到带有一些ID的地图
  3. 将该ID保存到数据库
  4. 查找时,您可以使用id查找进程以查看它是否已结束。