You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@olingo.apache.org by "Michael Bolz (JIRA)" <ji...@apache.org> on 2014/11/21 23:24:33 UTC

[jira] [Updated] (OLINGO-493) Possible concurrency issue in ODataServlet

     [ https://issues.apache.org/jira/browse/OLINGO-493?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Michael Bolz updated OLINGO-493:
--------------------------------
    Fix Version/s: V2 2.0.2

> Possible concurrency issue in ODataServlet
> ------------------------------------------
>
>                 Key: OLINGO-493
>                 URL: https://issues.apache.org/jira/browse/OLINGO-493
>             Project: Olingo
>          Issue Type: Improvement
>          Components: odata2-core
>    Affects Versions: V2 2.0.1
>            Reporter: Vitali Yarmolik
>            Assignee: Michael Bolz
>            Priority: Critical
>             Fix For: V2 2.0.2
>
>
> The implementation of {{org.apache.olingo.odata2.core.servlet.ODataServlet}} HTTP servlet is not thread safe. Looking into the source code of the servlet we can see it has two private fields defined in the following way:
> {code}
> private ODataServiceFactory serviceFactory;
> private int pathSplit = 0;
> {code}
> The {{serviceFactory}} field is initialized in the servlet's {{service()}} method for every service request and later used in the servlet's {{handleRequest(HttpServletRequest, ODataHttpMethod, HttpServletResponse)}} method. 
> The situation is similar for the {{pathSplit}} field as well.
> Because ODataServlet does not implement {{javax.servlet.SingleThreadModel}} interface (_and should not, in my personal opinion_), the web container will create only one instance of the servlet which will be used by different threads representing the different HTTP requests. In more or less heavy-loaded scenario it can definitely cause concurrency issues. 
> For example, both the fields can be re-initialized in the {{service()}} method by one thread before another thread will start using them in the {{handleRequest()}} method.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)