1

我有一个相当“疯狂”的想法,即在我的应用程序中拥有一个“存储过程”设施。基本上,我的应用程序是以数据为中心的,它可以通过某种形式的 Restful 接口访问数据存储区。

我想拥有以JSON多种方式操作数据(这是一个字符串)的功能,比如

  • 递增/递减
  • 散列/加密/解密和各种各样的东西

我最初的实现是创建一个 Java 类来执行这些操作。典型的。

但是,我希望能够灵活地进行此类操作。也就是说,我可以添加一个过程来即时操作数据,也就是说,就像一个 script可以选择的过程,它将处理检索到的数据,然后将其再次保存在数据存储中。

例如:

http://127.0.0.1:8888/resources?key=somekey&operation=funkyops 

这将导致服务器使用此类密钥在内部获取实体,然后操作数据并将实体保存回数据存储区。

检索和持久化逻辑可以被硬编码,但“存储过程”必须作为脚本或类似的东西存储在数据存储中,然后在选择时将被传递到某种处理块中。

这是我正在尝试做的一个具体示例:HashBend.java

关于如何实现这一目标的任何想法?

4

2 回答 2

1

您可以使用 javascript 引擎:请参阅“Java 平台脚本” http://java.sun.com/developer/technicalArticles/J2SE/Desktop/scripting/

例如:

http://host/resources?key=somekey&operation=return+{newkey:123,data1:"hello"};
于 2012-08-28T11:25:16.957 回答
1

您最好的选择是简单地使用脚本语言并通过 Java 调用解释器。

如果您坚持只使用 Java,那么可能有一种方法....

创建一个所有脚本都符合的接口,该接口指定操作数据的方法。创建您的特定类,对其进行序列化,然后将其包含在 json 中(可能是 base 64 编码)。

当你得到 json 时,提取 base 64 数据,转换回二进制,反序列化并转换为你知道的接口类型。调用操作方法。

我还没有尝试过,但我看不出它不起作用的任何原因。不过,我建议的是实施一个签名方案,这样您就可以确定您执行的代码来自您认为它来自哪里。您不希望有人注入恶意代码。

于 2012-08-28T11:26:13.227 回答