users@grizzly.java.net

Re: Asynchronous Request Processing with TCPIP

From: Jeanfrancois Arcand <Jeanfrancois.Arcand_at_Sun.COM>
Date: Thu, 03 Jul 2008 11:44:08 -0400

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