RenjinScriptEngineFactory 和 AppEngineContextFactory 的区别
Difference between RenjinScriptEngineFactory and AppEngineContextFactory
我正在玩这个优秀的 renjin 项目,我想知道它们之间有什么区别:
RenjinScriptEngineFactory factory = new RenjinScriptEngineFactory();
ScriptEngine engine = factory.getScriptEngine();
和
ScriptEngine engine = AppEngineContextFactory.createScriptEngine(context);
第一个例子来自eclipse-dynamic-web-project and the second example comes from the appengine-servlet例子。
感谢您的帮助。
这两个接口都是 SessionBuilder class 的包装器,它创建了一个新的 Renjin Session 对象,可以在其中评估代码。
RenjinScriptEngineFactory,它是 Java 脚本 API 的实现,使用原始默认值创建一个新会话:
@Override
public RenjinScriptEngine getScriptEngine() {
Session session = new SessionBuilder().withDefaultPackages().build()
return new RenjinScriptEngine(this, session);
}
AppEngineContextFactory 还创建了一个新会话,但使用与 AppEngine 兼容的 Apache VFS FileSystemManager 实例:
public static ScriptEngine createScriptEngine(ServletContext servletContext) {
Session session = new SessionBuilder()
.withFileSystemManager(createAppEngineFileSystemManager(servletContext))
.withDefaultPackages()
.build();
RenjinScriptEngineFactory factory = new RenjinScriptEngineFactory();
return factory.getScriptEngine(session);
}
在 AppEngine 环境中,文件系统操作在设计上非常有限,允许 R 脚本甚至 尝试 访问根目录中的文件,如“/home/alex/mydata" 可以关闭您的虚拟机。
对于这种情况,Renjin 通过 Apache Virtual File System library, so that you can control how R scripts see and interact with the file system. AppEngineContextFactory
creates a "fake" file system 调解所有 R 文件系统操作,您的 Web 应用程序位于根目录中。
这样,您的脚本仍然可以安全地访问与您的应用程序一起部署的文件,例如:
myModel <- readRDS("/WEB-INF/data/model.rds")
y <- predict(myModel, x)
您当然可以使用 AppEngineContextFactory 作为起点来进一步完善您的 R 脚本的环境 运行。
我正在玩这个优秀的 renjin 项目,我想知道它们之间有什么区别:
RenjinScriptEngineFactory factory = new RenjinScriptEngineFactory();
ScriptEngine engine = factory.getScriptEngine();
和
ScriptEngine engine = AppEngineContextFactory.createScriptEngine(context);
第一个例子来自eclipse-dynamic-web-project and the second example comes from the appengine-servlet例子。
感谢您的帮助。
这两个接口都是 SessionBuilder class 的包装器,它创建了一个新的 Renjin Session 对象,可以在其中评估代码。
RenjinScriptEngineFactory,它是 Java 脚本 API 的实现,使用原始默认值创建一个新会话:
@Override
public RenjinScriptEngine getScriptEngine() {
Session session = new SessionBuilder().withDefaultPackages().build()
return new RenjinScriptEngine(this, session);
}
AppEngineContextFactory 还创建了一个新会话,但使用与 AppEngine 兼容的 Apache VFS FileSystemManager 实例:
public static ScriptEngine createScriptEngine(ServletContext servletContext) {
Session session = new SessionBuilder()
.withFileSystemManager(createAppEngineFileSystemManager(servletContext))
.withDefaultPackages()
.build();
RenjinScriptEngineFactory factory = new RenjinScriptEngineFactory();
return factory.getScriptEngine(session);
}
在 AppEngine 环境中,文件系统操作在设计上非常有限,允许 R 脚本甚至 尝试 访问根目录中的文件,如“/home/alex/mydata" 可以关闭您的虚拟机。
对于这种情况,Renjin 通过 Apache Virtual File System library, so that you can control how R scripts see and interact with the file system. AppEngineContextFactory
creates a "fake" file system 调解所有 R 文件系统操作,您的 Web 应用程序位于根目录中。
这样,您的脚本仍然可以安全地访问与您的应用程序一起部署的文件,例如:
myModel <- readRDS("/WEB-INF/data/model.rds")
y <- predict(myModel, x)
您当然可以使用 AppEngineContextFactory 作为起点来进一步完善您的 R 脚本的环境 运行。