进行外部流程调用时进行设计优化

时间:2013-03-06 21:00:40

标签: java linux oop design-patterns processbuilder

我需要从java进程调用外部进程/脚本/ cli命令 由于这些调用会非常多,有些会返回运行的进程/脚本的结果,而其他人只会运行它,我想知道是否:

  1. 围绕Java ProcessBuilder构建标准设计 所以我没有分散在ProcessBuilder的代码调用中 不断
  2. 我可以做哪些优化?例如,阅读是否有意义 来自文件的所有cli命令,而不是保留它们,例如如 代码中的final String

1 个答案:

答案 0 :(得分:2)

你的问题有点模糊,无法写出准确的答案,但我有一些建议:

  • 外壳设计用于链接命令(管道,等待等)并编写一些逻辑代码。壳被解释并且非常容易更新,但必须保持简单。它们可能是您系统的基本部分。
  • 编写自己的launch方法以启动进程并捕获stdout和stderr(在两个线程中),以编写驱动程序的日志。
  • 设计XML文件以声明性方式指定:
    • 进程路径,他们的参数(静态的)
    • 并行和作业之间的同步
  • 用Java编写模型以反映XML流程模型(JAXB可能是一个解决方案)
  • 向模型添加等待一组作业的功能
  • 向模型添加修饰符以动态更改参数值

如果我尝试对您的问题进行分类,我认为主要是在控制流

要解决一个大问题,您可以使用并行性:同时启动多个进程并等待所有进程终止:它是 rendez-vous join 阶段。您可以将远程命令启动到另一台联网计算机。

如何在XML文件中指定并行性的一个很好的示例是ANT build files

<parallel>
  <wlrun ... >
  <sequential>
    <sleep seconds="30"/>
    <junit fork="true" forkmode="once" ... >
    <wlstop/>
  </sequential>
</parallel>

我可以建议您使用ANT解决您的问题而无需编程吗?

希望执行的图纸可能有用,用纸和笔......; - )

几个图形应用程序可能有助于绘制控制流的逻辑图。完成后,将其发布到此处,您将获得更精确的答案,我希望......