【发布时间】:2013-02-14 19:32:13
【问题描述】:
|有一个用 prolog 编写的过滤器,我想将它嵌入到我的网络服务中。我在后端使用 JAVA,我希望在此处添加过滤器。我正在使用 tomcat 作为我的应用程序服务器。谁能推荐一个好方法。我知道 JPL,可悲的是我无法让它工作。
【问题讨论】:
-
您的问题应该与 JPL 问题有关,确保包含您看到的错误
|有一个用 prolog 编写的过滤器,我想将它嵌入到我的网络服务中。我在后端使用 JAVA,我希望在此处添加过滤器。我正在使用 tomcat 作为我的应用程序服务器。谁能推荐一个好方法。我知道 JPL,可悲的是我无法让它工作。
【问题讨论】:
如果你想将你的 Prolog 引擎嵌入到 Java 本身中,总会有tuProlog。其他替代方案包括概念相似的JLog 或更编译的Prolog Cafe。
另一种选择,也许更远一点(它肯定会涉及到你的一些移植工作)是使用Mercury 语言——它有一个非常类似于 Prolog 的语法,但实际上不是 Prolog——它功能,除其他外,Java 后端和相应的 Java FFI。
【讨论】:
你想要做什么并不是很明显,所以我假设你真的只是想弄清楚如何启动你的 Prolog 代码并返回结果。
如果是这样,Java 提供了Process 类:
ProcessBuilder.start() 和 Runtime.exec 方法创建一个原生 处理并返回一个实例 可以使用的 Process 的子类 控制过程并获得 关于它的信息。班上 过程提供了方法 执行来自流程的输入, 执行输出到进程, 等待过程完成, 检查退出状态 进程,并销毁(杀死) 过程。
也许更直接有用的是ProcessBuilder:它允许您创建一个完整的工作环境(包括环境变量),该环境可以密切模拟您现在可能正在测试的命令行。引用 Javadoc:
ProcessBuilder pb = new ProcessBuilder("myCommand", "myArg1", "myArg2");
Map<String, String> env = pb.environment();
env.put("VAR1", "myValue");
env.remove("OTHERVAR");
env.put("VAR2", env.get("VAR1") + "suffix");
pb.directory(new File("myDir"));
Process p = pb.start();
请记住,如果您想将信息传递给您创建的流程,您需要使用Process.getOutputStream()(这将是您对 Prolog 输入的输出)。同样,如果你想得到Prolog的输出和错误,你需要使用Process.getInputStream()和Process.getErrorStream()。
我过去曾混淆过那些输入和输出流,但我仍然希望我能回到我生命中的那些时光......
【讨论】: