You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@wink.apache.org by "Kumar, Munirathnam" <mu...@hp.com> on 2011/12/08 15:05:38 UTC

Inconsistent Unmarshalling during Concurrent requests

Hi
I am requesting  Concurrent requests to a Resource.
But on the Resource, bean objects are not completely populated for some request and gets populated completely for other requests.

Please see the Client,Bean and Resource Class below.

For few client request the request.getSelectedOptions() always returns null .

Is this a bug with Wink ?

Can you please help


-          kumar

Client

class Multi implements Runnable{
    Resource resource;
    String xml = "<UserSubscription>"
            +       "<selectedOptions><entry><key >Amount of Memory (MB)</key><value >2000</value></entry>" +
                                           "<entry><key>Number of CPUs</key><value>1</value></entry>" +
                                           "<entry><key>Number of Servers</key><value>1</value></entry>"
            +      "</selectedOptions>"
            +   "</UserSubscription>";

    Multi(Resource resource){
        this.resource = resource;

    }
    public void run(){
             String res = resource.contentType(MediaType.APPLICATION_XML).accept(MediaType.TEXT_PLAIN).post(String.class,xml);
             System.out.println("thread - " + Thread.currentThread().getName() + " : " +  res);
    }
}

Bean Class

@XmlAccessorType(XmlAccessType.NONE)
@XmlRootElement(name = "UserSubscription")
public class ServiceRequest {
                private Properties modelInputs;


                public  void setSelectedOptions(Properties modelInputs) {
                                this.modelInputs = modelInputs;
                }

                @XmlElementWrapper(name = "selectedOptions", required = true, nillable = false)
                public  Properties getSelectedOptions() {
                                return this.modelInputs;
                }
}


Resource Class

@Path("/test")
public class PropResource {

@POST
@Consumes(MediaType.APPLICATION_XML)
@Produces(MediaType.TEXT_PLAIN)
    public Response getLogs(ServiceRequest request){

    String res = "";
    if( request.getSelectedOptions() == null){
        res = "Serialization Failed";
    } else if(request.getSelectedOptions() != null ){
        res = "Serialization Passed";
    }
    return Response.ok(res).build();
    }

}


Re: Inconsistent Unmarshalling during Concurrent requests

Posted by Michael Elman <el...@apache.org>.
One more interesting test. I tried to run your test with Wink
1.1.1-incubating and with Wink 1.1.2-incubating.
1.1.1-incubating worked fine with 1000 concurrent threads.
1.1.2-incubating failed with 500.

So the problem was introduced in Wink 1.1.2-incubating.

On Sun, Dec 11, 2011 at 11:14 AM, Michael Elman <el...@apache.org> wrote:

