Caching Mendix中的缓存和AOP:Mendix应用程序中是否有统一或标准化的服务器端缓存方法?

Caching Mendix中的缓存和AOP:Mendix应用程序中是否有统一或标准化的服务器端缓存方法?,caching,aop,model-driven-development,mendix,Caching,Aop,Model Driven Development,Mendix,使用Mendix Business Modeler构建web应用程序与使用Java/Spring/JSF等技术开发web应用程序有根本不同。但是,为了这个问题,我将试着比较这两种情况: 在基于Java/Spring的应用程序中,我可以将我的应用程序与第三方产品Ehcache集成,以在方法级别缓存数据。例如,我可以配置ehcache来存储给定方法的返回值(具有特定的生存时间)。每当调用此方法时,ecache将自动检查以前是否使用相同的参数调用过该方法,以及缓存中是否存储了返回值。如果是这样,则永远

使用Mendix Business Modeler构建web应用程序与使用Java/Spring/JSF等技术开发web应用程序有根本不同。但是,为了这个问题,我将试着比较这两种情况:

在基于Java/Spring的应用程序中,我可以将我的应用程序与第三方产品Ehcache集成,以在方法级别缓存数据。例如,我可以配置ehcache来存储给定方法的返回值(具有特定的生存时间)。每当调用此方法时,ecache将自动检查以前是否使用相同的参数调用过该方法,以及缓存中是否存储了返回值。如果是这样,则永远不会实际执行该方法,而是立即返回缓存的方法返回值


我希望在Mendix中具有相同的功能,但在本例中,我将缓存微流返回值。另外,我不想被迫在所有地方添加操作,明确地告诉微流检查缓存。我想在一个集中的位置注册我的微流以进行缓存,或者简单地标记每个微流以进行缓存。换句话说,这个问题与Mendix中面向方面编程(AOP)的概念和缓存的概念一样重要:是否有一种方法可以将钩子引入微流调用,以便应用执行前和执行后操作?在我看来,在Mendix中,AOP之所以在Java中有它的用途,同样的原因也存在于Mendix中。

在使用Mendix应用程序时,它会尽可能多地为您服务,在这种情况下,这意味着平台已经有了一个对象缓存来保存所有需要缓存的对象。 在内部,Mendix平台使用Ehcache来实现这一点

但是,实际上不可能像在Java/Spring中那样影响缓存。这是由于Mendix平台的所有功能,该平台已经尝试尽可能高效地缓存所有对象。
创建的每个对象始终添加到缓存中。当处理该对象时,它会一直处于缓存中,直到平台检测到特定对象无法再通过UI或微流访问为止。 还有一些API调用可用于指示平台将对象保留在缓存中,而不管其用途如何。但这并不能提供您所要求的灵活性。


但特别是关于你的问题,我最初的回答是:为什么要缓存微流输出?
对象已缓存在内存中,浏览器客户端仅在收到指示时刷新缓存。您正在使用的任何对象都将被缓存。 另外,在查看我们使用的大多数微流时,我认为我不太可能希望缓存输出,而不是重新运行微流。由于大多数微流的设计,我认为大多数微流可能会在每次执行时返回稍微不同的输出

在Mendix平台中,您可以订阅许多侦听器类,这些类允许您触发默认操作之外的其他操作。但这需要对当前行为有一些详细的了解。

例如,您可以覆盖登录操作,但如果不执行所有正确的验证,则可能会降低登录过程的安全性

谢谢你的回复。我不知道Mendix已经按照您描述的方式使用了ehcache。我完全同意我绝对不想缓存全部或大部分微流输出。这将使应用程序变得毫无意义。但对于一些不起副作用且执行特定类型活动的微流,我想我可能需要此功能。例如,如果我有一系列微流(和子微流)构建web服务请求对象,则提交请求,然后从web服务响应中提取相关数据,我碰巧知道返回数据本身是可缓存的,那么,防止应用程序消耗不必要的资源和进行往返的最佳方法是什么?我想我只是在寻找一种方法,可以通用地解决这个问题,然后在显式请求时应用它。Mendix中没有通用的机制来解决这个问题,因此在这种情况下,您可以缓存值,而性能增益实际上是相关的,您必须自己构建它。可以使用Java操作构建一个相当通用的解决方案,Java操作可以调用微流并将返回值存储在某种键/值存储中。顺便说一句,请注意,最新版本的Mendix不再在内部使用Ehcache。