users@grizzly.java.net

Re: Asynchronous Request Processing with TCPIP

From: Vishnuvardhan <Vishnuvardhan.Piskalaramesh_at_Sun.COM>
Date: Thu, 03 Jul 2008 23:56:53 +0530

Just to be more specific, can you please tell me if the below will work:

//suspend() method is invoked with ctx as attachment. getting back
inside the resumed method
//inside the resumed method().
            public void resumed(Object attachment) {
                      Context ctx = (Context) attachment;
                      
ctx.getAsyncQueueWritable().writeToAsyncQueue(responseBuffer);
             }

P.S I need to get as much info before you go for long weekend. Please
don't mind.

Thanks
Vishnu

Jeanfrancois Arcand wrote:
> Salut,
>
> Vishnuvardhan wrote:
>> Hi Jeanfrancois,
>>
>> Thank you very much. I think that will help.
>>
>> A couple of doubts:
>>
>> 1. If I want to suspend indefinitely until resume() is invoked, can I
>> send the timeout value as 0.
>
> Set it to -1.
>
>
>>
>> 2. Can I write the response back from resumed() method?
>
> Yes. You can always write when a connection is suspected/resumed.
>
> What is the
>> correct way to write the response back? Also when I write the data
>> back, the HL7 specific filter should be invoked for OP_WRITE so that
>> I can wrap the data with hl7 protocol specific characters.
>
> You can probably use the Async Queue Writer so you don't need to
> handle OP_WRITE directly:
>
> http://blogs.sun.com/oleksiys/entry/grizzly_1_7_0_presents
>
> A+
>
> - Jeanfrancois
>
>
>>
>> -Vishnu
>>
>>
>>
>> Jeanfrancois Arcand wrote:
>>> Salut,
>>>
>>> Vishnuvardhan wrote:
>>>> Hi Jeanfrancois
>>>>
>>>> Thanks for your help. I looked at the SuspendableFilter. This
>>>> filter suspends the execution based on the match of the string
>>>> received. In my case, the input can be any HL7 message. I need to
>>>> suspend after I receive the HL7 message.
>>>>
>>>> I need to have something like this:
>>>>
>>>> class SuspendableFilter
>>>>
>>>> //inside execute()
>>>>
>>>> //read the string received
>>>> this.suspend();
>>>> //continue execution after resuming..
>>>>
>>>> From some other method.
>>>>
>>>> suspendableFilter.resume().
>>>>
>>>> Again, thank you very much for considering my request.
>>>
>>> I think you can do that by extending the SuspendableFilter and
>>> suspend on all requests, independently of the matching String. Just
>>> make sure you are telling the SuspendableFilter to suspend *After*
>>> executing the next ProtocolFilter in the protocol chain:
>>>
>>>> final ProtocolFilter readFilter = new ReadFilter();
>>>> final SuspendableFilter suspendFilter = new
>>>> SuspendableFilter();
>>>> final ProtocolFilter hl7Filter = new HL7Filter();
>>>> suspendable = suspendFilter.suspend("*", timeout, null, new
>>>> SuspendableHandler() {
>>>>
>>>> public void interupted(Object attachment) {
>>>> }
>>>>
>>>> public void resumed(Object attachment) {
>>>> }
>>>>
>>>> public void expired(Object attachment) {
>>>> }
>>>> }, Suspend.AFTER);
>>>
>>> What this code snipped will do is read bytes, invoke your HL7Filter,
>>> then suspend the connection.
>>>
>>> Would that help?
>>>
>>> Thanks
>>>
>>> -- Jeanfrancois
>>>
>>>
>>>
>>>
>>>
>>>>
>>>> Vishnu
>>>>
>>>>
>>>> Jeanfrancois Arcand wrote:
>>>>> Salut,
>>>>>
>>>>> [removing the dev alias]
>>>>>
>>>>> Vishnuvardhan wrote:
>>>>>> Hi
>>>>>>
>>>>>> I am working on Open ESB HL7 binding component. We are in the
>>>>>> processing of migrating the component from Apache Mina framework
>>>>>> to Grizzly. I would like to know if I can do Asynchronous Request
>>>>>> Processing with TCP using Grizzly.
>>>>>>
>>>>>> This is what I want to do.
>>>>>> 1. Listen on a particular port.
>>>>>> 2. Read the incoming message.
>>>>>> 3. Parse the incoming message.
>>>>>> 4. Submit the parsed message to the business processing layer.
>>>>>> 5. Once a response is available, send back the response message
>>>>>> to the same socket.
>>>>>
>>>>> Yes, you can. Take a look at the SuspendableFilter:
>>>>>
>>>>> https://grizzly.dev.java.net/nonav/apidocs/com/sun/grizzly/suspendable/SuspendableFilter.html
>>>>>
>>>>>
>>>>>
>>>>>>
>>>>>> This is what I have done.
>>>>>> 1. Created a Controller.
>>>>>> 2. Added a protocol chain with ReadFilter and a parser filter.
>>>>>> 3. Once the message is available, submitting the message to the
>>>>>> business processing layer.
>>>>>> The thread execution ends here.
>>>>>>
>>>>>> The response will be available from another thread. Now, I want
>>>>>> to write the response message back to the same socket. I tried to
>>>>>> cache the context from 1st thread and tried to use the same
>>>>>> context for writing. But when I say
>>>>>> ctx.getSelectionKey().channel(), the program hangs there.
>>>>>>
>>>>>> I went through the blog on Asynchronous Request Processing by
>>>>>> Jean-Francois Arcand's Blog
>>>>>> <http://weblogs.java.net/blog/jfarcand/>. The framework seems to
>>>>>> be supporting only HTTP protocol.
>>>>>>
>>>>>> Can somebody guide me how to achieve this in TCP IP.
>>>>>
>>>>> Take a look at the SuspendableFilter as I think this is really
>>>>> what you need. You can see some tests here:
>>>>>
>>>>> https://grizzly.dev.java.net/nonav/xref-test/com/sun/grizzly/SuspendableTest.html
>>>>>
>>>>>
>>>>> Let us know if that doesn't work. Your scenario is quite common
>>>>> and I can certainly help improving the SuspendableFilter to makes
>>>>> it work for you :-)
>>>>>
>>>>> A+
>>>>>
>>>>> -- Jeanfrancois
>>>>>
>>>>>
>>>>>
>>>>>>
>>>>>> Thanks in advance,
>>>>>> Vishnu
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Vishnuvardhan Piskalaramesh
>>>>>> Sun's Open ESB Community (http://open-esb.org)
>>>>>
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: users-unsubscribe_at_grizzly.dev.java.net
>>>>> For additional commands, e-mail: users-help_at_grizzly.dev.java.net
>>>>>
>>>>>
>>>>
>>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: users-unsubscribe_at_grizzly.dev.java.net
>>> For additional commands, e-mail: users-help_at_grizzly.dev.java.net
>>>
>>>
>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe_at_grizzly.dev.java.net
> For additional commands, e-mail: users-help_at_grizzly.dev.java.net
>
>


-- 
Vishnuvardhan Piskalaramesh
Sun's Open ESB Community (http://open-esb.org)