> I have created a trivial JAXB Provider:
>
>   @Provider
>     @Consumes(MediaType.APPLICATION_XML)
>     @Produces(MediaType.APPLICATION_XML)
>     public class TrivialJaxbProvider implements MessageBodyReader<Object> {
>
>         @Override
>         public boolean isReadable(Class<?> type, Type genericType,
> Annotation[] annotations, MediaType mediaType) {
>
>             return true;
>         }
>
>         @Override
>         public Object readFrom(Class<Object> type, Type genericType,
> Annotation[] annotations, MediaType mediaType, MultivaluedMap<String,
> String> httpHeaders,
>                 InputStream entityStream) throws IOException,
> WebApplicationException {
>             try {
>                 return
> JAXBContext.newInstance(type).createUnmarshaller().unmarshal(entityStream);
>             } catch (JAXBException e) {
>                    throw new WebApplicationException(e);
>             }
>         }
>
>     }
>
> and used it for this test. It worked fine with 750 threads.
> So it seems that the bug is in a JAXB Provider.
>
> I'll try to find some time to look into it. Anyway, meanwhile you can use
> your own JAXB provider and it should work.
>
> On Fri, Dec 9, 2011 at 8:36 AM, Kumar, Munirathnam <
> munirathnam.kumar@hp.com> wrote:
>
>>  Test Scenario****
>>
>> Methodology****
>>
>> Status****
>>
>> No of threads used : 1000****
>>
>> Java SDK : 1.5****
>>
>> OS : Windows****
>>
>> JAXB on Server: jaxb 2.2****
>>
>> Wink : 1.3 ****
>>
>> ** **
>>
>> XML String : "<UserSubscription>"****
>>
>>             +       "<selectedOptions><entry><key >Amount of Memory
>> (MB)</key><value >2000</value></entry>" +****
>>
>>                                    "<entry><key>Number of
>> CPUs</key><value>1</value></entry>" +****
>>
>>                                    "<entry><key>Number of
>> Servers</key><value>1</value></entry>"****
>>
>>             +      "</selectedOptions>"****
>>
>>             +   "</UserSubscription>";****
>>
>> ** **
>>
>> Jaxb****
>>
>> Version : 2.2****
>>
>> JAXB Components jars were tested for Unmarshall issues.****
>>
>> Concurrent method invocation were exceuted to Unmarshall the xml file.***
>> *
>>
>> ** **
>>
>> Sample Code :****
>>
>> ** **
>>
>>         ServiceRequest request = (ServiceRequest)
>> context.createUnmarshaller().unmarshal( new
>> ByteArrayInputStream(xml.getbytes())); ****
>>
>> ** **
>>
>>         if ( request.getSelectedOptions() == null){****
>>
>>             System.out.println("thread - " +
>> Thread.currentThread().getName() + " : " + " ************** Unmarshal
>> failed ************* ");****
>>
>>         }****
>>
>> All test passed****
>>
>> Wink Resource ****
>>
>> @POST****
>>
>> @Consumes(MediaType.TEXT_PLAIN)****
>>
>> A Wink Resource was used to post the XML String. ****
>>
>> It was consumed using MediaType.TEXT_PLAIN****
>>
>> XML was Unmarshalled using JAXB to create  ServiceRequest object****
>>
>> ** **
>>
>> Sample Code:****
>>
>> ** **
>>
>> @POST****
>>
>> @Consumes(MediaType.TEXT_PLAIN)****
>>
>> @Produces(MediaType.TEXT_PLAIN)****
>>
>>     public Response getLogs(String xmlRequest){   ****
>>
>>     String res = "";****
>>
>>     try {****
>>
>>         ServiceRequest request = (ServiceRequest)
>> context.createUnmarshaller().unmarshal( new
>> ByteArrayInputStream(xmlRequest.getbytes())); ****
>>
>> ** **
>>
>>         if ( request.getSelectedOptions() == null){****
>>
>>             System.out.println(" ************** Unmarshal failed
>> ************* ");****
>>
>>         }****
>>
>> All test Passed****
>>
>> Wink Resource ****
>>
>> @POST****
>>
>> @Consumes(MediaType.* **APPLICATION_XML)*****
>>
>> A Wink Resource was used to post the XML String. ****
>>
>> It was consumed using ****
>>
>> MediaType.* APPLICATION_XML* ****
>>
>> ** **
>>
>> Sample code:****
>>
>> ** **
>>
>> @POST****
>>
>> @Consumes(MediaType.* APPLICATION_XML*)****
>>
>> ** **
>>
>>     public Response getLogs(ServiceRequest request){   ****
>>
>>     String res = "";****
>>
>> ** **
>>
>>         if ( request.getSelectedOptions() == null){****
>>
>>             System.out.println(" ************** Unmarshal failed
>> ************* ");****
>>
>>         }****
>>
>> Few threads failed with errors ****
>>
>> ** **
>>
>> ** **
>>
>> Thanks****
>>
>> Kumar****
>>
>> Cloud Services****
>>
>> ** **
>>
>> ** **
>>
>> *From:* Michael Elman [mailto:elman@apache.org]
>> *Sent:* Thursday, December 08, 2011 11:32 PM
>>
>> *To:* wink-user@incubator.apache.org
>> *Subject:* Re: Inconsistent Unmarshalling during Concurrent requests****
>>
>> ** **
>>
>> I guess so...
>> The question if it's a Wink bug, or may be JAXB...
>> If I have time next week, I'll try to look into it.
>>
>> Did you try to run the same scenario without JAXB? let's say sent plain
>> text and receive it?
>> Send JSON?
>>
>> I guess it can be interesting...****
>>
>> On Thu, Dec 8, 2011 at 6:17 PM, Kumar, Munirathnam <
>> munirathnam.kumar@hp.com> wrote:****
>>
>> Does this issue qualify for a bug ?****
>>
>>  ****
>>
>> *From:* Michael Elman [mailto:elman@apache.org]
>> *Sent:* Thursday, December 08, 2011 9:32 PM****
>>
>>
>> *To:* wink-user@incubator.apache.org
>> *Subject:* Re: Inconsistent Unmarshalling during Concurrent requests****
>>
>>  ****
>>
>> Yes, I did it many times.****
>>
>> With 200 threads it still worked fine.****
>>
>> With 500 some requests failed...****
>>
>> no idea what the problem is...****
>>
>> On Thu, Dec 8, 2011 at 5:56 PM, Kumar, Munirathnam <
>> munirathnam.kumar@hp.com> wrote:****
>>
>> Here is result again. There are failed results as well. Can you please re
>> run couple of times. ****
>>
>>  ****
>>
>> thread - 44 : Serialisation Passed****
>>
>> thread - 48 : Serialisation Passed****
>>
>> thread - 36 : Serialisation Passed****
>>
>> thread - 46 : Serialisation Passed****
>>
>> thread - 4 : Serialisation Passed****
>>
>> thread - 30 : Serialisation Passed****
>>
>> thread - 13 : Serialisation Passed****
>>
>> thread - 23 : Serialisation Passed****
>>
>> thread - 25 : Serialisation Failed****
>>
>> thread - 45 : Serialisation Failed****
>>
>> thread - 28 : Serialisation Passed****
>>
>> thread - 10 : Serialisation Passed****
>>
>> thread - 24 : Serialisation Failed****
>>
>> thread - 35 : Serialisation Passed****
>>
>> thread - 22 : Serialisation Failed****
>>
>> thread - 34 : Serialisation Passed****
>>
>> thread - 47 : Serialisation Passed****
>>
>> thread - 7 : Serialisation Passed****
>>
>> thread - 38 : Serialisation Failed****
>>
>> thread - 43 : Serialisation Failed****
>>
>> thread - 17 : Serialisation Passed****
>>
>> thread - 41 : Serialisation Failed****
>>
>> thread - 9 : Serialisation Failed****
>>
>> thread - 18 : Serialisation Failed****
>>
>> thread - 15 : Serialisation Passed****
>>
>> thread - 12 : Serialisation Failed****
>>
>> thread - 20 : Serialisation Passed****
>>
>> thread - 42 : Serialisation Passed****
>>
>> thread - 16 : Serialisation Passed****
>>
>> thread - 31 : Serialisation Passed****
>>
>> thread - 14 : Serialisation Failed****
>>
>> thread - 27 : Serialisation Failed****
>>
>> thread - 11 : Serialisation Passed****
>>
>> thread - 26 : Serialisation Failed****
>>
>> thread - 8 : Serialisation Failed****
>>
>> thread - 19 : Serialisation Passed****
>>
>> thread - 40 : Serialisation Passed****
>>
>> thread - 0 : Serialisation Passed****
>>
>> thread - 21 : Serialisation Passed****
>>
>> thread - 3 : Serialisation Failed****
>>
>> thread - 6 : Serialisation Passed****
>>
>> thread - 2 : Serialisation Passed****
>>
>> thread - 33 : Serialisation Failed****
>>
>> thread - 49 : Serialisation Passed****
>>
>> thread - 39 : Serialisation Failed****
>>
>> thread - 37 : Serialisation Passed****
>>
>> thread - 29 : Serialisation Passed****
>>
>> thread - 1 : Serialisation Passed****
>>
>> thread - 5 : Serialisation Passed****
>>
>> thread - 32 : Serialisation Failed****
>>
>>  ****
>>
>> *From:* Michael Elman [mailto:elman@apache.org]
>> *Sent:* Thursday, December 08, 2011 9:22 PM****
>>
>>
>> *To:* wink-user@incubator.apache.org
>> *Subject:* Re: Inconsistent Unmarshalling during Concurrent requests****
>>
>>  ****
>>
>> Tried to run your code. Everything looks fine:****
>>
>>  ****
>>
>> thread - 29 : Serialization Passed****
>>
>> thread - 0 : Serialization Passed****
>>
>> thread - 20 : Serialization Passed****
>>
>> thread - 9 : Serialization Passed****
>>
>> thread - 7 : Serialization Passed****
>>
>> thread - 38 : Serialization Passed****
>>
>> thread - 5 : Serialization Passed****
>>
>> thread - 37 : Serialization Passed****
>>
>> thread - 36 : Serialization Passed****
>>
>> thread - 25 : Serialization Passed****
>>
>> thread - 1 : Serialization Passed****
>>
>> thread - 13 : Serialization Passed****
>>
>> thread - 47 : Serialization Passed****
>>
>> thread - 4 : Serialization Passed****
>>
>> thread - 43 : Serialization Passed****
>>
>> thread - 22 : Serialization Passed****
>>
>> thread - 28 : Serialization Passed****
>>
>> thread - 17 : Serialization Passed****
>>
>> thread - 21 : Serialization Passed****
>>
>> thread - 33 : Serialization Passed****
>>
>> thread - 32 : Serialization Passed****
>>
>> thread - 30 : Serialization Passed****
>>
>> thread - 40 : Serialization Passed****
>>
>> thread - 39 : Serialization Passed****
>>
>> thread - 24 : Serialization Passed****
>>
>> thread - 35 : Serialization Passed****
>>
>> thread - 16 : Serialization Passed****
>>
>> thread - 31 : Serialization Passed****
>>
>> thread - 18 : Serialization Passed****
>>
>> thread - 44 : Serialization Passed****
>>
>> thread - 42 : Serialization Passed****
>>
>> thread - 34 : Serialization Passed****
>>
>> thread - 2 : Serialization Passed****
>>
>> thread - 10 : Serialization Passed****
>>
>> thread - 27 : Serialization Passed****
>>
>> thread - 19 : Serialization Passed****
>>
>> thread - 3 : Serialization Passed****
>>
>> thread - 49 : Serialization Passed****
>>
>> thread - 26 : Serialization Passed****
>>
>> thread - 46 : Serialization Passed****
>>
>> thread - 41 : Serialization Passed****
>>
>> thread - 8 : Serialization Passed****
>>
>> thread - 14 : Serialization Passed****
>>
>> thread - 23 : Serialization Passed****
>>
>> thread - 11 : Serialization Passed****
>>
>> thread - 6 : Serialization Passed****
>>
>> thread - 45 : Serialization Passed****
>>
>> thread - 48 : Serialization Passed****
>>
>> thread - 12 : Serialization Passed****
>>
>> thread - 15 : Serialization Passed****
>>
>>  ****
>>
>> On Thu, Dec 8, 2011 at 5:07 PM, Kumar, Munirathnam <
>> munirathnam.kumar@hp.com> wrote:****
>>
>> I have created new Instance for each thread but still I have the same
>> issue.****
>>
>>  ****
>>
>> RestClient client = new RestClient();****
>>
>>  ****
>>
>> for ( int i =0; i < 50 ; i ++ ){****
>>
>>              resource = client.resource("
>> http://localhost:8080/logger/test");****
>>
>>              new Thread(new Multi(resource),new
>> Integer(i).toString()).start();****
>>
>>          }****
>>
>>  ****
>>
>>  ****
>>
>> *From:* Michael Elman [mailto:elman@apache.org]
>> *Sent:* Thursday, December 08, 2011 8:11 PM
>> *To:* wink-user@incubator.apache.org
>> *Subject:* Re: Inconsistent Unmarshalling during Concurrent requests****
>>
>>  ****
>>
>> If I understand your code correctly, you reuse Resource instance on
>> multiple threads. ****
>>
>> But as I recall Resource is not threadsafe.****
>>
>> Just create a new instance each time, and it should be fine.****
>>
>> On Thu, Dec 8, 2011 at 4:05 PM, Kumar, Munirathnam <
>> munirathnam.kumar@hp.com> wrote:****
>>
>> Hi****
>>
>> I am requesting  Concurrent requests to a Resource.****
>>
>> But on the Resource, bean objects are not completely populated for some
>> request and gets populated completely for other requests.****
>>
>>  ****
>>
>> Please see the Client,Bean and Resource Class below.****
>>
>>  ****
>>
>> For few client request the *request.getSelectedOptions()* always returns
>> null . ****
>>
>>  ****
>>
>> Is this a bug with Wink ?****
>>
>>  ****
>>
>> Can you please help****
>>
>>  ****
>>
>> -          kumar****
>>
>>  ****
>>
>> Client ****
>>
>>  ****
>>
>> class Multi implements Runnable{    ****
>>
>>     Resource resource;****
>>
>>     String xml = "<UserSubscription>"****
>>
>>             +       "<selectedOptions><entry><key >Amount of Memory
>> (MB)</key><value >2000</value></entry>" +****
>>
>>                                            "<entry><key>Number of
>> CPUs</key><value>1</value></entry>" +****
>>
>>                                            "<entry><key>Number of
>> Servers</key><value>1</value></entry>"****
>>
>>             +      "</selectedOptions>"****
>>
>>             +   "</UserSubscription>";****
>>
>>     ****
>>
>>     Multi(Resource resource){****
>>
>>         this.resource = resource;****
>>
>>         ****
>>
>>     }****
>>
>>     public void run(){****
>>
>>              String res =
>> resource.contentType(MediaType.APPLICATION_XML).accept(MediaType.TEXT_PLAIN).post(String.class,xml);
>> ****
>>
>>              System.out.println("thread - " +
>> Thread.currentThread().getName() + " : " +  res);       ****
>>
>>     }****
>>
>> }****
>>
>>  ****
>>
>> Bean Class****
>>
>>  ****
>>
>> @XmlAccessorType(XmlAccessType.NONE)****
>>
>> @XmlRootElement(name = "UserSubscription")****
>>
>> public class ServiceRequest {****
>>
>>                 private Properties modelInputs;****
>>
>>  ****
>>
>>  ****
>>
>>                 public  void setSelectedOptions(Properties modelInputs) {
>> ****
>>
>>                                 this.modelInputs = modelInputs;****
>>
>>                 }****
>>
>>  ****
>>
>>                 @XmlElementWrapper(name = "selectedOptions", required =
>> true, nillable = false)****
>>
>>                 public  Properties getSelectedOptions() {****
>>
>>                                 return this.modelInputs;****
>>
>>                 }****
>>
>> }****
>>
>>  ****
>>
>>  ****
>>
>> Resource Class****
>>
>>  ****
>>
>> @Path("/test")****
>>
>> public class PropResource {****
>>
>>     ****
>>
>> @POST****
>>
>> @Consumes(MediaType.APPLICATION_XML)****
>>
>> @Produces(MediaType.TEXT_PLAIN)****
>>
>>     public Response getLogs(ServiceRequest request){****
>>
>>  ****
>>
>>     String res = "";****
>>
>>     if( request.getSelectedOptions() == null){               ****
>>
>>         res = "Serialization Failed";****
>>
>>     } else if(request.getSelectedOptions() != null ){        ****
>>
>>         res = "Serialization Passed";****
>>
>>     }    ****
>>
>>     return Response.ok(res).build();****
>>
>>     }****
>>
>>  ****
>>
>> }****
>>
>>  ****
>>
>>  ****
>>
>>  ****
>>
>>  ****
>>
>> ** **
>>
>
>

Re: Inconsistent Unmarshalling during Concurrent requests

Posted by Michael Elman <el...@apache.org>.
One more interesting test. I tried to run your test with Wink
1.1.1-incubating and with Wink 1.1.2-incubating.
1.1.1-incubating worked fine with 1000 concurrent threads.
1.1.2-incubating failed with 500.

So the problem was introduced in Wink 1.1.2-incubating.

On Sun, Dec 11, 2011 at 11:14 AM, Michael Elman <el...@apache.org> wrote:

> I have created a trivial JAXB Provider:
>
>   @Provider
>     @Consumes(MediaType.APPLICATION_XML)
>     @Produces(MediaType.APPLICATION_XML)
>     public class TrivialJaxbProvider implements MessageBodyReader<Object> {
>
>         @Override
>         public boolean isReadable(Class<?> type, Type genericType,
> Annotation[] annotations, MediaType mediaType) {
>
>             return true;
>         }
>
>         @Override
>         public Object readFrom(Class<Object> type, Type genericType,
> Annotation[] annotations, MediaType mediaType, MultivaluedMap<String,
> String> httpHeaders,
>                 InputStream entityStream) throws IOException,
> WebApplicationException {
>             try {
>                 return
> JAXBContext.newInstance(type).createUnmarshaller().unmarshal(entityStream);
>             } catch (JAXBException e) {
>                    throw new WebApplicationException(e);
>             }
>         }
>
>     }
>
> and used it for this test. It worked fine with 750 threads.
> So it seems that the bug is in a JAXB Provider.
>
> I'll try to find some time to look into it. Anyway, meanwhile you can use
> your own JAXB provider and it should work.
>
> On Fri, Dec 9, 2011 at 8:36 AM, Kumar, Munirathnam <
> munirathnam.kumar@hp.com> wrote:
>
>>  Test Scenario****
>>
>> Methodology****
>>
>> Status****
>>
>> No of threads used : 1000****
>>
>> Java SDK : 1.5****
>>
>> OS : Windows****
>>
>> JAXB on Server: jaxb 2.2****
>>
>> Wink : 1.3 ****
>>
>> ** **
>>
>> XML String : "<UserSubscription>"****
>>
>>             +       "<selectedOptions><entry><key >Amount of Memory
>> (MB)</key><value >2000</value></entry>" +****
>>
>>                                    "<entry><key>Number of
>> CPUs</key><value>1</value></entry>" +****
>>
>>                                    "<entry><key>Number of
>> Servers</key><value>1</value></entry>"****
>>
>>             +      "</selectedOptions>"****
>>
>>             +   "</UserSubscription>";****
>>
>> ** **
>>
>> Jaxb****
>>
>> Version : 2.2****
>>
>> JAXB Components jars were tested for Unmarshall issues.****
>>
>> Concurrent method invocation were exceuted to Unmarshall the xml file.***
>> *
>>
>> ** **
>>
>> Sample Code :****
>>
>> ** **
>>
>>         ServiceRequest request = (ServiceRequest)
>> context.createUnmarshaller().unmarshal( new
>> ByteArrayInputStream(xml.getbytes())); ****
>>
>> ** **
>>
>>         if ( request.getSelectedOptions() == null){****
>>
>>             System.out.println("thread - " +
>> Thread.currentThread().getName() + " : " + " ************** Unmarshal
>> failed ************* ");****
>>
>>         }****
>>
>> All test passed****
>>
>> Wink Resource ****
>>
>> @POST****
>>
>> @Consumes(MediaType.TEXT_PLAIN)****
>>
>> A Wink Resource was used to post the XML String. ****
>>
>> It was consumed using MediaType.TEXT_PLAIN****
>>
>> XML was Unmarshalled using JAXB to create  ServiceRequest object****
>>
>> ** **
>>
>> Sample Code:****
>>
>> ** **
>>
>> @POST****
>>
>> @Consumes(MediaType.TEXT_PLAIN)****
>>
>> @Produces(MediaType.TEXT_PLAIN)****
>>
>>     public Response getLogs(String xmlRequest){   ****
>>
>>     String res = "";****
>>
>>     try {****
>>
>>         ServiceRequest request = (ServiceRequest)
>> context.createUnmarshaller().unmarshal( new
>> ByteArrayInputStream(xmlRequest.getbytes())); ****
>>
>> ** **
>>
>>         if ( request.getSelectedOptions() == null){****
>>
>>             System.out.println(" ************** Unmarshal failed
>> ************* ");****
>>
>>         }****
>>
>> All test Passed****
>>
>> Wink Resource ****
>>
>> @POST****
>>
>> @Consumes(MediaType.* **APPLICATION_XML)*****
>>
>> A Wink Resource was used to post the XML String. ****
>>
>> It was consumed using ****
>>
>> MediaType.* APPLICATION_XML* ****
>>
>> ** **
>>
>> Sample code:****
>>
>> ** **
>>
>> @POST****
>>
>> @Consumes(MediaType.* APPLICATION_XML*)****
>>
>> ** **
>>
>>     public Response getLogs(ServiceRequest request){   ****
>>
>>     String res = "";****
>>
>> ** **
>>
>>         if ( request.getSelectedOptions() == null){****
>>
>>             System.out.println(" ************** Unmarshal failed
>> ************* ");****
>>
>>         }****
>>
>> Few threads failed with errors ****
>>
>> ** **
>>
>> ** **
>>
>> Thanks****
>>
>> Kumar****
>>
>> Cloud Services****
>>
>> ** **
>>
>> ** **
>>
>> *From:* Michael Elman [mailto:elman@apache.org]
>> *Sent:* Thursday, December 08, 2011 11:32 PM
>>
>> *To:* wink-user@incubator.apache.org
>> *Subject:* Re: Inconsistent Unmarshalling during Concurrent requests****
>>
>> ** **
>>
>> I guess so...
>> The question if it's a Wink bug, or may be JAXB...
>> If I have time next week, I'll try to look into it.
>>
>> Did you try to run the same scenario without JAXB? let's say sent plain
>> text and receive it?
>> Send JSON?
>>
>> I guess it can be interesting...****
>>
>> On Thu, Dec 8, 2011 at 6:17 PM, Kumar, Munirathnam <
>> munirathnam.kumar@hp.com> wrote:****
>>
>> Does this issue qualify for a bug ?****
>>
>>  ****
>>
>> *From:* Michael Elman [mailto:elman@apache.org]
>> *Sent:* Thursday, December 08, 2011 9:32 PM****
>>
>>
>> *To:* wink-user@incubator.apache.org
>> *Subject:* Re: Inconsistent Unmarshalling during Concurrent requests****
>>
>>  ****
>>
>> Yes, I did it many times.****
>>
>> With 200 threads it still worked fine.****
>>
>> With 500 some requests failed...****
>>
>> no idea what the problem is...****
>>
>> On Thu, Dec 8, 2011 at 5:56 PM, Kumar, Munirathnam <
>> munirathnam.kumar@hp.com> wrote:****
>>
>> Here is result again. There are failed results as well. Can you please re
>> run couple of times. ****
>>
>>  ****
>>
>> thread - 44 : Serialisation Passed****
>>
>> thread - 48 : Serialisation Passed****
>>
>> thread - 36 : Serialisation Passed****
>>
>> thread - 46 : Serialisation Passed****
>>
>> thread - 4 : Serialisation Passed****
>>
>> thread - 30 : Serialisation Passed****
>>
>> thread - 13 : Serialisation Passed****
>>
>> thread - 23 : Serialisation Passed****
>>
>> thread - 25 : Serialisation Failed****
>>
>> thread - 45 : Serialisation Failed****
>>
>> thread - 28 : Serialisation Passed****
>>
>> thread - 10 : Serialisation Passed****
>>
>> thread - 24 : Serialisation Failed****
>>
>> thread - 35 : Serialisation Passed****
>>
>> thread - 22 : Serialisation Failed****
>>
>> thread - 34 : Serialisation Passed****
>>
>> thread - 47 : Serialisation Passed****
>>
>> thread - 7 : Serialisation Passed****
>>
>> thread - 38 : Serialisation Failed****
>>
>> thread - 43 : Serialisation Failed****
>>
>> thread - 17 : Serialisation Passed****
>>
>> thread - 41 : Serialisation Failed****
>>
>> thread - 9 : Serialisation Failed****
>>
>> thread - 18 : Serialisation Failed****
>>
>> thread - 15 : Serialisation Passed****
>>
>> thread - 12 : Serialisation Failed****
>>
>> thread - 20 : Serialisation Passed****
>>
>> thread - 42 : Serialisation Passed****
>>
>> thread - 16 : Serialisation Passed****
>>
>> thread - 31 : Serialisation Passed****
>>
>> thread - 14 : Serialisation Failed****
>>
>> thread - 27 : Serialisation Failed****
>>
>> thread - 11 : Serialisation Passed****
>>
>> thread - 26 : Serialisation Failed****
>>
>> thread - 8 : Serialisation Failed****
>>
>> thread - 19 : Serialisation Passed****
>>
>> thread - 40 : Serialisation Passed****
>>
>> thread - 0 : Serialisation Passed****
>>
>> thread - 21 : Serialisation Passed****
>>
>> thread - 3 : Serialisation Failed****
>>
>> thread - 6 : Serialisation Passed****
>>
>> thread - 2 : Serialisation Passed****
>>
>> thread - 33 : Serialisation Failed****
>>
>> thread - 49 : Serialisation Passed****
>>
>> thread - 39 : Serialisation Failed****
>>
>> thread - 37 : Serialisation Passed****
>>
>> thread - 29 : Serialisation Passed****
>>
>> thread - 1 : Serialisation Passed****
>>
>> thread - 5 : Serialisation Passed****
>>
>> thread - 32 : Serialisation Failed****
>>
>>  ****
>>
>> *From:* Michael Elman [mailto:elman@apache.org]
>> *Sent:* Thursday, December 08, 2011 9:22 PM****
>>
>>
>> *To:* wink-user@incubator.apache.org
>> *Subject:* Re: Inconsistent Unmarshalling during Concurrent requests****
>>
>>  ****
>>
>> Tried to run your code. Everything looks fine:****
>>
>>  ****
>>
>> thread - 29 : Serialization Passed****
>>
>> thread - 0 : Serialization Passed****
>>
>> thread - 20 : Serialization Passed****
>>
>> thread - 9 : Serialization Passed****
>>
>> thread - 7 : Serialization Passed****
>>
>> thread - 38 : Serialization Passed****
>>
>> thread - 5 : Serialization Passed****
>>
>> thread - 37 : Serialization Passed****
>>
>> thread - 36 : Serialization Passed****
>>
>> thread - 25 : Serialization Passed****
>>
>> thread - 1 : Serialization Passed****
>>
>> thread - 13 : Serialization Passed****
>>
>> thread - 47 : Serialization Passed****
>>
>> thread - 4 : Serialization Passed****
>>
>> thread - 43 : Serialization Passed****
>>
>> thread - 22 : Serialization Passed****
>>
>> thread - 28 : Serialization Passed****
>>
>> thread - 17 : Serialization Passed****
>>
>> thread - 21 : Serialization Passed****
>>
>> thread - 33 : Serialization Passed****
>>
>> thread - 32 : Serialization Passed****
>>
>> thread - 30 : Serialization Passed****
>>
>> thread - 40 : Serialization Passed****
>>
>> thread - 39 : Serialization Passed****
>>
>> thread - 24 : Serialization Passed****
>>
>> thread - 35 : Serialization Passed****
>>
>> thread - 16 : Serialization Passed****
>>
>> thread - 31 : Serialization Passed****
>>
>> thread - 18 : Serialization Passed****
>>
>> thread - 44 : Serialization Passed****
>>
>> thread - 42 : Serialization Passed****
>>
>> thread - 34 : Serialization Passed****
>>
>> thread - 2 : Serialization Passed****
>>
>> thread - 10 : Serialization Passed****
>>
>> thread - 27 : Serialization Passed****
>>
>> thread - 19 : Serialization Passed****
>>
>> thread - 3 : Serialization Passed****
>>
>> thread - 49 : Serialization Passed****
>>
>> thread - 26 : Serialization Passed****
>>
>> thread - 46 : Serialization Passed****
>>
>> thread - 41 : Serialization Passed****
>>
>> thread - 8 : Serialization Passed****
>>
>> thread - 14 : Serialization Passed****
>>
>> thread - 23 : Serialization Passed****
>>
>> thread - 11 : Serialization Passed****
>>
>> thread - 6 : Serialization Passed****
>>
>> thread - 45 : Serialization Passed****
>>
>> thread - 48 : Serialization Passed****
>>
>> thread - 12 : Serialization Passed****
>>
>> thread - 15 : Serialization Passed****
>>
>>  ****
>>
>> On Thu, Dec 8, 2011 at 5:07 PM, Kumar, Munirathnam <
>> munirathnam.kumar@hp.com> wrote:****
>>
>> I have created new Instance for each thread but still I have the same
>> issue.****
>>
>>  ****
>>
>> RestClient client = new RestClient();****
>>
>>  ****
>>
>> for ( int i =0; i < 50 ; i ++ ){****
>>
>>              resource = client.resource("
>> http://localhost:8080/logger/test");****
>>
>>              new Thread(new Multi(resource),new
>> Integer(i).toString()).start();****
>>
>>          }****
>>
>>  ****
>>
>>  ****
>>
>> *From:* Michael Elman [mailto:elman@apache.org]
>> *Sent:* Thursday, December 08, 2011 8:11 PM
>> *To:* wink-user@incubator.apache.org
>> *Subject:* Re: Inconsistent Unmarshalling during Concurrent requests****
>>
>>  ****
>>
>> If I understand your code correctly, you reuse Resource instance on
>> multiple threads. ****
>>
>> But as I recall Resource is not threadsafe.****
>>
>> Just create a new instance each time, and it should be fine.****
>>
>> On Thu, Dec 8, 2011 at 4:05 PM, Kumar, Munirathnam <
>> munirathnam.kumar@hp.com> wrote:****
>>
>> Hi****
>>
>> I am requesting  Concurrent requests to a Resource.****
>>
>> But on the Resource, bean objects are not completely populated for some
>> request and gets populated completely for other requests.****
>>
>>  ****
>>
>> Please see the Client,Bean and Resource Class below.****
>>
>>  ****
>>
>> For few client request the *request.getSelectedOptions()* always returns
>> null . ****
>>
>>  ****
>>
>> Is this a bug with Wink ?****
>>
>>  ****
>>
>> Can you please help****
>>
>>  ****
>>
>> -          kumar****
>>
>>  ****
>>
>> Client ****
>>
>>  ****
>>
>> class Multi implements Runnable{    ****
>>
>>     Resource resource;****
>>
>>     String xml = "<UserSubscription>"****
>>
>>             +       "<selectedOptions><entry><key >Amount of Memory
>> (MB)</key><value >2000</value></entry>" +****
>>
>>                                            "<entry><key>Number of
>> CPUs</key><value>1</value></entry>" +****
>>
>>                                            "<entry><key>Number of
>> Servers</key><value>1</value></entry>"****
>>
>>             +      "</selectedOptions>"****
>>
>>             +   "</UserSubscription>";****
>>
>>     ****
>>
>>     Multi(Resource resource){****
>>
>>         this.resource = resource;****
>>
>>         ****
>>
>>     }****
>>
>>     public void run(){****
>>
>>              String res =
>> resource.contentType(MediaType.APPLICATION_XML).accept(MediaType.TEXT_PLAIN).post(String.class,xml);
>> ****
>>
>>              System.out.println("thread - " +
>> Thread.currentThread().getName() + " : " +  res);       ****
>>
>>     }****
>>
>> }****
>>
>>  ****
>>
>> Bean Class****
>>
>>  ****
>>
>> @XmlAccessorType(XmlAccessType.NONE)****
>>
>> @XmlRootElement(name = "UserSubscription")****
>>
>> public class ServiceRequest {****
>>
>>                 private Properties modelInputs;****
>>
>>  ****
>>
>>  ****
>>
>>                 public  void setSelectedOptions(Properties modelInputs) {
>> ****
>>
>>                                 this.modelInputs = modelInputs;****
>>
>>                 }****
>>
>>  ****
>>
>>                 @XmlElementWrapper(name = "selectedOptions", required =
>> true, nillable = false)****
>>
>>                 public  Properties getSelectedOptions() {****
>>
>>                                 return this.modelInputs;****
>>
>>                 }****
>>
>> }****
>>
>>  ****
>>
>>  ****
>>
>> Resource Class****
>>
>>  ****
>>
>> @Path("/test")****
>>
>> public class PropResource {****
>>
>>     ****
>>
>> @POST****
>>
>> @Consumes(MediaType.APPLICATION_XML)****
>>
>> @Produces(MediaType.TEXT_PLAIN)****
>>
>>     public Response getLogs(ServiceRequest request){****
>>
>>  ****
>>
>>     String res = "";****
>>
>>     if( request.getSelectedOptions() == null){               ****
>>
>>         res = "Serialization Failed";****
>>
>>     } else if(request.getSelectedOptions() != null ){        ****
>>
>>         res = "Serialization Passed";****
>>
>>     }    ****
>>
>>     return Response.ok(res).build();****
>>
>>     }****
>>
>>  ****
>>
>> }****
>>
>>  ****
>>
>>  ****
>>
>>  ****
>>
>>  ****
>>
>> ** **
>>
>
>

Re: Inconsistent Unmarshalling during Concurrent requests

Posted by Michael Elman <el...@apache.org>.
I have created a trivial JAXB Provider:

  @Provider
    @Consumes(MediaType.APPLICATION_XML)
    @Produces(MediaType.APPLICATION_XML)
    public class TrivialJaxbProvider implements MessageBodyReader<Object> {

        @Override
        public boolean isReadable(Class<?> type, Type genericType,
Annotation[] annotations, MediaType mediaType) {

            return true;
        }

        @Override
        public Object readFrom(Class<Object> type, Type genericType,
Annotation[] annotations, MediaType mediaType, MultivaluedMap<String,
String> httpHeaders,
                InputStream entityStream) throws IOException,
WebApplicationException {
            try {
                return
JAXBContext.newInstance(type).createUnmarshaller().unmarshal(entityStream);
            } catch (JAXBException e) {
                   throw new WebApplicationException(e);
            }
        }

    }

and used it for this test. It worked fine with 750 threads.
So it seems that the bug is in a JAXB Provider.

I'll try to find some time to look into it. Anyway, meanwhile you can use
your own JAXB provider and it should work.

On Fri, Dec 9, 2011 at 8:36 AM, Kumar, Munirathnam <munirathnam.kumar@hp.com
> wrote:

> Test Scenario****
>
> Methodology****
>
> Status****
>
> No of threads used : 1000****
>
> Java SDK : 1.5****
>
> OS : Windows****
>
> JAXB on Server: jaxb 2.2****
>
> Wink : 1.3 ****
>
> ** **
>
> XML String : "<UserSubscription>"****
>
>             +       "<selectedOptions><entry><key >Amount of Memory
> (MB)</key><value >2000</value></entry>" +****
>
>                                    "<entry><key>Number of
> CPUs</key><value>1</value></entry>" +****
>
>                                    "<entry><key>Number of
> Servers</key><value>1</value></entry>"****
>
>             +      "</selectedOptions>"****
>
>             +   "</UserSubscription>";****
>
> ** **
>
> Jaxb****
>
> Version : 2.2****
>
> JAXB Components jars were tested for Unmarshall issues.****
>
> Concurrent method invocation were exceuted to Unmarshall the xml file.****
>
> ** **
>
> Sample Code :****
>
> ** **
>
>         ServiceRequest request = (ServiceRequest)
> context.createUnmarshaller().unmarshal( new
> ByteArrayInputStream(xml.getbytes())); ****
>
> ** **
>
>         if ( request.getSelectedOptions() == null){****
>
>             System.out.println("thread - " +
> Thread.currentThread().getName() + " : " + " ************** Unmarshal
> failed ************* ");****
>
>         }****
>
> All test passed****
>
> Wink Resource ****
>
> @POST****
>
> @Consumes(MediaType.TEXT_PLAIN)****
>
> A Wink Resource was used to post the XML String. ****
>
> It was consumed using MediaType.TEXT_PLAIN****
>
> XML was Unmarshalled using JAXB to create  ServiceRequest object****
>
> ** **
>
> Sample Code:****
>
> ** **
>
> @POST****
>
> @Consumes(MediaType.TEXT_PLAIN)****
>
> @Produces(MediaType.TEXT_PLAIN)****
>
>     public Response getLogs(String xmlRequest){   ****
>
>     String res = "";****
>
>     try {****
>
>         ServiceRequest request = (ServiceRequest)
> context.createUnmarshaller().unmarshal( new
> ByteArrayInputStream(xmlRequest.getbytes())); ****
>
> ** **
>
>         if ( request.getSelectedOptions() == null){****
>
>             System.out.println(" ************** Unmarshal failed
> ************* ");****
>
>         }****
>
> All test Passed****
>
> Wink Resource ****
>
> @POST****
>
> @Consumes(MediaType.* **APPLICATION_XML)*****
>
> A Wink Resource was used to post the XML String. ****
>
> It was consumed using ****
>
> MediaType.* APPLICATION_XML* ****
>
> ** **
>
> Sample code:****
>
> ** **
>
> @POST****
>
> @Consumes(MediaType.* APPLICATION_XML*)****
>
> ** **
>
>     public Response getLogs(ServiceRequest request){   ****
>
>     String res = "";****
>
> ** **
>
>         if ( request.getSelectedOptions() == null){****
>
>             System.out.println(" ************** Unmarshal failed
> ************* ");****
>
>         }****
>
> Few threads failed with errors ****
>
> ** **
>
> ** **
>
> Thanks****
>
> Kumar****
>
> Cloud Services****
>
> ** **
>
> ** **
>
> *From:* Michael Elman [mailto:elman@apache.org]
> *Sent:* Thursday, December 08, 2011 11:32 PM
>
> *To:* wink-user@incubator.apache.org
> *Subject:* Re: Inconsistent Unmarshalling during Concurrent requests****
>
> ** **
>
> I guess so...
> The question if it's a Wink bug, or may be JAXB...
> If I have time next week, I'll try to look into it.
>
> Did you try to run the same scenario without JAXB? let's say sent plain
> text and receive it?
> Send JSON?
>
> I guess it can be interesting...****
>
> On Thu, Dec 8, 2011 at 6:17 PM, Kumar, Munirathnam <
> munirathnam.kumar@hp.com> wrote:****
>
> Does this issue qualify for a bug ?****
>
>  ****
>
> *From:* Michael Elman [mailto:elman@apache.org]
> *Sent:* Thursday, December 08, 2011 9:32 PM****
>
>
> *To:* wink-user@incubator.apache.org
> *Subject:* Re: Inconsistent Unmarshalling during Concurrent requests****
>
>  ****
>
> Yes, I did it many times.****
>
> With 200 threads it still worked fine.****
>
> With 500 some requests failed...****
>
> no idea what the problem is...****
>
> On Thu, Dec 8, 2011 at 5:56 PM, Kumar, Munirathnam <
> munirathnam.kumar@hp.com> wrote:****
>
> Here is result again. There are failed results as well. Can you please re
> run couple of times. ****
>
>  ****
>
> thread - 44 : Serialisation Passed****
>
> thread - 48 : Serialisation Passed****
>
> thread - 36 : Serialisation Passed****
>
> thread - 46 : Serialisation Passed****
>
> thread - 4 : Serialisation Passed****
>
> thread - 30 : Serialisation Passed****
>
> thread - 13 : Serialisation Passed****
>
> thread - 23 : Serialisation Passed****
>
> thread - 25 : Serialisation Failed****
>
> thread - 45 : Serialisation Failed****
>
> thread - 28 : Serialisation Passed****
>
> thread - 10 : Serialisation Passed****
>
> thread - 24 : Serialisation Failed****
>
> thread - 35 : Serialisation Passed****
>
> thread - 22 : Serialisation Failed****
>
> thread - 34 : Serialisation Passed****
>
> thread - 47 : Serialisation Passed****
>
> thread - 7 : Serialisation Passed****
>
> thread - 38 : Serialisation Failed****
>
> thread - 43 : Serialisation Failed****
>
> thread - 17 : Serialisation Passed****
>
> thread - 41 : Serialisation Failed****
>
> thread - 9 : Serialisation Failed****
>
> thread - 18 : Serialisation Failed****
>
> thread - 15 : Serialisation Passed****
>
> thread - 12 : Serialisation Failed****
>
> thread - 20 : Serialisation Passed****
>
> thread - 42 : Serialisation Passed****
>
> thread - 16 : Serialisation Passed****
>
> thread - 31 : Serialisation Passed****
>
> thread - 14 : Serialisation Failed****
>
> thread - 27 : Serialisation Failed****
>
> thread - 11 : Serialisation Passed****
>
> thread - 26 : Serialisation Failed****
>
> thread - 8 : Serialisation Failed****
>
> thread - 19 : Serialisation Passed****
>
> thread - 40 : Serialisation Passed****
>
> thread - 0 : Serialisation Passed****
>
> thread - 21 : Serialisation Passed****
>
> thread - 3 : Serialisation Failed****
>
> thread - 6 : Serialisation Passed****
>
> thread - 2 : Serialisation Passed****
>
> thread - 33 : Serialisation Failed****
>
> thread - 49 : Serialisation Passed****
>
> thread - 39 : Serialisation Failed****
>
> thread - 37 : Serialisation Passed****
>
> thread - 29 : Serialisation Passed****
>
> thread - 1 : Serialisation Passed****
>
> thread - 5 : Serialisation Passed****
>
> thread - 32 : Serialisation Failed****
>
>  ****
>
> *From:* Michael Elman [mailto:elman@apache.org]
> *Sent:* Thursday, December 08, 2011 9:22 PM****
>
>
> *To:* wink-user@incubator.apache.org
> *Subject:* Re: Inconsistent Unmarshalling during Concurrent requests****
>
>  ****
>
> Tried to run your code. Everything looks fine:****
>
>  ****
>
> thread - 29 : Serialization Passed****
>
> thread - 0 : Serialization Passed****
>
> thread - 20 : Serialization Passed****
>
> thread - 9 : Serialization Passed****
>
> thread - 7 : Serialization Passed****
>
> thread - 38 : Serialization Passed****
>
> thread - 5 : Serialization Passed****
>
> thread - 37 : Serialization Passed****
>
> thread - 36 : Serialization Passed****
>
> thread - 25 : Serialization Passed****
>
> thread - 1 : Serialization Passed****
>
> thread - 13 : Serialization Passed****
>
> thread - 47 : Serialization Passed****
>
> thread - 4 : Serialization Passed****
>
> thread - 43 : Serialization Passed****
>
> thread - 22 : Serialization Passed****
>
> thread - 28 : Serialization Passed****
>
> thread - 17 : Serialization Passed****
>
> thread - 21 : Serialization Passed****
>
> thread - 33 : Serialization Passed****
>
> thread - 32 : Serialization Passed****
>
> thread - 30 : Serialization Passed****
>
> thread - 40 : Serialization Passed****
>
> thread - 39 : Serialization Passed****
>
> thread - 24 : Serialization Passed****
>
> thread - 35 : Serialization Passed****
>
> thread - 16 : Serialization Passed****
>
> thread - 31 : Serialization Passed****
>
> thread - 18 : Serialization Passed****
>
> thread - 44 : Serialization Passed****
>
> thread - 42 : Serialization Passed****
>
> thread - 34 : Serialization Passed****
>
> thread - 2 : Serialization Passed****
>
> thread - 10 : Serialization Passed****
>
> thread - 27 : Serialization Passed****
>
> thread - 19 : Serialization Passed****
>
> thread - 3 : Serialization Passed****
>
> thread - 49 : Serialization Passed****
>
> thread - 26 : Serialization Passed****
>
> thread - 46 : Serialization Passed****
>
> thread - 41 : Serialization Passed****
>
> thread - 8 : Serialization Passed****
>
> thread - 14 : Serialization Passed****
>
> thread - 23 : Serialization Passed****
>
> thread - 11 : Serialization Passed****
>
> thread - 6 : Serialization Passed****
>
> thread - 45 : Serialization Passed****
>
> thread - 48 : Serialization Passed****
>
> thread - 12 : Serialization Passed****
>
> thread - 15 : Serialization Passed****
>
>  ****
>
> On Thu, Dec 8, 2011 at 5:07 PM, Kumar, Munirathnam <
> munirathnam.kumar@hp.com> wrote:****
>
> I have created new Instance for each thread but still I have the same
> issue.****
>
>  ****
>
> RestClient client = new RestClient();****
>
>  ****
>
> for ( int i =0; i < 50 ; i ++ ){****
>
>              resource = client.resource("http://localhost:8080/logger/test
> ");****
>
>              new Thread(new Multi(resource),new
> Integer(i).toString()).start();****
>
>          }****
>
>  ****
>
>  ****
>
> *From:* Michael Elman [mailto:elman@apache.org]
> *Sent:* Thursday, December 08, 2011 8:11 PM
> *To:* wink-user@incubator.apache.org
> *Subject:* Re: Inconsistent Unmarshalling during Concurrent requests****
>
>  ****
>
> If I understand your code correctly, you reuse Resource instance on
> multiple threads. ****
>
> But as I recall Resource is not threadsafe.****
>
> Just create a new instance each time, and it should be fine.****
>
> On Thu, Dec 8, 2011 at 4:05 PM, Kumar, Munirathnam <
> munirathnam.kumar@hp.com> wrote:****
>
> Hi****
>
> I am requesting  Concurrent requests to a Resource.****
>
> But on the Resource, bean objects are not completely populated for some
> request and gets populated completely for other requests.****
>
>  ****
>
> Please see the Client,Bean and Resource Class below.****
>
>  ****
>
> For few client request the *request.getSelectedOptions()* always returns
> null . ****
>
>  ****
>
> Is this a bug with Wink ?****
>
>  ****
>
> Can you please help****
>
>  ****
>
> -          kumar****
>
>  ****
>
> Client ****
>
>  ****
>
> class Multi implements Runnable{    ****
>
>     Resource resource;****
>
>     String xml = "<UserSubscription>"****
>
>             +       "<selectedOptions><entry><key >Amount of Memory
> (MB)</key><value >2000</value></entry>" +****
>
>                                            "<entry><key>Number of
> CPUs</key><value>1</value></entry>" +****
>
>                                            "<entry><key>Number of
> Servers</key><value>1</value></entry>"****
>
>             +      "</selectedOptions>"****
>
>             +   "</UserSubscription>";****
>
>     ****
>
>     Multi(Resource resource){****
>
>         this.resource = resource;****
>
>         ****
>
>     }****
>
>     public void run(){****
>
>              String res =
> resource.contentType(MediaType.APPLICATION_XML).accept(MediaType.TEXT_PLAIN).post(String.class,xml);
> ****
>
>              System.out.println("thread - " +
> Thread.currentThread().getName() + " : " +  res);       ****
>
>     }****
>
> }****
>
>  ****
>
> Bean Class****
>
>  ****
>
> @XmlAccessorType(XmlAccessType.NONE)****
>
> @XmlRootElement(name = "UserSubscription")****
>
> public class ServiceRequest {****
>
>                 private Properties modelInputs;****
>
>  ****
>
>  ****
>
>                 public  void setSelectedOptions(Properties modelInputs) {*
> ***
>
>                                 this.modelInputs = modelInputs;****
>
>                 }****
>
>  ****
>
>                 @XmlElementWrapper(name = "selectedOptions", required =
> true, nillable = false)****
>
>                 public  Properties getSelectedOptions() {****
>
>                                 return this.modelInputs;****
>
>                 }****
>
> }****
>
>  ****
>
>  ****
>
> Resource Class****
>
>  ****
>
> @Path("/test")****
>
> public class PropResource {****
>
>     ****
>
> @POST****
>
> @Consumes(MediaType.APPLICATION_XML)****
>
> @Produces(MediaType.TEXT_PLAIN)****
>
>     public Response getLogs(ServiceRequest request){****
>
>  ****
>
>     String res = "";****
>
>     if( request.getSelectedOptions() == null){               ****
>
>         res = "Serialization Failed";****
>
>     } else if(request.getSelectedOptions() != null ){        ****
>
>         res = "Serialization Passed";****
>
>     }    ****
>
>     return Response.ok(res).build();****
>
>     }****
>
>  ****
>
> }****
>
>  ****
>
>  ****
>
>  ****
>
>  ****
>
> ** **
>

RE: Inconsistent Unmarshalling during Concurrent requests

Posted by "Kumar, Munirathnam" <mu...@hp.com>.
Test Scenario

Methodology

Status

No of threads used : 1000
Java SDK : 1.5
OS : Windows
JAXB on Server: jaxb 2.2
Wink : 1.3

XML String : "<UserSubscription>"
            +       "<selectedOptions><entry><key >Amount of Memory (MB)</key><value >2000</value></entry>" +
                                   "<entry><key>Number of CPUs</key><value>1</value></entry>" +
                                   "<entry><key>Number of Servers</key><value>1</value></entry>"
            +      "</selectedOptions>"
            +   "</UserSubscription>";


Jaxb
Version : 2.2

JAXB Components jars were tested for Unmarshall issues.
Concurrent method invocation were exceuted to Unmarshall the xml file.

Sample Code :

        ServiceRequest request = (ServiceRequest) context.createUnmarshaller().unmarshal( new ByteArrayInputStream(xml.getbytes()));

        if ( request.getSelectedOptions() == null){
            System.out.println("thread - " + Thread.currentThread().getName() + " : " + " ************** Unmarshal failed ************* ");
        }

All test passed

Wink Resource
@POST
@Consumes(MediaType.TEXT_PLAIN)

A Wink Resource was used to post the XML String.
It was consumed using MediaType.TEXT_PLAIN
XML was Unmarshalled using JAXB to create  ServiceRequest object

Sample Code:

@POST
@Consumes(MediaType.TEXT_PLAIN)
@Produces(MediaType.TEXT_PLAIN)
    public Response getLogs(String xmlRequest){
    String res = "";
    try {
        ServiceRequest request = (ServiceRequest) context.createUnmarshaller().unmarshal( new ByteArrayInputStream(xmlRequest.getbytes()));

        if ( request.getSelectedOptions() == null){
            System.out.println(" ************** Unmarshal failed ************* ");
        }

All test Passed

Wink Resource
@POST
@Consumes(MediaType. APPLICATION_XML)

A Wink Resource was used to post the XML String.
It was consumed using
MediaType. APPLICATION_XML

Sample code:

@POST
@Consumes(MediaType. APPLICATION_XML)

    public Response getLogs(ServiceRequest request){
    String res = "";

        if ( request.getSelectedOptions() == null){
            System.out.println(" ************** Unmarshal failed ************* ");
        }

Few threads failed with errors



Thanks
Kumar
Cloud Services


From: Michael Elman [mailto:elman@apache.org]
Sent: Thursday, December 08, 2011 11:32 PM
To: wink-user@incubator.apache.org
Subject: Re: Inconsistent Unmarshalling during Concurrent requests

I guess so...
The question if it's a Wink bug, or may be JAXB...
If I have time next week, I'll try to look into it.

Did you try to run the same scenario without JAXB? let's say sent plain text and receive it?
Send JSON?

I guess it can be interesting...
On Thu, Dec 8, 2011 at 6:17 PM, Kumar, Munirathnam <mu...@hp.com>> wrote:
Does this issue qualify for a bug ?

From: Michael Elman [mailto:elman@apache.org<ma...@apache.org>]
Sent: Thursday, December 08, 2011 9:32 PM

To: wink-user@incubator.apache.org<ma...@incubator.apache.org>
Subject: Re: Inconsistent Unmarshalling during Concurrent requests

Yes, I did it many times.
With 200 threads it still worked fine.
With 500 some requests failed...
no idea what the problem is...
On Thu, Dec 8, 2011 at 5:56 PM, Kumar, Munirathnam <mu...@hp.com>> wrote:
Here is result again. There are failed results as well. Can you please re run couple of times.

thread - 44 : Serialisation Passed
thread - 48 : Serialisation Passed
thread - 36 : Serialisation Passed
thread - 46 : Serialisation Passed
thread - 4 : Serialisation Passed
thread - 30 : Serialisation Passed
thread - 13 : Serialisation Passed
thread - 23 : Serialisation Passed
thread - 25 : Serialisation Failed
thread - 45 : Serialisation Failed
thread - 28 : Serialisation Passed
thread - 10 : Serialisation Passed
thread - 24 : Serialisation Failed
thread - 35 : Serialisation Passed
thread - 22 : Serialisation Failed
thread - 34 : Serialisation Passed
thread - 47 : Serialisation Passed
thread - 7 : Serialisation Passed
thread - 38 : Serialisation Failed
thread - 43 : Serialisation Failed
thread - 17 : Serialisation Passed
thread - 41 : Serialisation Failed
thread - 9 : Serialisation Failed
thread - 18 : Serialisation Failed
thread - 15 : Serialisation Passed
thread - 12 : Serialisation Failed
thread - 20 : Serialisation Passed
thread - 42 : Serialisation Passed
thread - 16 : Serialisation Passed
thread - 31 : Serialisation Passed
thread - 14 : Serialisation Failed
thread - 27 : Serialisation Failed
thread - 11 : Serialisation Passed
thread - 26 : Serialisation Failed
thread - 8 : Serialisation Failed
thread - 19 : Serialisation Passed
thread - 40 : Serialisation Passed
thread - 0 : Serialisation Passed
thread - 21 : Serialisation Passed
thread - 3 : Serialisation Failed
thread - 6 : Serialisation Passed
thread - 2 : Serialisation Passed
thread - 33 : Serialisation Failed
thread - 49 : Serialisation Passed
thread - 39 : Serialisation Failed
thread - 37 : Serialisation Passed
thread - 29 : Serialisation Passed
thread - 1 : Serialisation Passed
thread - 5 : Serialisation Passed
thread - 32 : Serialisation Failed

From: Michael Elman [mailto:elman@apache.org<ma...@apache.org>]
Sent: Thursday, December 08, 2011 9:22 PM

To: wink-user@incubator.apache.org<ma...@incubator.apache.org>
Subject: Re: Inconsistent Unmarshalling during Concurrent requests

Tried to run your code. Everything looks fine:

thread - 29 : Serialization Passed
thread - 0 : Serialization Passed
thread - 20 : Serialization Passed
thread - 9 : Serialization Passed
thread - 7 : Serialization Passed
thread - 38 : Serialization Passed
thread - 5 : Serialization Passed
thread - 37 : Serialization Passed
thread - 36 : Serialization Passed
thread - 25 : Serialization Passed
thread - 1 : Serialization Passed
thread - 13 : Serialization Passed
thread - 47 : Serialization Passed
thread - 4 : Serialization Passed
thread - 43 : Serialization Passed
thread - 22 : Serialization Passed
thread - 28 : Serialization Passed
thread - 17 : Serialization Passed
thread - 21 : Serialization Passed
thread - 33 : Serialization Passed
thread - 32 : Serialization Passed
thread - 30 : Serialization Passed
thread - 40 : Serialization Passed
thread - 39 : Serialization Passed
thread - 24 : Serialization Passed
thread - 35 : Serialization Passed
thread - 16 : Serialization Passed
thread - 31 : Serialization Passed
thread - 18 : Serialization Passed
thread - 44 : Serialization Passed
thread - 42 : Serialization Passed
thread - 34 : Serialization Passed
thread - 2 : Serialization Passed
thread - 10 : Serialization Passed
thread - 27 : Serialization Passed
thread - 19 : Serialization Passed
thread - 3 : Serialization Passed
thread - 49 : Serialization Passed
thread - 26 : Serialization Passed
thread - 46 : Serialization Passed
thread - 41 : Serialization Passed
thread - 8 : Serialization Passed
thread - 14 : Serialization Passed
thread - 23 : Serialization Passed
thread - 11 : Serialization Passed
thread - 6 : Serialization Passed
thread - 45 : Serialization Passed
thread - 48 : Serialization Passed
thread - 12 : Serialization Passed
thread - 15 : Serialization Passed

On Thu, Dec 8, 2011 at 5:07 PM, Kumar, Munirathnam <mu...@hp.com>> wrote:
I have created new Instance for each thread but still I have the same issue.

RestClient client = new RestClient();

for ( int i =0; i < 50 ; i ++ ){
             resource = client.resource("http://localhost:8080/logger/test");
             new Thread(new Multi(resource),new Integer(i).toString()).start();
         }


From: Michael Elman [mailto:elman@apache.org<ma...@apache.org>]
Sent: Thursday, December 08, 2011 8:11 PM
To: wink-user@incubator.apache.org<ma...@incubator.apache.org>
Subject: Re: Inconsistent Unmarshalling during Concurrent requests

If I understand your code correctly, you reuse Resource instance on multiple threads.
But as I recall Resource is not threadsafe.
Just create a new instance each time, and it should be fine.
On Thu, Dec 8, 2011 at 4:05 PM, Kumar, Munirathnam <mu...@hp.com>> wrote:
Hi
I am requesting  Concurrent requests to a Resource.
But on the Resource, bean objects are not completely populated for some request and gets populated completely for other requests.

Please see the Client,Bean and Resource Class below.

For few client request the request.getSelectedOptions() always returns null .

Is this a bug with Wink ?

Can you please help


-          kumar

Client

class Multi implements Runnable{
    Resource resource;
    String xml = "<UserSubscription>"
            +       "<selectedOptions><entry><key >Amount of Memory (MB)</key><value >2000</value></entry>" +
                                           "<entry><key>Number of CPUs</key><value>1</value></entry>" +
                                           "<entry><key>Number of Servers</key><value>1</value></entry>"
            +      "</selectedOptions>"
            +   "</UserSubscription>";

    Multi(Resource resource){
        this.resource = resource;

    }
    public void run(){
             String res = resource.contentType(MediaType.APPLICATION_XML).accept(MediaType.TEXT_PLAIN).post(String.class,xml);
             System.out.println("thread - " + Thread.currentThread().getName() + " : " +  res);
    }
}

Bean Class

@XmlAccessorType(XmlAccessType.NONE)
@XmlRootElement(name = "UserSubscription")
public class ServiceRequest {
                private Properties modelInputs;


                public  void setSelectedOptions(Properties modelInputs) {
                                this.modelInputs = modelInputs;
                }

                @XmlElementWrapper(name = "selectedOptions", required = true, nillable = false)
                public  Properties getSelectedOptions() {
                                return this.modelInputs;
                }
}


Resource Class

@Path("/test")
public class PropResource {

@POST
@Consumes(MediaType.APPLICATION_XML)
@Produces(MediaType.TEXT_PLAIN)
    public Response getLogs(ServiceRequest request){

    String res = "";
    if( request.getSelectedOptions() == null){
        res = "Serialization Failed";
    } else if(request.getSelectedOptions() != null ){
        res = "Serialization Passed";
    }
    return Response.ok(res).build();
    }

}






Re: Inconsistent Unmarshalling during Concurrent requests

Posted by Michael Elman <el...@apache.org>.
I guess so...
The question if it's a Wink bug, or may be JAXB...
If I have time next week, I'll try to look into it.

Did you try to run the same scenario without JAXB? let's say sent plain
text and receive it?
Send JSON?

I guess it can be interesting...

On Thu, Dec 8, 2011 at 6:17 PM, Kumar, Munirathnam <munirathnam.kumar@hp.com
> wrote:

> Does this issue qualify for a bug ?****
>
> ** **
>
> *From:* Michael Elman [mailto:elman@apache.org]
> *Sent:* Thursday, December 08, 2011 9:32 PM
>
> *To:* wink-user@incubator.apache.org
> *Subject:* Re: Inconsistent Unmarshalling during Concurrent requests****
>
> ** **
>
> Yes, I did it many times.****
>
> With 200 threads it still worked fine.****
>
> With 500 some requests failed...****
>
> no idea what the problem is...****
>
> On Thu, Dec 8, 2011 at 5:56 PM, Kumar, Munirathnam <
> munirathnam.kumar@hp.com> wrote:****
>
> Here is result again. There are failed results as well. Can you please re
> run couple of times. ****
>
>  ****
>
> thread - 44 : Serialisation Passed****
>
> thread - 48 : Serialisation Passed****
>
> thread - 36 : Serialisation Passed****
>
> thread - 46 : Serialisation Passed****
>
> thread - 4 : Serialisation Passed****
>
> thread - 30 : Serialisation Passed****
>
> thread - 13 : Serialisation Passed****
>
> thread - 23 : Serialisation Passed****
>
> thread - 25 : Serialisation Failed****
>
> thread - 45 : Serialisation Failed****
>
> thread - 28 : Serialisation Passed****
>
> thread - 10 : Serialisation Passed****
>
> thread - 24 : Serialisation Failed****
>
> thread - 35 : Serialisation Passed****
>
> thread - 22 : Serialisation Failed****
>
> thread - 34 : Serialisation Passed****
>
> thread - 47 : Serialisation Passed****
>
> thread - 7 : Serialisation Passed****
>
> thread - 38 : Serialisation Failed****
>
> thread - 43 : Serialisation Failed****
>
> thread - 17 : Serialisation Passed****
>
> thread - 41 : Serialisation Failed****
>
> thread - 9 : Serialisation Failed****
>
> thread - 18 : Serialisation Failed****
>
> thread - 15 : Serialisation Passed****
>
> thread - 12 : Serialisation Failed****
>
> thread - 20 : Serialisation Passed****
>
> thread - 42 : Serialisation Passed****
>
> thread - 16 : Serialisation Passed****
>
> thread - 31 : Serialisation Passed****
>
> thread - 14 : Serialisation Failed****
>
> thread - 27 : Serialisation Failed****
>
> thread - 11 : Serialisation Passed****
>
> thread - 26 : Serialisation Failed****
>
> thread - 8 : Serialisation Failed****
>
> thread - 19 : Serialisation Passed****
>
> thread - 40 : Serialisation Passed****
>
> thread - 0 : Serialisation Passed****
>
> thread - 21 : Serialisation Passed****
>
> thread - 3 : Serialisation Failed****
>
> thread - 6 : Serialisation Passed****
>
> thread - 2 : Serialisation Passed****
>
> thread - 33 : Serialisation Failed****
>
> thread - 49 : Serialisation Passed****
>
> thread - 39 : Serialisation Failed****
>
> thread - 37 : Serialisation Passed****
>
> thread - 29 : Serialisation Passed****
>
> thread - 1 : Serialisation Passed****
>
> thread - 5 : Serialisation Passed****
>
> thread - 32 : Serialisation Failed****
>
>  ****
>
> *From:* Michael Elman [mailto:elman@apache.org]
> *Sent:* Thursday, December 08, 2011 9:22 PM****
>
>
> *To:* wink-user@incubator.apache.org
> *Subject:* Re: Inconsistent Unmarshalling during Concurrent requests****
>
>  ****
>
> Tried to run your code. Everything looks fine:****
>
>  ****
>
> thread - 29 : Serialization Passed****
>
> thread - 0 : Serialization Passed****
>
> thread - 20 : Serialization Passed****
>
> thread - 9 : Serialization Passed****
>
> thread - 7 : Serialization Passed****
>
> thread - 38 : Serialization Passed****
>
> thread - 5 : Serialization Passed****
>
> thread - 37 : Serialization Passed****
>
> thread - 36 : Serialization Passed****
>
> thread - 25 : Serialization Passed****
>
> thread - 1 : Serialization Passed****
>
> thread - 13 : Serialization Passed****
>
> thread - 47 : Serialization Passed****
>
> thread - 4 : Serialization Passed****
>
> thread - 43 : Serialization Passed****
>
> thread - 22 : Serialization Passed****
>
> thread - 28 : Serialization Passed****
>
> thread - 17 : Serialization Passed****
>
> thread - 21 : Serialization Passed****
>
> thread - 33 : Serialization Passed****
>
> thread - 32 : Serialization Passed****
>
> thread - 30 : Serialization Passed****
>
> thread - 40 : Serialization Passed****
>
> thread - 39 : Serialization Passed****
>
> thread - 24 : Serialization Passed****
>
> thread - 35 : Serialization Passed****
>
> thread - 16 : Serialization Passed****
>
> thread - 31 : Serialization Passed****
>
> thread - 18 : Serialization Passed****
>
> thread - 44 : Serialization Passed****
>
> thread - 42 : Serialization Passed****
>
> thread - 34 : Serialization Passed****
>
> thread - 2 : Serialization Passed****
>
> thread - 10 : Serialization Passed****
>
> thread - 27 : Serialization Passed****
>
> thread - 19 : Serialization Passed****
>
> thread - 3 : Serialization Passed****
>
> thread - 49 : Serialization Passed****
>
> thread - 26 : Serialization Passed****
>
> thread - 46 : Serialization Passed****
>
> thread - 41 : Serialization Passed****
>
> thread - 8 : Serialization Passed****
>
> thread - 14 : Serialization Passed****
>
> thread - 23 : Serialization Passed****
>
> thread - 11 : Serialization Passed****
>
> thread - 6 : Serialization Passed****
>
> thread - 45 : Serialization Passed****
>
> thread - 48 : Serialization Passed****
>
> thread - 12 : Serialization Passed****
>
> thread - 15 : Serialization Passed****
>
>  ****
>
> On Thu, Dec 8, 2011 at 5:07 PM, Kumar, Munirathnam <
> munirathnam.kumar@hp.com> wrote:****
>
> I have created new Instance for each thread but still I have the same
> issue.****
>
>  ****
>
> RestClient client = new RestClient();****
>
>  ****
>
> for ( int i =0; i < 50 ; i ++ ){****
>
>              resource = client.resource("http://localhost:8080/logger/test
> ");****
>
>              new Thread(new Multi(resource),new
> Integer(i).toString()).start();****
>
>          }****
>
>  ****
>
>  ****
>
> *From:* Michael Elman [mailto:elman@apache.org]
> *Sent:* Thursday, December 08, 2011 8:11 PM
> *To:* wink-user@incubator.apache.org
> *Subject:* Re: Inconsistent Unmarshalling during Concurrent requests****
>
>  ****
>
> If I understand your code correctly, you reuse Resource instance on
> multiple threads. ****
>
> But as I recall Resource is not threadsafe.****
>
> Just create a new instance each time, and it should be fine.****
>
> On Thu, Dec 8, 2011 at 4:05 PM, Kumar, Munirathnam <
> munirathnam.kumar@hp.com> wrote:****
>
> Hi****
>
> I am requesting  Concurrent requests to a Resource.****
>
> But on the Resource, bean objects are not completely populated for some
> request and gets populated completely for other requests.****
>
>  ****
>
> Please see the Client,Bean and Resource Class below.****
>
>  ****
>
> For few client request the *request.getSelectedOptions()* always returns
> null . ****
>
>  ****
>
> Is this a bug with Wink ?****
>
>  ****
>
> Can you please help****
>
>  ****
>
> -          kumar****
>
>  ****
>
> Client ****
>
>  ****
>
> class Multi implements Runnable{    ****
>
>     Resource resource;****
>
>     String xml = "<UserSubscription>"****
>
>             +       "<selectedOptions><entry><key >Amount of Memory
> (MB)</key><value >2000</value></entry>" +****
>
>                                            "<entry><key>Number of
> CPUs</key><value>1</value></entry>" +****
>
>                                            "<entry><key>Number of
> Servers</key><value>1</value></entry>"****
>
>             +      "</selectedOptions>"****
>
>             +   "</UserSubscription>";****
>
>     ****
>
>     Multi(Resource resource){****
>
>         this.resource = resource;****
>
>         ****
>
>     }****
>
>     public void run(){****
>
>              String res =
> resource.contentType(MediaType.APPLICATION_XML).accept(MediaType.TEXT_PLAIN).post(String.class,xml);
> ****
>
>              System.out.println("thread - " +
> Thread.currentThread().getName() + " : " +  res);       ****
>
>     }****
>
> }****
>
>  ****
>
> Bean Class****
>
>  ****
>
> @XmlAccessorType(XmlAccessType.NONE)****
>
> @XmlRootElement(name = "UserSubscription")****
>
> public class ServiceRequest {****
>
>                 private Properties modelInputs;****
>
>  ****
>
>  ****
>
>                 public  void setSelectedOptions(Properties modelInputs) {*
> ***
>
>                                 this.modelInputs = modelInputs;****
>
>                 }****
>
>  ****
>
>                 @XmlElementWrapper(name = "selectedOptions", required =
> true, nillable = false)****
>
>                 public  Properties getSelectedOptions() {****
>
>                                 return this.modelInputs;****
>
>                 }****
>
> }****
>
>  ****
>
>  ****
>
> Resource Class****
>
>  ****
>
> @Path("/test")****
>
> public class PropResource {****
>
>     ****
>
> @POST****
>
> @Consumes(MediaType.APPLICATION_XML)****
>
> @Produces(MediaType.TEXT_PLAIN)****
>
>     public Response getLogs(ServiceRequest request){****
>
>  ****
>
>     String res = "";****
>
>     if( request.getSelectedOptions() == null){               ****
>
>         res = "Serialization Failed";****
>
>     } else if(request.getSelectedOptions() != null ){        ****
>
>         res = "Serialization Passed";****
>
>     }    ****
>
>     return Response.ok(res).build();****
>
>     }****
>
>  ****
>
> }****
>
>  ****
>
>  ****
>
>  ****
>
> ** **
>

RE: Inconsistent Unmarshalling during Concurrent requests

Posted by "Kumar, Munirathnam" <mu...@hp.com>.
Does this issue qualify for a bug ?

From: Michael Elman [mailto:elman@apache.org]
Sent: Thursday, December 08, 2011 9:32 PM
To: wink-user@incubator.apache.org
Subject: Re: Inconsistent Unmarshalling during Concurrent requests

Yes, I did it many times.
With 200 threads it still worked fine.
With 500 some requests failed...
no idea what the problem is...
On Thu, Dec 8, 2011 at 5:56 PM, Kumar, Munirathnam <mu...@hp.com>> wrote:
Here is result again. There are failed results as well. Can you please re run couple of times.

thread - 44 : Serialisation Passed
thread - 48 : Serialisation Passed
thread - 36 : Serialisation Passed
thread - 46 : Serialisation Passed
thread - 4 : Serialisation Passed
thread - 30 : Serialisation Passed
thread - 13 : Serialisation Passed
thread - 23 : Serialisation Passed
thread - 25 : Serialisation Failed
thread - 45 : Serialisation Failed
thread - 28 : Serialisation Passed
thread - 10 : Serialisation Passed
thread - 24 : Serialisation Failed
thread - 35 : Serialisation Passed
thread - 22 : Serialisation Failed
thread - 34 : Serialisation Passed
thread - 47 : Serialisation Passed
thread - 7 : Serialisation Passed
thread - 38 : Serialisation Failed
thread - 43 : Serialisation Failed
thread - 17 : Serialisation Passed
thread - 41 : Serialisation Failed
thread - 9 : Serialisation Failed
thread - 18 : Serialisation Failed
thread - 15 : Serialisation Passed
thread - 12 : Serialisation Failed
thread - 20 : Serialisation Passed
thread - 42 : Serialisation Passed
thread - 16 : Serialisation Passed
thread - 31 : Serialisation Passed
thread - 14 : Serialisation Failed
thread - 27 : Serialisation Failed
thread - 11 : Serialisation Passed
thread - 26 : Serialisation Failed
thread - 8 : Serialisation Failed
thread - 19 : Serialisation Passed
thread - 40 : Serialisation Passed
thread - 0 : Serialisation Passed
thread - 21 : Serialisation Passed
thread - 3 : Serialisation Failed
thread - 6 : Serialisation Passed
thread - 2 : Serialisation Passed
thread - 33 : Serialisation Failed
thread - 49 : Serialisation Passed
thread - 39 : Serialisation Failed
thread - 37 : Serialisation Passed
thread - 29 : Serialisation Passed
thread - 1 : Serialisation Passed
thread - 5 : Serialisation Passed
thread - 32 : Serialisation Failed

From: Michael Elman [mailto:elman@apache.org<ma...@apache.org>]
Sent: Thursday, December 08, 2011 9:22 PM

To: wink-user@incubator.apache.org<ma...@incubator.apache.org>
Subject: Re: Inconsistent Unmarshalling during Concurrent requests

Tried to run your code. Everything looks fine:

thread - 29 : Serialization Passed
thread - 0 : Serialization Passed
thread - 20 : Serialization Passed
thread - 9 : Serialization Passed
thread - 7 : Serialization Passed
thread - 38 : Serialization Passed
thread - 5 : Serialization Passed
thread - 37 : Serialization Passed
thread - 36 : Serialization Passed
thread - 25 : Serialization Passed
thread - 1 : Serialization Passed
thread - 13 : Serialization Passed
thread - 47 : Serialization Passed
thread - 4 : Serialization Passed
thread - 43 : Serialization Passed
thread - 22 : Serialization Passed
thread - 28 : Serialization Passed
thread - 17 : Serialization Passed
thread - 21 : Serialization Passed
thread - 33 : Serialization Passed
thread - 32 : Serialization Passed
thread - 30 : Serialization Passed
thread - 40 : Serialization Passed
thread - 39 : Serialization Passed
thread - 24 : Serialization Passed
thread - 35 : Serialization Passed
thread - 16 : Serialization Passed
thread - 31 : Serialization Passed
thread - 18 : Serialization Passed
thread - 44 : Serialization Passed
thread - 42 : Serialization Passed
thread - 34 : Serialization Passed
thread - 2 : Serialization Passed
thread - 10 : Serialization Passed
thread - 27 : Serialization Passed
thread - 19 : Serialization Passed
thread - 3 : Serialization Passed
thread - 49 : Serialization Passed
thread - 26 : Serialization Passed
thread - 46 : Serialization Passed
thread - 41 : Serialization Passed
thread - 8 : Serialization Passed
thread - 14 : Serialization Passed
thread - 23 : Serialization Passed
thread - 11 : Serialization Passed
thread - 6 : Serialization Passed
thread - 45 : Serialization Passed
thread - 48 : Serialization Passed
thread - 12 : Serialization Passed
thread - 15 : Serialization Passed

On Thu, Dec 8, 2011 at 5:07 PM, Kumar, Munirathnam <mu...@hp.com>> wrote:
I have created new Instance for each thread but still I have the same issue.

RestClient client = new RestClient();

for ( int i =0; i < 50 ; i ++ ){
             resource = client.resource("http://localhost:8080/logger/test");
             new Thread(new Multi(resource),new Integer(i).toString()).start();
         }


From: Michael Elman [mailto:elman@apache.org<ma...@apache.org>]
Sent: Thursday, December 08, 2011 8:11 PM
To: wink-user@incubator.apache.org<ma...@incubator.apache.org>
Subject: Re: Inconsistent Unmarshalling during Concurrent requests

If I understand your code correctly, you reuse Resource instance on multiple threads.
But as I recall Resource is not threadsafe.
Just create a new instance each time, and it should be fine.
On Thu, Dec 8, 2011 at 4:05 PM, Kumar, Munirathnam <mu...@hp.com>> wrote:
Hi
I am requesting  Concurrent requests to a Resource.
But on the Resource, bean objects are not completely populated for some request and gets populated completely for other requests.

Please see the Client,Bean and Resource Class below.

For few client request the request.getSelectedOptions() always returns null .

Is this a bug with Wink ?

Can you please help


-          kumar

Client

class Multi implements Runnable{
    Resource resource;
    String xml = "<UserSubscription>"
            +       "<selectedOptions><entry><key >Amount of Memory (MB)</key><value >2000</value></entry>" +
                                           "<entry><key>Number of CPUs</key><value>1</value></entry>" +
                                           "<entry><key>Number of Servers</key><value>1</value></entry>"
            +      "</selectedOptions>"
            +   "</UserSubscription>";

    Multi(Resource resource){
        this.resource = resource;

    }
    public void run(){
             String res = resource.contentType(MediaType.APPLICATION_XML).accept(MediaType.TEXT_PLAIN).post(String.class,xml);
             System.out.println("thread - " + Thread.currentThread().getName() + " : " +  res);
    }
}

Bean Class

@XmlAccessorType(XmlAccessType.NONE)
@XmlRootElement(name = "UserSubscription")
public class ServiceRequest {
                private Properties modelInputs;


                public  void setSelectedOptions(Properties modelInputs) {
                                this.modelInputs = modelInputs;
                }

                @XmlElementWrapper(name = "selectedOptions", required = true, nillable = false)
                public  Properties getSelectedOptions() {
                                return this.modelInputs;
                }
}


Resource Class

@Path("/test")
public class PropResource {

@POST
@Consumes(MediaType.APPLICATION_XML)
@Produces(MediaType.TEXT_PLAIN)
    public Response getLogs(ServiceRequest request){

    String res = "";
    if( request.getSelectedOptions() == null){
        res = "Serialization Failed";
    } else if(request.getSelectedOptions() != null ){
        res = "Serialization Passed";
    }
    return Response.ok(res).build();
    }

}





Re: Inconsistent Unmarshalling during Concurrent requests

Posted by Michael Elman <el...@apache.org>.
Yes, I did it many times.
With 200 threads it still worked fine.
With 500 some requests failed...
no idea what the problem is...

On Thu, Dec 8, 2011 at 5:56 PM, Kumar, Munirathnam <munirathnam.kumar@hp.com
> wrote:

> Here is result again. There are failed results as well. Can you please re
> run couple of times. ****
>
> ** **
>
> thread - 44 : Serialisation Passed****
>
> thread - 48 : Serialisation Passed****
>
> thread - 36 : Serialisation Passed****
>
> thread - 46 : Serialisation Passed****
>
> thread - 4 : Serialisation Passed****
>
> thread - 30 : Serialisation Passed****
>
> thread - 13 : Serialisation Passed****
>
> thread - 23 : Serialisation Passed****
>
> thread - 25 : Serialisation Failed****
>
> thread - 45 : Serialisation Failed****
>
> thread - 28 : Serialisation Passed****
>
> thread - 10 : Serialisation Passed****
>
> thread - 24 : Serialisation Failed****
>
> thread - 35 : Serialisation Passed****
>
> thread - 22 : Serialisation Failed****
>
> thread - 34 : Serialisation Passed****
>
> thread - 47 : Serialisation Passed****
>
> thread - 7 : Serialisation Passed****
>
> thread - 38 : Serialisation Failed****
>
> thread - 43 : Serialisation Failed****
>
> thread - 17 : Serialisation Passed****
>
> thread - 41 : Serialisation Failed****
>
> thread - 9 : Serialisation Failed****
>
> thread - 18 : Serialisation Failed****
>
> thread - 15 : Serialisation Passed****
>
> thread - 12 : Serialisation Failed****
>
> thread - 20 : Serialisation Passed****
>
> thread - 42 : Serialisation Passed****
>
> thread - 16 : Serialisation Passed****
>
> thread - 31 : Serialisation Passed****
>
> thread - 14 : Serialisation Failed****
>
> thread - 27 : Serialisation Failed****
>
> thread - 11 : Serialisation Passed****
>
> thread - 26 : Serialisation Failed****
>
> thread - 8 : Serialisation Failed****
>
> thread - 19 : Serialisation Passed****
>
> thread - 40 : Serialisation Passed****
>
> thread - 0 : Serialisation Passed****
>
> thread - 21 : Serialisation Passed****
>
> thread - 3 : Serialisation Failed****
>
> thread - 6 : Serialisation Passed****
>
> thread - 2 : Serialisation Passed****
>
> thread - 33 : Serialisation Failed****
>
> thread - 49 : Serialisation Passed****
>
> thread - 39 : Serialisation Failed****
>
> thread - 37 : Serialisation Passed****
>
> thread - 29 : Serialisation Passed****
>
> thread - 1 : Serialisation Passed****
>
> thread - 5 : Serialisation Passed****
>
> thread - 32 : Serialisation Failed****
>
> ** **
>
> *From:* Michael Elman [mailto:elman@apache.org]
> *Sent:* Thursday, December 08, 2011 9:22 PM
>
> *To:* wink-user@incubator.apache.org
> *Subject:* Re: Inconsistent Unmarshalling during Concurrent requests****
>
> ** **
>
> Tried to run your code. Everything looks fine:****
>
> ** **
>
> thread - 29 : Serialization Passed****
>
> thread - 0 : Serialization Passed****
>
> thread - 20 : Serialization Passed****
>
> thread - 9 : Serialization Passed****
>
> thread - 7 : Serialization Passed****
>
> thread - 38 : Serialization Passed****
>
> thread - 5 : Serialization Passed****
>
> thread - 37 : Serialization Passed****
>
> thread - 36 : Serialization Passed****
>
> thread - 25 : Serialization Passed****
>
> thread - 1 : Serialization Passed****
>
> thread - 13 : Serialization Passed****
>
> thread - 47 : Serialization Passed****
>
> thread - 4 : Serialization Passed****
>
> thread - 43 : Serialization Passed****
>
> thread - 22 : Serialization Passed****
>
> thread - 28 : Serialization Passed****
>
> thread - 17 : Serialization Passed****
>
> thread - 21 : Serialization Passed****
>
> thread - 33 : Serialization Passed****
>
> thread - 32 : Serialization Passed****
>
> thread - 30 : Serialization Passed****
>
> thread - 40 : Serialization Passed****
>
> thread - 39 : Serialization Passed****
>
> thread - 24 : Serialization Passed****
>
> thread - 35 : Serialization Passed****
>
> thread - 16 : Serialization Passed****
>
> thread - 31 : Serialization Passed****
>
> thread - 18 : Serialization Passed****
>
> thread - 44 : Serialization Passed****
>
> thread - 42 : Serialization Passed****
>
> thread - 34 : Serialization Passed****
>
> thread - 2 : Serialization Passed****
>
> thread - 10 : Serialization Passed****
>
> thread - 27 : Serialization Passed****
>
> thread - 19 : Serialization Passed****
>
> thread - 3 : Serialization Passed****
>
> thread - 49 : Serialization Passed****
>
> thread - 26 : Serialization Passed****
>
> thread - 46 : Serialization Passed****
>
> thread - 41 : Serialization Passed****
>
> thread - 8 : Serialization Passed****
>
> thread - 14 : Serialization Passed****
>
> thread - 23 : Serialization Passed****
>
> thread - 11 : Serialization Passed****
>
> thread - 6 : Serialization Passed****
>
> thread - 45 : Serialization Passed****
>
> thread - 48 : Serialization Passed****
>
> thread - 12 : Serialization Passed****
>
> thread - 15 : Serialization Passed****
>
> ** **
>
> On Thu, Dec 8, 2011 at 5:07 PM, Kumar, Munirathnam <
> munirathnam.kumar@hp.com> wrote:****
>
> I have created new Instance for each thread but still I have the same
> issue.****
>
>  ****
>
> RestClient client = new RestClient();****
>
>  ****
>
> for ( int i =0; i < 50 ; i ++ ){****
>
>              resource = client.resource("http://localhost:8080/logger/test
> ");****
>
>              new Thread(new Multi(resource),new
> Integer(i).toString()).start();****
>
>          }****
>
>  ****
>
>  ****
>
> *From:* Michael Elman [mailto:elman@apache.org]
> *Sent:* Thursday, December 08, 2011 8:11 PM
> *To:* wink-user@incubator.apache.org
> *Subject:* Re: Inconsistent Unmarshalling during Concurrent requests****
>
>  ****
>
> If I understand your code correctly, you reuse Resource instance on
> multiple threads. ****
>
> But as I recall Resource is not threadsafe.****
>
> Just create a new instance each time, and it should be fine.****
>
> On Thu, Dec 8, 2011 at 4:05 PM, Kumar, Munirathnam <
> munirathnam.kumar@hp.com> wrote:****
>
> Hi****
>
> I am requesting  Concurrent requests to a Resource.****
>
> But on the Resource, bean objects are not completely populated for some
> request and gets populated completely for other requests.****
>
>  ****
>
> Please see the Client,Bean and Resource Class below.****
>
>  ****
>
> For few client request the *request.getSelectedOptions()* always returns
> null . ****
>
>  ****
>
> Is this a bug with Wink ?****
>
>  ****
>
> Can you please help****
>
>  ****
>
> -          kumar****
>
>  ****
>
> Client ****
>
>  ****
>
> class Multi implements Runnable{    ****
>
>     Resource resource;****
>
>     String xml = "<UserSubscription>"****
>
>             +       "<selectedOptions><entry><key >Amount of Memory
> (MB)</key><value >2000</value></entry>" +****
>
>                                            "<entry><key>Number of
> CPUs</key><value>1</value></entry>" +****
>
>                                            "<entry><key>Number of
> Servers</key><value>1</value></entry>"****
>
>             +      "</selectedOptions>"****
>
>             +   "</UserSubscription>";****
>
>     ****
>
>     Multi(Resource resource){****
>
>         this.resource = resource;****
>
>         ****
>
>     }****
>
>     public void run(){****
>
>              String res =
> resource.contentType(MediaType.APPLICATION_XML).accept(MediaType.TEXT_PLAIN).post(String.class,xml);
> ****
>
>              System.out.println("thread - " +
> Thread.currentThread().getName() + " : " +  res);       ****
>
>     }****
>
> }****
>
>  ****
>
> Bean Class****
>
>  ****
>
> @XmlAccessorType(XmlAccessType.NONE)****
>
> @XmlRootElement(name = "UserSubscription")****
>
> public class ServiceRequest {****
>
>                 private Properties modelInputs;****
>
>  ****
>
>  ****
>
>                 public  void setSelectedOptions(Properties modelInputs) {*
> ***
>
>                                 this.modelInputs = modelInputs;****
>
>                 }****
>
>  ****
>
>                 @XmlElementWrapper(name = "selectedOptions", required =
> true, nillable = false)****
>
>                 public  Properties getSelectedOptions() {****
>
>                                 return this.modelInputs;****
>
>                 }****
>
> }****
>
>  ****
>
>  ****
>
> Resource Class****
>
>  ****
>
> @Path("/test")****
>
> public class PropResource {****
>
>     ****
>
> @POST****
>
> @Consumes(MediaType.APPLICATION_XML)****
>
> @Produces(MediaType.TEXT_PLAIN)****
>
>     public Response getLogs(ServiceRequest request){****
>
>  ****
>
>     String res = "";****
>
>     if( request.getSelectedOptions() == null){               ****
>
>         res = "Serialization Failed";****
>
>     } else if(request.getSelectedOptions() != null ){        ****
>
>         res = "Serialization Passed";****
>
>     }    ****
>
>     return Response.ok(res).build();****
>
>     }****
>
>  ****
>
> }****
>
>  ****
>
>  ****
>
> ** **
>

RE: Inconsistent Unmarshalling during Concurrent requests

Posted by "Kumar, Munirathnam" <mu...@hp.com>.
Here is result again. There are failed results as well. Can you please re run couple of times.

thread - 44 : Serialisation Passed
thread - 48 : Serialisation Passed
thread - 36 : Serialisation Passed
thread - 46 : Serialisation Passed
thread - 4 : Serialisation Passed
thread - 30 : Serialisation Passed
thread - 13 : Serialisation Passed
thread - 23 : Serialisation Passed
thread - 25 : Serialisation Failed
thread - 45 : Serialisation Failed
thread - 28 : Serialisation Passed
thread - 10 : Serialisation Passed
thread - 24 : Serialisation Failed
thread - 35 : Serialisation Passed
thread - 22 : Serialisation Failed
thread - 34 : Serialisation Passed
thread - 47 : Serialisation Passed
thread - 7 : Serialisation Passed
thread - 38 : Serialisation Failed
thread - 43 : Serialisation Failed
thread - 17 : Serialisation Passed
thread - 41 : Serialisation Failed
thread - 9 : Serialisation Failed
thread - 18 : Serialisation Failed
thread - 15 : Serialisation Passed
thread - 12 : Serialisation Failed
thread - 20 : Serialisation Passed
thread - 42 : Serialisation Passed
thread - 16 : Serialisation Passed
thread - 31 : Serialisation Passed
thread - 14 : Serialisation Failed
thread - 27 : Serialisation Failed
thread - 11 : Serialisation Passed
thread - 26 : Serialisation Failed
thread - 8 : Serialisation Failed
thread - 19 : Serialisation Passed
thread - 40 : Serialisation Passed
thread - 0 : Serialisation Passed
thread - 21 : Serialisation Passed
thread - 3 : Serialisation Failed
thread - 6 : Serialisation Passed
thread - 2 : Serialisation Passed
thread - 33 : Serialisation Failed
thread - 49 : Serialisation Passed
thread - 39 : Serialisation Failed
thread - 37 : Serialisation Passed
thread - 29 : Serialisation Passed
thread - 1 : Serialisation Passed
thread - 5 : Serialisation Passed
thread - 32 : Serialisation Failed

From: Michael Elman [mailto:elman@apache.org]
Sent: Thursday, December 08, 2011 9:22 PM
To: wink-user@incubator.apache.org
Subject: Re: Inconsistent Unmarshalling during Concurrent requests

Tried to run your code. Everything looks fine:

thread - 29 : Serialization Passed
thread - 0 : Serialization Passed
thread - 20 : Serialization Passed
thread - 9 : Serialization Passed
thread - 7 : Serialization Passed
thread - 38 : Serialization Passed
thread - 5 : Serialization Passed
thread - 37 : Serialization Passed
thread - 36 : Serialization Passed
thread - 25 : Serialization Passed
thread - 1 : Serialization Passed
thread - 13 : Serialization Passed
thread - 47 : Serialization Passed
thread - 4 : Serialization Passed
thread - 43 : Serialization Passed
thread - 22 : Serialization Passed
thread - 28 : Serialization Passed
thread - 17 : Serialization Passed
thread - 21 : Serialization Passed
thread - 33 : Serialization Passed
thread - 32 : Serialization Passed
thread - 30 : Serialization Passed
thread - 40 : Serialization Passed
thread - 39 : Serialization Passed
thread - 24 : Serialization Passed
thread - 35 : Serialization Passed
thread - 16 : Serialization Passed
thread - 31 : Serialization Passed
thread - 18 : Serialization Passed
thread - 44 : Serialization Passed
thread - 42 : Serialization Passed
thread - 34 : Serialization Passed
thread - 2 : Serialization Passed
thread - 10 : Serialization Passed
thread - 27 : Serialization Passed
thread - 19 : Serialization Passed
thread - 3 : Serialization Passed
thread - 49 : Serialization Passed
thread - 26 : Serialization Passed
thread - 46 : Serialization Passed
thread - 41 : Serialization Passed
thread - 8 : Serialization Passed
thread - 14 : Serialization Passed
thread - 23 : Serialization Passed
thread - 11 : Serialization Passed
thread - 6 : Serialization Passed
thread - 45 : Serialization Passed
thread - 48 : Serialization Passed
thread - 12 : Serialization Passed
thread - 15 : Serialization Passed

On Thu, Dec 8, 2011 at 5:07 PM, Kumar, Munirathnam <mu...@hp.com>> wrote:
I have created new Instance for each thread but still I have the same issue.

RestClient client = new RestClient();

for ( int i =0; i < 50 ; i ++ ){
             resource = client.resource("http://localhost:8080/logger/test");
             new Thread(new Multi(resource),new Integer(i).toString()).start();
         }


From: Michael Elman [mailto:elman@apache.org<ma...@apache.org>]
Sent: Thursday, December 08, 2011 8:11 PM
To: wink-user@incubator.apache.org<ma...@incubator.apache.org>
Subject: Re: Inconsistent Unmarshalling during Concurrent requests

If I understand your code correctly, you reuse Resource instance on multiple threads.
But as I recall Resource is not threadsafe.
Just create a new instance each time, and it should be fine.
On Thu, Dec 8, 2011 at 4:05 PM, Kumar, Munirathnam <mu...@hp.com>> wrote:
Hi
I am requesting  Concurrent requests to a Resource.
But on the Resource, bean objects are not completely populated for some request and gets populated completely for other requests.

Please see the Client,Bean and Resource Class below.

For few client request the request.getSelectedOptions() always returns null .

Is this a bug with Wink ?

Can you please help


-          kumar

Client

class Multi implements Runnable{
    Resource resource;
    String xml = "<UserSubscription>"
            +       "<selectedOptions><entry><key >Amount of Memory (MB)</key><value >2000</value></entry>" +
                                           "<entry><key>Number of CPUs</key><value>1</value></entry>" +
                                           "<entry><key>Number of Servers</key><value>1</value></entry>"
            +      "</selectedOptions>"
            +   "</UserSubscription>";

    Multi(Resource resource){
        this.resource = resource;

    }
    public void run(){
             String res = resource.contentType(MediaType.APPLICATION_XML).accept(MediaType.TEXT_PLAIN).post(String.class,xml);
             System.out.println("thread - " + Thread.currentThread().getName() + " : " +  res);
    }
}

Bean Class

@XmlAccessorType(XmlAccessType.NONE)
@XmlRootElement(name = "UserSubscription")
public class ServiceRequest {
                private Properties modelInputs;


                public  void setSelectedOptions(Properties modelInputs) {
                                this.modelInputs = modelInputs;
                }

                @XmlElementWrapper(name = "selectedOptions", required = true, nillable = false)
                public  Properties getSelectedOptions() {
                                return this.modelInputs;
                }
}


Resource Class

@Path("/test")
public class PropResource {

@POST
@Consumes(MediaType.APPLICATION_XML)
@Produces(MediaType.TEXT_PLAIN)
    public Response getLogs(ServiceRequest request){

    String res = "";
    if( request.getSelectedOptions() == null){
        res = "Serialization Failed";
    } else if(request.getSelectedOptions() != null ){
        res = "Serialization Passed";
    }
    return Response.ok(res).build();
    }

}




Re: Inconsistent Unmarshalling during Concurrent requests

Posted by Michael Elman <el...@apache.org>.
Tried to run your code. Everything looks fine:

thread - 29 : Serialization Passed
thread - 0 : Serialization Passed
thread - 20 : Serialization Passed
thread - 9 : Serialization Passed
thread - 7 : Serialization Passed
thread - 38 : Serialization Passed
thread - 5 : Serialization Passed
thread - 37 : Serialization Passed
thread - 36 : Serialization Passed
thread - 25 : Serialization Passed
thread - 1 : Serialization Passed
thread - 13 : Serialization Passed
thread - 47 : Serialization Passed
thread - 4 : Serialization Passed
thread - 43 : Serialization Passed
thread - 22 : Serialization Passed
thread - 28 : Serialization Passed
thread - 17 : Serialization Passed
thread - 21 : Serialization Passed
thread - 33 : Serialization Passed
thread - 32 : Serialization Passed
thread - 30 : Serialization Passed
thread - 40 : Serialization Passed
thread - 39 : Serialization Passed
thread - 24 : Serialization Passed
thread - 35 : Serialization Passed
thread - 16 : Serialization Passed
thread - 31 : Serialization Passed
thread - 18 : Serialization Passed
thread - 44 : Serialization Passed
thread - 42 : Serialization Passed
thread - 34 : Serialization Passed
thread - 2 : Serialization Passed
thread - 10 : Serialization Passed
thread - 27 : Serialization Passed
thread - 19 : Serialization Passed
thread - 3 : Serialization Passed
thread - 49 : Serialization Passed
thread - 26 : Serialization Passed
thread - 46 : Serialization Passed
thread - 41 : Serialization Passed
thread - 8 : Serialization Passed
thread - 14 : Serialization Passed
thread - 23 : Serialization Passed
thread - 11 : Serialization Passed
thread - 6 : Serialization Passed
thread - 45 : Serialization Passed
thread - 48 : Serialization Passed
thread - 12 : Serialization Passed
thread - 15 : Serialization Passed

On Thu, Dec 8, 2011 at 5:07 PM, Kumar, Munirathnam <munirathnam.kumar@hp.com
> wrote:

> I have created new Instance for each thread but still I have the same
> issue.****
>
> ** **
>
> RestClient client = new RestClient();****
>
> ** **
>
> for ( int i =0; i < 50 ; i ++ ){****
>
>              resource = client.resource("http://localhost:8080/logger/test
> ");****
>
>              new Thread(new Multi(resource),new
> Integer(i).toString()).start();****
>
>          }****
>
> ** **
>
> ** **
>
> *From:* Michael Elman [mailto:elman@apache.org]
> *Sent:* Thursday, December 08, 2011 8:11 PM
> *To:* wink-user@incubator.apache.org
> *Subject:* Re: Inconsistent Unmarshalling during Concurrent requests****
>
> ** **
>
> If I understand your code correctly, you reuse Resource instance on
> multiple threads. ****
>
> But as I recall Resource is not threadsafe.****
>
> Just create a new instance each time, and it should be fine.****
>
> On Thu, Dec 8, 2011 at 4:05 PM, Kumar, Munirathnam <
> munirathnam.kumar@hp.com> wrote:****
>
> Hi****
>
> I am requesting  Concurrent requests to a Resource.****
>
> But on the Resource, bean objects are not completely populated for some
> request and gets populated completely for other requests.****
>
>  ****
>
> Please see the Client,Bean and Resource Class below.****
>
>  ****
>
> For few client request the *request.getSelectedOptions()* always returns
> null . ****
>
>  ****
>
> Is this a bug with Wink ?****
>
>  ****
>
> Can you please help****
>
>  ****
>
> -          kumar****
>
>  ****
>
> Client ****
>
>  ****
>
> class Multi implements Runnable{    ****
>
>     Resource resource;****
>
>     String xml = "<UserSubscription>"****
>
>             +       "<selectedOptions><entry><key >Amount of Memory
> (MB)</key><value >2000</value></entry>" +****
>
>                                            "<entry><key>Number of
> CPUs</key><value>1</value></entry>" +****
>
>                                            "<entry><key>Number of
> Servers</key><value>1</value></entry>"****
>
>             +      "</selectedOptions>"****
>
>             +   "</UserSubscription>";****
>
>     ****
>
>     Multi(Resource resource){****
>
>         this.resource = resource;****
>
>         ****
>
>     }****
>
>     public void run(){****
>
>              String res =
> resource.contentType(MediaType.APPLICATION_XML).accept(MediaType.TEXT_PLAIN).post(String.class,xml);
> ****
>
>              System.out.println("thread - " +
> Thread.currentThread().getName() + " : " +  res);       ****
>
>     }****
>
> }****
>
>  ****
>
> Bean Class****
>
>  ****
>
> @XmlAccessorType(XmlAccessType.NONE)****
>
> @XmlRootElement(name = "UserSubscription")****
>
> public class ServiceRequest {****
>
>                 private Properties modelInputs;****
>
>  ****
>
>  ****
>
>                 public  void setSelectedOptions(Properties modelInputs) {*
> ***
>
>                                 this.modelInputs = modelInputs;****
>
>                 }****
>
>  ****
>
>                 @XmlElementWrapper(name = "selectedOptions", required =
> true, nillable = false)****
>
>                 public  Properties getSelectedOptions() {****
>
>                                 return this.modelInputs;****
>
>                 }****
>
> }****
>
>  ****
>
>  ****
>
> Resource Class****
>
>  ****
>
> @Path("/test")****
>
> public class PropResource {****
>
>     ****
>
> @POST****
>
> @Consumes(MediaType.APPLICATION_XML)****
>
> @Produces(MediaType.TEXT_PLAIN)****
>
>     public Response getLogs(ServiceRequest request){****
>
>  ****
>
>     String res = "";****
>
>     if( request.getSelectedOptions() == null){               ****
>
>         res = "Serialization Failed";****
>
>     } else if(request.getSelectedOptions() != null ){        ****
>
>         res = "Serialization Passed";****
>
>     }    ****
>
>     return Response.ok(res).build();****
>
>     }****
>
>  ****
>
> }****
>
>  ****
>
> ** **
>

RE: Inconsistent Unmarshalling during Concurrent requests

Posted by "Kumar, Munirathnam" <mu...@hp.com>.
I have created new Instance for each thread but still I have the same issue.

RestClient client = new RestClient();

for ( int i =0; i < 50 ; i ++ ){
             resource = client.resource("http://localhost:8080/logger/test");
             new Thread(new Multi(resource),new Integer(i).toString()).start();
         }


From: Michael Elman [mailto:elman@apache.org]
Sent: Thursday, December 08, 2011 8:11 PM
To: wink-user@incubator.apache.org
Subject: Re: Inconsistent Unmarshalling during Concurrent requests

If I understand your code correctly, you reuse Resource instance on multiple threads.
But as I recall Resource is not threadsafe.
Just create a new instance each time, and it should be fine.
On Thu, Dec 8, 2011 at 4:05 PM, Kumar, Munirathnam <mu...@hp.com>> wrote:
Hi
I am requesting  Concurrent requests to a Resource.
But on the Resource, bean objects are not completely populated for some request and gets populated completely for other requests.

Please see the Client,Bean and Resource Class below.

For few client request the request.getSelectedOptions() always returns null .

Is this a bug with Wink ?

Can you please help


-          kumar

Client

class Multi implements Runnable{
    Resource resource;
    String xml = "<UserSubscription>"
            +       "<selectedOptions><entry><key >Amount of Memory (MB)</key><value >2000</value></entry>" +
                                           "<entry><key>Number of CPUs</key><value>1</value></entry>" +
                                           "<entry><key>Number of Servers</key><value>1</value></entry>"
            +      "</selectedOptions>"
            +   "</UserSubscription>";

    Multi(Resource resource){
        this.resource = resource;

    }
    public void run(){
             String res = resource.contentType(MediaType.APPLICATION_XML).accept(MediaType.TEXT_PLAIN).post(String.class,xml);
             System.out.println("thread - " + Thread.currentThread().getName() + " : " +  res);
    }
}

Bean Class

@XmlAccessorType(XmlAccessType.NONE)
@XmlRootElement(name = "UserSubscription")
public class ServiceRequest {
                private Properties modelInputs;


                public  void setSelectedOptions(Properties modelInputs) {
                                this.modelInputs = modelInputs;
                }

                @XmlElementWrapper(name = "selectedOptions", required = true, nillable = false)
                public  Properties getSelectedOptions() {
                                return this.modelInputs;
                }
}


Resource Class

@Path("/test")
public class PropResource {

@POST
@Consumes(MediaType.APPLICATION_XML)
@Produces(MediaType.TEXT_PLAIN)
    public Response getLogs(ServiceRequest request){

    String res = "";
    if( request.getSelectedOptions() == null){
        res = "Serialization Failed";
    } else if(request.getSelectedOptions() != null ){
        res = "Serialization Passed";
    }
    return Response.ok(res).build();
    }

}



Re: Inconsistent Unmarshalling during Concurrent requests

Posted by Michael Elman <el...@apache.org>.
If I understand your code correctly, you reuse Resource instance on
multiple threads.
But as I recall Resource is not threadsafe.
Just create a new instance each time, and it should be fine.

On Thu, Dec 8, 2011 at 4:05 PM, Kumar, Munirathnam <munirathnam.kumar@hp.com
> wrote:

> Hi****
>
> I am requesting  Concurrent requests to a Resource.****
>
> But on the Resource, bean objects are not completely populated for some
> request and gets populated completely for other requests.****
>
> ** **
>
> Please see the Client,Bean and Resource Class below.****
>
> ** **
>
> For few client request the *request.getSelectedOptions()* always returns
> null . ****
>
> ** **
>
> Is this a bug with Wink ?****
>
> ** **
>
> Can you please help****
>
> ** **
>
> **-          **kumar****
>
> ** **
>
> Client ****
>
> ** **
>
> class Multi implements Runnable{    ****
>
>     Resource resource;****
>
>     String xml = "<UserSubscription>"****
>
>             +       "<selectedOptions><entry><key >Amount of Memory
> (MB)</key><value >2000</value></entry>" +****
>
>                                            "<entry><key>Number of
> CPUs</key><value>1</value></entry>" +****
>
>                                            "<entry><key>Number of
> Servers</key><value>1</value></entry>"****
>
>             +      "</selectedOptions>"****
>
>             +   "</UserSubscription>";****
>
>     ****
>
>     Multi(Resource resource){****
>
>         this.resource = resource;****
>
>         ****
>
>     }****
>
>     public void run(){****
>
>              String res =
> resource.contentType(MediaType.APPLICATION_XML).accept(MediaType.TEXT_PLAIN).post(String.class,xml);
> ****
>
>              System.out.println("thread - " +
> Thread.currentThread().getName() + " : " +  res);       ****
>
>     }****
>
> }****
>
> ** **
>
> Bean Class****
>
> ** **
>
> @XmlAccessorType(XmlAccessType.NONE)****
>
> @XmlRootElement(name = "UserSubscription")****
>
> public class ServiceRequest {****
>
>                 private Properties modelInputs;****
>
> ** **
>
> ** **
>
>                 public  void setSelectedOptions(Properties modelInputs) {*
> ***
>
>                                 this.modelInputs = modelInputs;****
>
>                 }****
>
> ** **
>
>                 @XmlElementWrapper(name = "selectedOptions", required =
> true, nillable = false)****
>
>                 public  Properties getSelectedOptions() {****
>
>                                 return this.modelInputs;****
>
>                 }****
>
> }****
>
> ** **
>
> ** **
>
> Resource Class****
>
> ** **
>
> @Path("/test")****
>
> public class PropResource {****
>
>     ****
>
> @POST****
>
> @Consumes(MediaType.APPLICATION_XML)****
>
> @Produces(MediaType.TEXT_PLAIN)****
>
>     public Response getLogs(ServiceRequest request){****
>
> ** **
>
>     String res = "";****
>
>     if( request.getSelectedOptions() == null){               ****
>
>         res = "Serialization Failed";****
>
>     } else if(request.getSelectedOptions() != null ){        ****
>
>         res = "Serialization Passed";****
>
>     }    ****
>
>     return Response.ok(res).build();****
>
>     }****
>
> ** **
>
> }****
>
> ** **
>