mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-14 17:58:59 +00:00
Web Script Framework enhancements: ReadOnly transactions, Buffered Responses
- additional 'allow' attribute on <transaction> element in web script descriptor - values: readonly, readwrite (default) - readonly means that the whole web script executes in read transaction - readonly lighter weight; no flushing, no cache checks/updates - transaction aware web script response buffers - only commits to response when trx is committed - fixes ALFCOM-2497 - CMIS: createFolder & immediately add document can fail - also means errors half-way thru response result in clean response with error contents only - readonly transactions are not buffered - WebScript RepoStore now uses ReadOnly transaction for gets - CMIS getter Web Scripts set to ReadOnly transaction - Fix up Web Script pattern that checks for WebScriptServletResponse using instanceof - no longer the case, as it may be wrapped in BufferedResponse - use getRuntime() instanceof WebScriptServletRuntime and/or - WebScriptServletRuntime.getHttpServletResponse/Request(WebScriptReponse r) - returns null, if none Tests: - Run CMIS Tests - Run CMIS BulkCreateSystemTest (now working) - Run Share Suggestion: - Update your 'read' web script descriptors to include <transaction allow="readonly">. This will improve repo performance significantly. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@14670 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -46,7 +46,6 @@ import org.alfresco.service.cmr.search.SearchService;
|
||||
import org.alfresco.web.scripts.Status;
|
||||
import org.alfresco.web.scripts.WebScriptException;
|
||||
import org.alfresco.web.scripts.WebScriptResponse;
|
||||
import org.alfresco.web.scripts.servlet.WebScriptServletResponse;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
@@ -167,11 +166,10 @@ public class AVMRemoteStore extends BaseRemoteStore
|
||||
}
|
||||
|
||||
// set mimetype for the content and the character encoding + length for the stream
|
||||
WebScriptServletResponse httpRes = (WebScriptServletResponse)res;
|
||||
httpRes.setContentType(mimetype);
|
||||
httpRes.getHttpServletResponse().setCharacterEncoding(reader.getEncoding());
|
||||
httpRes.getHttpServletResponse().setDateHeader("Last-Modified", desc.getModDate());
|
||||
httpRes.setHeader("Content-Length", Long.toString(reader.getSize()));
|
||||
res.setContentType(mimetype);
|
||||
res.setContentEncoding(reader.getEncoding());
|
||||
res.setHeader("Last-Modified", Long.toString(desc.getModDate()));
|
||||
res.setHeader("Content-Length", Long.toString(reader.getSize()));
|
||||
|
||||
if (logger.isDebugEnabled())
|
||||
logger.debug("AVMRemoteStore.getDocument() " + mimetype + " of size: " + reader.getSize());
|
||||
|
@@ -47,7 +47,7 @@ import org.alfresco.web.scripts.WebScriptException;
|
||||
import org.alfresco.web.scripts.WebScriptRequest;
|
||||
import org.alfresco.web.scripts.WebScriptResponse;
|
||||
import org.alfresco.web.scripts.servlet.HTTPProxy;
|
||||
import org.alfresco.web.scripts.servlet.WebScriptServletResponse;
|
||||
import org.alfresco.web.scripts.servlet.WebScriptServletRuntime;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.dom4j.Attribute;
|
||||
@@ -166,11 +166,12 @@ public class SearchProxy extends AbstractWebScript implements InitializingBean
|
||||
|
||||
// issue request against search engine
|
||||
// NOTE: This web script must be executed in a HTTP servlet environment
|
||||
if (!(res instanceof WebScriptServletResponse))
|
||||
if (!(res.getRuntime() instanceof WebScriptServletRuntime))
|
||||
{
|
||||
throw new WebScriptException("Search Proxy must be executed in HTTP Servlet environment");
|
||||
}
|
||||
HttpServletResponse servletRes = ((WebScriptServletResponse)res).getHttpServletResponse();
|
||||
|
||||
HttpServletResponse servletRes = WebScriptServletRuntime.getHttpServletResponse(res);
|
||||
SearchEngineHttpProxy proxy = new SearchEngineHttpProxy(req.getServicePath() + "/" + req.getContextPath(), engine, engineUrl, servletRes);
|
||||
proxy.service();
|
||||
}
|
||||
|
Reference in New Issue
Block a user