我有一个java应用程序(事实上它是grails)我需要执行一个外部程序。我希望我的应用程序是自包含的,即外部脚本/程序是war文件的一部分。这个外部脚本/程序也需要生成一些文件。
我想,我的问题是,如果有一些最佳实践如何做这些事情,以便最终产品不会太贴薄,取决于应用程序权限和什么不是?
答案 0 :(得分:0)
您需要确保的一件事,一次只有一个线程执行您的程序实例。所以你需要一些锁定和同步。
想象一下,多个用户/请求/线程尝试使用不同的输入执行相同的程序,这将是一场灾难。因此,您需要在执行程序时锁定程序而其他程序正在等待,或者您需要在每次运行程序时创建新实例。你应该对此非常小心。
此外,您希望在程序运行后清理它并产生任何输出。
如果用户可以将恶意命令传递给您的系统并试图劫持其他应用程序,则需要小心。
总的来说,你必须小心安全性和正确性(我提到的第一个方案。)
答案 1 :(得分:0)
安全性 - 确保您的应用程序不允许在主机系统上执行任意(用户提供的)代码。想想SQL注入式攻击。如果你需要传递数据,我建议先将数据插入数据库,然后将主键传递给外部进程,这有助于避免缓冲区溢出类型的情况。
健壮性 - 此程序可能会失败,或者需要时间,或者有其他未知的副作用。通过从不同的线程或甚至不同的进程执行,将您的主Web应用程序与此程序隔离。
日志记录 - 如果您需要从此外部应用程序收集日志记录,您可能需要传入会话ID(或等效内容),以便跟踪Web会话的任何错误。
答案 2 :(得分:0)
您可以设计一个跟踪服务请求的小型管理系统。这将是一个非常有用的组件,因为大多数项目都有这样的目的。
应该从服务执行应用程序,对该服务本身的请求应该是异步的。此外,您还可以获得反馈并跟踪该服务状态。