在grails中远程调用action

在进行类似批处理的程序时,如果在一个action中需要保存很多记录数,这会导致grails中的数据库session超过负荷,从而导致OOM。

因为这个情况的发生是由于在一次请求中,对数据进行的修改都保存在这个请求的数据库session中,等这次请求结束后才会释放这个数据库session,这样当本次请求中对数据修改的记录数太多会导致OOM。

我们使用的是mongodb数据库,而且使用的是grails mongodb plugin,即便我们使用这个plugin中的mongodb底层链接进行操作,还是依然发生了OOM。

因此我们想能够使每次请求中只保留少量的修改数据在数据库session中,这样相当于对于具体数据的修改编写在另一个action中。示例代码如下:

    def updateData(){

        println "classId:${params.classId} usersId:${params.usersId}"

        render "ok"

    }

调用这个action的方法为:

println dataService.remoteCall(request, g.createLink(action: ‘updateData‘, params: [classId:"test1", usersId:‘usersIdxxx‘]))

这里的实现关键是dataService.remoteCall的函数实现,具体如下:

    /**

     * 得到协议和主机IP的url,最后不带/

     * 比如:

     * http://localhost:9090/blog/bkoff/testCaculateUserExedCount

     * 返回:http://localhost:9090

     * @param request

     * @return

     */

    private String getHostUrl(request){

        String requestUrl = request.requestURL

        String seperator = "://"

        int index = requestUrl.indexOf("://")

        index = requestUrl.indexOf("/", index + seperator.length())

        return requestUrl.substring(0, index)

    }

    /**

     * 远程调用某方法,其中actionUrl用createLink方式就可以创建

     * @param request

     * @param actionUrl

     * @return

     */

    def String remoteCall(request, actionUrl){

        def hostUrl = getHostUrl(request)

        def url = new URL(hostUrl + actionUrl)

        return url.text

    }
时间: 2024-10-11 00:12:20

在grails中远程调用action的相关文章

struts2在配置文件中调用Action的方法返回值

struts2在配置文件中可以调用Action的方法返回值 1.Action中 //文件下载名 public String getDownloadFileName(){ String downloadFileName = ""; String filename = fileName + ".xls"; try { downloadFileName = URLEncoder.encode(filename,"UTF-8"); } catch (Un

asp.net mvc 使用Ajax调用Action 返回数据【转】

使用asp.net mvc 调用Action方法很简单. 一.无参数方法. 1.首先,引入jquery-1.5.1.min.js 脚本,根据版本不同大家自行选择. <script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script> 2.在Controllers中书写前台Ajax需要调用的Action,比如:

【SSH三大框架】Struts2基础第三篇:配置Action以及调用Action的三种方式

一.struts.xml中的包和命名空间 1.Struts2不支持为单独的Action设置命名空间,而是通过为包指定namespace属性来为包下面的所有Action指定共同的命名空间. 如果在配置<package>的时候没有指定namespace属性,则该包下的所有Action处于默认的包空间下 2.例如: <package name="lee" extends="struts-default"> <action name="

strust2之jsp调用action的变量

1. HttpServletRequest request=ServletActionContext.getRequest(); ........ request.setAttribute("list", list); 2 #request.list <!-- value代表一个集合List --> <s:iterator value="#request.list"> <tr> <!-- 必须加"#",不

Asp.net mvc 使用Ajax调用Action 返回数据。

使用asp.net mvc 调用Action方法很简单. 一.无参数方法. 1.首先,引入jquery-1.5.1.min.js 脚本,根据版本不同大家自行选择. <script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script> 2.在Controllers中书写前台Ajax需要调用的Action,比如:

利用ajax调用action

1.struts中要继承struts_json2.struts.xml的配置文件中要设置<result type="json"/>3.dataType:"json",   //接受数据格式 4.$.ajax()来调用action <script> $(document).ready(function(){ $.ajax({ url :"newscenter/message/ten_news_list.action",  /

Struts2的动态调用action方法

动态调用action方法,是指用 action!method 格式的请求来请求后台的逻辑处理 前提条件:在struts.xml或者struts.properties中配置 struts.enable.DynamicMethodInvocation常量为true ,否则动态调用不可用 查看源码:      在org.apache.struts2.dispatcher.mapper.DefaultActionMapper中 protected ActionMapping parseActionNam

.w调用action

有两种方法发送Action请求,分别是sendBizRequest和sendBizRequest2,前者返回xml格式的参数,后者提供了返回json或者xml格式的参数的能力. 1.sendBizRequest方法,返回xml格式的参数——兼容保留 1 var response = justep.Request.sendBizRequest( 2 "/x5demo/misc/process/testKsql/testKsqlProcess","mainActivity&quo

Struts2.5动态方法调用action和使用通配符访问action

[原帖地址]http://blog.csdn.net/leafage_m/article/details/54577687 动态方法调用Action. 这种方法,需要在struts.xml中对其进行支持: [html] view plain copy print? <!-- 是否开启动态方法调用 --> <constant name="struts.enable.DynamicMethodInvocation" value="true" />