users@grizzly.java.net

Re: Asynchronous Request Processing with TCPIP

From: Jeanfrancois Arcand <Jeanfrancois.Arcand_at_Sun.COM>
Date: Thu, 03 Jul 2008 13:55:05 -0400

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
>>
>>
>
>