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

Fernando Mendel updated OLINGO-1254:
------------------------------------
    Description: 
Hey,

we are using the following dependencies from Olingo: 

 
{code:xml}
<dependency>
<groupId>org.apache.olingo</groupId>
<artifactId>olingo-odata2-api</artifactId>
<version>2.0.10</version>
</dependency>
<dependency>
<groupId>org.apache.olingo</groupId>
<artifactId>olingo-odata2-core</artifactId>
<version>2.0.10</version>
</dependency>
<dependency>
<groupId>org.apache.olingo</groupId>
<artifactId>olingo-odata2-jpa-processor-api</artifactId>
<version>2.0.10</version>
</dependency>
<dependency>
<groupId>org.apache.olingo</groupId>
<artifactId>olingo-odata2-api-annotation</artifactId>
<version>2.0.10</version>
</dependency>
<dependency>
<groupId>org.apache.olingo</groupId>
<artifactId>olingo-odata2-jpa-processor-core</artifactId>
<version>2.0.10</version>
</dependency>
{code}
 

 

When doing two assyncronous requests to GET data from OData, sometimes it 
works, sometimes it does not.

I have generated the following test code in javascript:
{code:javascript}
function prepareData(sUrl){ var xhr = new XMLHttpRequest(); xhr.withCredentials 
= true; xhr.addEventListener("readystatechange", function () { if 
(this.readyState === this.DONE) { console.log(this.responseText); } }); 
xhr.open("GET", sUrl); xhr.setRequestHeader("authorization", "Basic 
YWRtaW46YWRtaW4="); return xhr; }
 
a = 
prepareData("http://localhost:8080/OData/V2/CareCorner.svc/PackageDTOMocks?%24filter=RecipientName%20eq%20'John%20Mendel'");
 
b = 
prepareData("http://localhost:8080/OData/V2/CareCorner.svc/PackageDTOMocks?%24filter=RecipientName%20eq%20'Karl%20Frank'");
 
 
a.send(null); 
b.send(null);
{code}
 

it sends two get requests with different filters.

 
 The behavior is a bit non deterministic, a already seen the following 
behaviors to happen:
 * Both requests return the same output (same filter condition)
 * One works the the other returns a null pointer
 * One works and the other returns:

{code:java}
{"httpStatus":"INTERNAL_SERVER_ERROR","exceptionKey":"SAPException(org.hibernate.QueryException)","exceptionMessage":"An
 unhandled exception happened: Not all named parameters have been set: [2] 
[SELECT E1 FROM PackageDTOMock E1 WHERE (E1.recipientName = ?2)]."}
{code}
I believe the cause is that *parameterizedMap* is built from a static method.
 class *JPAQueryBuilder*, method *buildQuery*
{code:java}
    Map<String, Map<Integer, Object>> parameterizedMap = 
ODataParameterizedWhereExpressionUtil.
        getParameterizedQueryMap();
{code}
Filter query output example:
{code:xml}
<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"; 
xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"; 
xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices"; 
xml:base="http://localhost:8080/OData/V2/CareCorner.svc/";><id>http://localhost:8080/OData/V2/CareCorner.svc/PackageDTOMocks</id><title
 
type="text">PackageDTOMocks</title><updated>2018-04-03T16:25:40.161Z</updated><author><name></name></author><link
 href="PackageDTOMocks" rel="self" 
title="PackageDTOMocks"></link><entry><id>http://localhost:8080/OData/V2/CareCorner.svc/PackageDTOMocks('794687097541')</id><title
 
type="text">PackageDTOMocks</title><updated>2018-04-03T16:25:40.161Z</updated><category
 term="LocalPersistenceUnit.PackageDTOMock" 
scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme";></category><link
 href="PackageDTOMocks('794687097541')" rel="edit" 
title="PackageDTOMock"></link><content 
type="application/xml"><m:properties><d:AdultSignatureRequired>false</d:AdultSignatureRequired><d:DangerousGood>false</d:DangerousGood><d:RecipientName>Karl
 
Mendel</d:RecipientName><d:ShippingType>EXPRESS</d:ShippingType><d:TrackingNumber>794687097541</d:TrackingNumber></m:properties></content></entry></feed>
{code}
 
 I'm setting this as critical because there is no way to release Olingo in an 
production application with this issue when sending parallel requests.

  was:
Hey,

we are using the following dependencies from Olingo: 

 
{code:xml}
<dependency>
<groupId>org.apache.olingo</groupId>
<artifactId>olingo-odata2-api</artifactId>
<version>2.0.10</version>
</dependency>
<dependency>
<groupId>org.apache.olingo</groupId>
<artifactId>olingo-odata2-core</artifactId>
<version>2.0.10</version>
</dependency>
<dependency>
<groupId>org.apache.olingo</groupId>
<artifactId>olingo-odata2-jpa-processor-api</artifactId>
<version>2.0.10</version>
</dependency>
<dependency>
<groupId>org.apache.olingo</groupId>
<artifactId>olingo-odata2-api-annotation</artifactId>
<version>2.0.10</version>
</dependency>
<dependency>
<groupId>org.apache.olingo</groupId>
<artifactId>olingo-odata2-jpa-processor-core</artifactId>
<version>2.0.10</version>
</dependency>
{code}
 

One servlet is declared and is working fine:

 
{code:java}
@Bean 
public ODataServlet odataServlet() { 
   return new ODataServlet(); 
} 
@Bean
public ServletRegistrationBean odataServletRegistrationBean(){
   ServletRegistrationBean servlet = new 
ServletRegistrationBean(odataServlet(),"/OData/V2/CareCorner.svc/*"); 
   servlet.setLoadOnStartup(3); 
   servlet.addInitParameter("javax.ws.rs.Application",  
"org.apache.olingo.odata2.core.rest.app.ODataApplication"); 
   servlet.addInitParameter("org.apache.olingo.odata2.service.factory", 
jpaFactoryClass); 
   return servlet; 
}
{code}
  

When doing two assyncronous requests to GET data from OData, sometimes it 
works, sometimes it does not.

I have generated the following test code in javascript:
{code:javascript}
function prepareData(sUrl){ var xhr = new XMLHttpRequest(); xhr.withCredentials 
= true; xhr.addEventListener("readystatechange", function () { if 
(this.readyState === this.DONE) { console.log(this.responseText); } }); 
xhr.open("GET", sUrl); xhr.setRequestHeader("authorization", "Basic 
YWRtaW46YWRtaW4="); return xhr; }
 
a = 
prepareData("http://localhost:8080/OData/V2/CareCorner.svc/PackageDTOMocks?%24filter=RecipientName%20eq%20'John%20Mendel'");
 
b = 
prepareData("http://localhost:8080/OData/V2/CareCorner.svc/PackageDTOMocks?%24filter=RecipientName%20eq%20'Karl%20Frank'");
 
 
a.send(null); 
b.send(null);
{code}
 

it sends two get requests with different filters.

 
 The behavior is a bit non deterministic, a already seen the following 
behaviors to happen:
 * Both requests return the same output (same filter condition)
 * One works the the other returns a null pointer
 * One works and the other returns:

{code:java}
{"httpStatus":"INTERNAL_SERVER_ERROR","exceptionKey":"SAPException(org.hibernate.QueryException)","exceptionMessage":"An
 unhandled exception happened: Not all named parameters have been set: [2] 
[SELECT E1 FROM PackageDTOMock E1 WHERE (E1.recipientName = ?2)]."}
{code}

I believe the cause is that *parameterizedMap* is built from a static method.
 class *JPAQueryBuilder*, method *buildQuery*
{code:java}
    Map<String, Map<Integer, Object>> parameterizedMap = 
ODataParameterizedWhereExpressionUtil.
        getParameterizedQueryMap();
{code}
Filter query output example:
{code:xml}
<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"; 
xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"; 
xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices"; 
xml:base="http://localhost:8080/OData/V2/CareCorner.svc/";><id>http://localhost:8080/OData/V2/CareCorner.svc/PackageDTOMocks</id><title
 
type="text">PackageDTOMocks</title><updated>2018-04-03T16:25:40.161Z</updated><author><name></name></author><link
 href="PackageDTOMocks" rel="self" 
title="PackageDTOMocks"></link><entry><id>http://localhost:8080/OData/V2/CareCorner.svc/PackageDTOMocks('794687097541')</id><title
 
type="text">PackageDTOMocks</title><updated>2018-04-03T16:25:40.161Z</updated><category
 term="LocalPersistenceUnit.PackageDTOMock" 
scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme";></category><link
 href="PackageDTOMocks('794687097541')" rel="edit" 
title="PackageDTOMock"></link><content 
type="application/xml"><m:properties><d:AdultSignatureRequired>false</d:AdultSignatureRequired><d:DangerousGood>false</d:DangerousGood><d:RecipientName>Karl
 
Mendel</d:RecipientName><d:ShippingType>EXPRESS</d:ShippingType><d:TrackingNumber>794687097541</d:TrackingNumber></m:properties></content></entry></feed>
{code}
 
 I'm setting this as critical because there is no way to release Olingo in an 
production application with this issue when sending parallel requests.


> Issue when sending requests in parallel
> ---------------------------------------
>
>                 Key: OLINGO-1254
>                 URL: https://issues.apache.org/jira/browse/OLINGO-1254
>             Project: Olingo
>          Issue Type: Bug
>          Components: odata2-jpa
>            Reporter: Fernando Mendel
>            Priority: Critical
>
> Hey,
> we are using the following dependencies from Olingo: 
>  
> {code:xml}
> <dependency>
> <groupId>org.apache.olingo</groupId>
> <artifactId>olingo-odata2-api</artifactId>
> <version>2.0.10</version>
> </dependency>
> <dependency>
> <groupId>org.apache.olingo</groupId>
> <artifactId>olingo-odata2-core</artifactId>
> <version>2.0.10</version>
> </dependency>
> <dependency>
> <groupId>org.apache.olingo</groupId>
> <artifactId>olingo-odata2-jpa-processor-api</artifactId>
> <version>2.0.10</version>
> </dependency>
> <dependency>
> <groupId>org.apache.olingo</groupId>
> <artifactId>olingo-odata2-api-annotation</artifactId>
> <version>2.0.10</version>
> </dependency>
> <dependency>
> <groupId>org.apache.olingo</groupId>
> <artifactId>olingo-odata2-jpa-processor-core</artifactId>
> <version>2.0.10</version>
> </dependency>
> {code}
>  
>  
> When doing two assyncronous requests to GET data from OData, sometimes it 
> works, sometimes it does not.
> I have generated the following test code in javascript:
> {code:javascript}
> function prepareData(sUrl){ var xhr = new XMLHttpRequest(); 
> xhr.withCredentials = true; xhr.addEventListener("readystatechange", function 
> () { if (this.readyState === this.DONE) { console.log(this.responseText); } 
> }); xhr.open("GET", sUrl); xhr.setRequestHeader("authorization", "Basic 
> YWRtaW46YWRtaW4="); return xhr; }
>  
> a = 
> prepareData("http://localhost:8080/OData/V2/CareCorner.svc/PackageDTOMocks?%24filter=RecipientName%20eq%20'John%20Mendel'");
>  
> b = 
> prepareData("http://localhost:8080/OData/V2/CareCorner.svc/PackageDTOMocks?%24filter=RecipientName%20eq%20'Karl%20Frank'");
>  
>  
> a.send(null); 
> b.send(null);
> {code}
>  
> it sends two get requests with different filters.
>  
>  The behavior is a bit non deterministic, a already seen the following 
> behaviors to happen:
>  * Both requests return the same output (same filter condition)
>  * One works the the other returns a null pointer
>  * One works and the other returns:
> {code:java}
> {"httpStatus":"INTERNAL_SERVER_ERROR","exceptionKey":"SAPException(org.hibernate.QueryException)","exceptionMessage":"An
>  unhandled exception happened: Not all named parameters have been set: [2] 
> [SELECT E1 FROM PackageDTOMock E1 WHERE (E1.recipientName = ?2)]."}
> {code}
> I believe the cause is that *parameterizedMap* is built from a static method.
>  class *JPAQueryBuilder*, method *buildQuery*
> {code:java}
>     Map<String, Map<Integer, Object>> parameterizedMap = 
> ODataParameterizedWhereExpressionUtil.
>         getParameterizedQueryMap();
> {code}
> Filter query output example:
> {code:xml}
> <?xml version="1.0" encoding="utf-8"?><feed 
> xmlns="http://www.w3.org/2005/Atom"; 
> xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"; 
> xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices"; 
> xml:base="http://localhost:8080/OData/V2/CareCorner.svc/";><id>http://localhost:8080/OData/V2/CareCorner.svc/PackageDTOMocks</id><title
>  
> type="text">PackageDTOMocks</title><updated>2018-04-03T16:25:40.161Z</updated><author><name></name></author><link
>  href="PackageDTOMocks" rel="self" 
> title="PackageDTOMocks"></link><entry><id>http://localhost:8080/OData/V2/CareCorner.svc/PackageDTOMocks('794687097541')</id><title
>  
> type="text">PackageDTOMocks</title><updated>2018-04-03T16:25:40.161Z</updated><category
>  term="LocalPersistenceUnit.PackageDTOMock" 
> scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme";></category><link
>  href="PackageDTOMocks('794687097541')" rel="edit" 
> title="PackageDTOMock"></link><content 
> type="application/xml"><m:properties><d:AdultSignatureRequired>false</d:AdultSignatureRequired><d:DangerousGood>false</d:DangerousGood><d:RecipientName>Karl
>  
> Mendel</d:RecipientName><d:ShippingType>EXPRESS</d:ShippingType><d:TrackingNumber>794687097541</d:TrackingNumber></m:properties></content></entry></feed>
> {code}
>  
>  I'm setting this as critical because there is no way to release Olingo in an 
> production application with this issue when sending parallel requests.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to