Reading that chat it wasn't so clear what is trying to be supported, maybe
some use cases could be listed before this gets too complicated.
Tuscany sending and receiving simple JMS text messages containing XML
to/from existing legacy JMS destinations was mentioned and that seems
reasonable to me as its such a common way JMS is used. From previous posts
it sounded like that is what the first cut at the JMS binding would
support,
and that seems a fine approach to me.
Two techniques are mentioned in this chat, (1) databinding converting the
Tuscany message to XML, and (2) databinding converting the Tuscany message
to a JMS message. As Rajith mentioned in the IRC a big problem with
(2), is
that to create a JMS message you need the JMS session. Sure you could get
the JMS session into the DataBinding framework but its going to make the
code far more complicated than keeping it in the JMS binding code.
My 2c's for getting something going initially would be to just support JMS
text messages using option (1) and the existing XML serialization stuff we
already with the databinding framework. The code Rajith has already
submitted looks real close to having it working like this.
...ant
On 9/27/06, Raymond Feng <[EMAIL PROTECTED]> wrote:
>
> Hi,
>
> We had a chat on IRC brainstorming how JMS binding can leverage the
> databinding framework. Please see the transcripts below for more
details.
>
> A brief summary:
>
> 1) There are two service contracts involved for services or references
> with JMS bindings:
> a) The service contract from <interface ...>
> b) The service contract from the binding (which can be a
> javax.jms.MessageListener).
>
> 2) We may need an interceptor to do ServiceContract mapping. For
example,
> it uses the OperationSelector to map a JMS message to a given operation
on
> the interface.
>
> 3) Databinding options are exploited. There may be two options:
> a) For reference, transform the Object[] into an intermediate format
> such as XMLString, the JMS binding code will construct the Message. For
> service, the JMS binding code will extract the XMLString from the
Message
> and the databinding framework will transform the XMLStrings into
Object[].
> b) A transformer transforms the Object[] into a Message and vice
> versa. This requires that the JMS Session accessible from the
transformation
> context.
>
> Thanks,
> Raymond
>
> (3:07:50 PM) rajith_home: rfeng, hello
> (3:09:27 PM) dkulp left the room (quit: Remote closed the connection).
> (3:12:05 PM) rfeng: rajith?
> (3:12:42 PM) rajith_home: rfeng, can you please answer the question on
> databinding sent to the list.
> (3:12:49 PM) rfeng: just came back from a training class
> (3:12:57 PM) rfeng: sure, I'll
> (3:13:00 PM) rajith_home: rfeng, I still feel that I haven't understood
> the whole concept
> (3:13:06 PM) rfeng: ok
> (3:13:16 PM) rajith_home: rfeng, thansk raymond and sorry for bugging
you
> (3:13:16 PM) rfeng: which part?
> (3:13:20 PM) rfeng: np
> (3:14:00 PM) rajith_home: rfeng, I need to understand where I have to
> indicate the expected data type
> (3:14:39 PM) rajith_home: rfeng, so then in the target invoker and in my
> service I can work with my prefered data type and let the framework do
the
> conversion
> (3:15:08 PM) rfeng: let's put this way
> (3:15:28 PM) rfeng: you're implementing a JMS binding
> (3:15:42 PM) rajith_home: rfeng, now axis2 works with AXIOM, but I want
to
> work with Object[] for invoking methods, but I want to serialize them to
xml
> when I send them over the wire
> (3:15:46 PM) rajith_home: rfeng, sorry go ahead
> (3:15:59 PM) rfeng: for reference (outbound) and service (inbound),
right?
> (3:16:10 PM) rajith_home: yes
> (3:16:22 PM) rfeng: let's start with the reference
> (3:16:44 PM) rfeng: assuming you use java interface to model your
> reference
> (3:17:05 PM) rfeng: or WSDL?
> (3:17:24 PM) rajith_home: I use java interface
> (3:17:27 PM) rfeng: ok
> (3:18:13 PM) rfeng: there is an operation: String concat(String s1,
String
> s2)
> (3:18:24 PM) rajith_home: ok
> (3:18:26 PM) rfeng: how do you want to create the JMSMessage?
> (3:19:24 PM) rajith_home: ok, the operation name is send as a jms
> property, and the arguments should be serialized (XML, java
> serialization...etc), but XML is preffered. The arguments are sent as
the
> jms payload
> (3:19:36 PM) rfeng: component1.ref1 --> composite.reference w/ JMS
binding
> --> JMS layer
> (3:19:46 PM) rajith_home: yep
> (3:21:03 PM) rfeng: so the JMS binding builder will tell me the native
> ServiceContract for the JMS layer
> (3:21:28 PM) rajith_home: ok thats a part I missed
> (3:21:36 PM) rajith_home: now where does the conversion happen, and what
> do I have to do to get the required conversion from say object[s1,s2] to
> some xml serialization
> (3:21:52 PM) rajith_home: so I need to specifiy the native format ?
> (3:22:29 PM) rfeng: if you tell me that the native format is XMLString
> (3:23:22 PM) rajith_home: it is XML string, btw how do u specifiy this
in
> the binding builder?
> (3:24:00 PM) rfeng: The databinding interceptor on the outbound wire of
> the reference will find a transformer which can convert s1, s2 into xml
> (3:25:16 PM) rfeng: in your case, really you don't have a ready-to-use
> ServiceContract for the JMS layer, so maybe clone the
JavaServiceContract
> and call setDataBinding()
> (3:25:55 PM) rfeng: maybe we should transform the Object[] as a whole
> (3:26:03 PM) rfeng: right now it's arg by arg
> (3:26:10 PM) rajith_home: ok I see
> (3:26:15 PM) rajith_home: so in my target invoker what should I expect
> then for the payload?
> (3:26:27 PM) rfeng: but you can claim the JMS contract is wrapped
> (3:27:07 PM) rfeng: and the JMSDataBinding will provide a wrapper
handler
> (3:27:23 PM) rfeng: in your case, the wrapper can be the JMSMessage
> (3:27:33 PM) rfeng: and args are children
> (3:28:29 PM) rajith_home: so u mean I pass in the arguments and the
> JMSDataBinding class will return me a JMS Message?
> (3:28:34 PM) jboynes: the wrapper being a transform that converts
Object[]
> to JMSMessage?
> (3:29:00 PM) rajith_home: LOL, same idea
> (3:29:10 PM) rfeng: yes
> (3:29:16 PM) rajith_home: well to be honest thats more inline with the
> spec
> (3:29:48 PM) rajith_home: so I register my JMSDataBinding with the
> registry as another framework?
> (3:30:10 PM) rajith_home: like sdo,xmlbeans, jaxb.axiom ..etv
> (3:30:14 PM) rfeng: so the JMSMessageDataBinding will register itself
with
> the DataBindingRegistry
> (3:31:21 PM) rfeng: the incoming data is Object[] (unwrapped)
> (3:31:23 PM) rajith_home: hmm makes more sense now, and I can use what
> ever serialization I want for the objects when I implement the
> JMSDataBinding
> (3:31:37 PM) rfeng: and if we detect the target operation is wrapped
> (3:32:01 PM) rfeng: we lookup the WrapperHandler (from DataBinding)
> (3:32:35 PM) rfeng: then call create() to create the wrapper (in your
case
> JMSMessage)
> (3:32:53 PM) rfeng: then call setChild(wrapper, child ,...)
> (3:33:18 PM) jboynes: rfeng: I hate to ask, but why is wrapping special?
> (3:33:29 PM) rajith_home: rfeng, to create a JMS message we need to have
> access to a jms session, so my data binding class needs to be given a
> session, so is that dependency acceptable?
> (3:33:40 PM) jboynes: isn't it just another data transform?
> (3:33:57 PM) rfeng: it's another data transform
> (3:34:34 PM) rfeng: we have Input2Input, Output2Output transformers
which
> deal with it
> (3:34:49 PM) jboynes: ok
> (3:34:51 PM) jboynes: cool
> (3:34:57 PM) tsee [EMAIL PROTECTED] entered the
> room.
> (3:35:18 PM) jboynes: I was confused by create() and setChild() - it
> sounded like there was a different api
> (3:35:49 PM) rfeng: That's used to define the wrapping capabilities from
> different databindings
> (3:35:51 PM) rajith_home: ok, I got lost again, what did u mean by
> Object[] (unwrapped) ?
> (3:36:25 PM) bhdaniel left the room (quit: Read error: 145 (Connection
> timed out)).
> (3:36:30 PM) rfeng: meaning each element in the Object[] is the real arg
> (3:36:41 PM) rfeng: (s1, s2)
> (3:37:11 PM) rfeng: I guess there're two choices for JMS case
> (3:37:34 PM) rajith_home: rfeng, ok and if the target operation is
> expecting a JMS message then we need to wrap the args inside a JMS
message
> (3:37:42 PM) rfeng: 1) convert (s1, s2) to an intermediate format and
the
> target invoke will take that to create the JMSMessage
> (3:38:05 PM) rfeng: 2) Directly convert (s1,s2) to a JMSMessage
> (3:38:25 PM) rajith_home: rfeng, convert to XML and give it to me so I
can
> transport it inside a JMS message
> (3:38:35 PM) rfeng: which one do you prefer? 1?
> (3:38:55 PM) rajith_home: option 2 mean my JMSDataBinding class needs
> access to a jms session to create the message
> (3:39:01 PM) rfeng: yes
> (3:39:07 PM) rajith_home: rfeng, so option 1 is better
> (3:39:11 PM) rfeng: ok
> (3:39:22 PM) rfeng: then it could be simpler
> (3:40:13 PM) rajith_home: rfeng, jboynes do we need to support the case
> where the target component is expecting a message? if thats the case
then
> the target component needs to know how to parse the payload
> (3:40:46 PM) rajith_home: rfeng, jboynes which is not every elegant in
my
> opinion.
> (3:41:27 PM) jboynes: don't get that
> (3:41:32 PM) rajith_home: rfeng, os it's better if [s1,s2] --> xml -->
jms
> msg --> xml --> [s1,s2]
> (3:41:57 PM) jboynes: I think option 2 sounds better
> (3:42:09 PM) rfeng: :-)
> (3:42:17 PM) jboynes: s1, s2 could convert to XML using different
> serializers
> (3:42:42 PM) rajith_home: jboynes, well if the target component has a
> operation like onMessage(javax.jms.Message message) then it needs to
know
> how to parse the payload and extract the arguments or business data
> (3:42:53 PM) jboynes: so [s1,s2] -> [x1, s2] -> [x1, x2] -> JMSMessage
> (3:43:25 PM) jboynes: rajith_home: if that's its service contract then
> that would be what it was expectinvg
> (3:43:56 PM) rajith_home: jboynes, agreed also if people want [s1,s2]
-->
> java serialized --> bytes message --> java serialized --> [s1,s2]
> (3:44:20 PM) jboynes: yes
> (3:44:22 PM) rfeng: I think the reference and service side can be
asymtric
> (3:44:42 PM) jboynes: yes
> (3:45:32 PM) rajith_home: jboynes, if it expects a message directly then
> the component invoking the reference will obviously needs to send some
> business data in the payload in a format the target component
understands
> (3:45:35 PM) rfeng: s1, s2 --> jms .... jms ... --> SDO, SDO
> (3:46:02 PM) jboynes: it would depend on what the target component was
> doing with the message
> (3:46:09 PM) jboynes: it may never need to deserialize the payload
> (3:46:19 PM) rfeng: right
> (3:46:20 PM) jboynes: it may just be forwarding it on
> (3:46:48 PM) jboynes: but another component might want us to do the
> deserialization
> (3:46:58 PM) rfeng: the JMSMessage is picked up the service and delegate
> downstream to target component
> (3:47:12 PM) jboynes: but in that case it would not be expecting a
Message
> but one or more bits of business data
> (3:48:19 PM) jboynes: it may even expect a combination
> (3:48:33 PM) jboynes: doStuff(Message msg, Order payload)
> (3:50:04 PM) rfeng: Assume this flow: JMS --> (service.binding) Message
> --> (service.interface SDO) --> (component.interface, Message)
> (3:51:12 PM) rfeng: by default, it goes from Message to SDO and then
back
> to Message (not sure the 2nd part is possible)
> (3:51:31 PM) rfeng: but we can optimize to have Message --> Message
> (3:52:01 PM) rfeng: because the service.interface is for wiring purpose
> (3:53:21 PM) rfeng: jboynes, we may have to transform Object[] as a
whole
> in generic cases
> (3:53:28 PM) rfeng: instead of arg by arg
> (3:54:14 PM) rajith_home: jboynes, rfeng extreamly sorry I had to change
> me kids diaper :-)
> (3:54:23 PM) rajith_home: jboynes, rfeng sorry for the delay
> (3:54:35 PM) rfeng: np, I do the same job
> (3:54:42 PM) rajith_home: LOL
> (3:54:52 PM) jboynes: one is tempted to say s**t happens
> (3:55:05 PM) rfeng: :-)
> (3:55:06 PM) jboynes: sorry
> (3:55:18 PM) rajith_home: jboynes, and it happens during the most
> important conversations
> (3:56:18 PM) jboynes: back on track, rfeng why would generics make a
> difference?
> (3:56:39 PM) rfeng: didn't mean to java generics
> (3:56:53 PM) jboynes: ah
> (3:57:32 PM) rfeng: I'm thinking of the case that transform from
Object[]
> to another Object[] (the size can be different)
> (3:58:27 PM) rfeng: for the wrapping case, we transform Object[n] to
> Object[1] (the only child is the wrapper)
> (3:58:29 PM) jboynes: wouldn't arg-by-arg just be a series of Object[]
> transforms
> (3:58:56 PM) jboynes: Object[s1, s2] -> Object[t1, s2]
> (3:59:13 PM) rfeng: yes it is
> (3:59:29 PM) rajith_home: ok so we need to handle the message -->
message
> case and then object[] ---n transformations -- object[] ?
> (3:59:47 PM) jboynes: so its a transform of an Object[] to an Object[]
> with different contnt
> (3:59:52 PM) jboynes: content
> (3:59:58 PM) rajith_home: yes
> (4:00:03 PM) rfeng: yes
> (4:00:47 PM) tsee left the room (quit: Read error: 110 (Connection timed
> out)).
> (4:00:54 PM) rajith_home: but when u code the invoker and the service
> which data type should u work with? thats where I am convinced, what
should
> expect in the payload in the invoke method
> (4:01:04 PM) rfeng: so the incoming data is Object[] {s1, s2}
> (4:01:20 PM) jboynes: rajith_home: which invoker?
> (4:01:20 PM) rfeng: then it got converted to {Message} if we follow
option
> 2
> (4:01:34 PM) rajith_home: sorry conviced should be changed to confused
:-)
> (4:02:04 PM) rfeng: then the target invoker should just send the Message
> out
> (4:02:34 PM) rajith_home: JMSTargetInvoker invoke()
> (4:02:55 PM) jboynes: rfeng: you're saying the target invoker for the
JMS
> binding should expect to have a Message in the payload
> (4:02:57 PM) jboynes: ?
> (4:03:13 PM) rfeng: for option 2
> (4:03:18 PM) jboynes: or actually, can assume it has a Message in the
> payload
> (4:04:05 PM) rfeng: what's the difference?
> (4:04:08 PM) lresende [n=
> [EMAIL PROTECTED] entered the room.
> (4:04:14 PM) jboynes: none
> (4:04:23 PM) jboynes: just trying to clarify my phrasing
> (4:04:30 PM) rajith_home: jboynes, so does it mean that we have a
> transformer registered that will convert this object array into some
> serialized format and then shove it into a jms message?
> (4:04:37 PM) rfeng: ok, that's what I meant.
> (4:04:52 PM) jboynes: I think that would be a set of transformers but
yes
> (4:05:28 PM) rfeng: it could be a transformer invoking other
transformers
> (4:05:44 PM) rfeng: using the mediator interface
> (4:05:59 PM) jboynes: or just a transform pipeline?
> (4:06:15 PM) rajith_home: can we defined the path using these
> transformers, for example [s1,s2] --> some xml --> JMS message ?
> (4:06:27 PM) rfeng: yes
> (4:06:59 PM) rajith_home: rfeng, where is that defined ? in the code? or
> in some config ?
> (4:07:32 PM) rfeng: let's assume the java interface for your JMS
reference
> is annotated with SDO databinding
> (4:08:49 PM) rfeng: then we try to convert the SDO input to XMLString
> (expressed by the JMS binding) using SDO-->XMLString transformer
> (4:10:09 PM) rajith_home: rfeng, ok
> (4:10:23 PM) rfeng: jboynes, a related question here
> (4:10:52 PM) jboynes: ok?
> (4:11:07 PM) rfeng: if I have an operation say String
> doSomething(DataObject, String, Customer)
> (4:11:22 PM) rfeng: it seems that operation level databinding is not
good
> enough
> (4:11:52 PM) rfeng: for me to identify which arg needs to convert
> (4:12:37 PM) jboynes: unless you are assuming SDO throughout, no
> (4:12:54 PM) jboynes: if Customer is e.g. JAXB then you need per-arg
> (4:13:03 PM) rfeng: should we add the parameter-level databinding back?
> (4:13:35 PM) rajith_home: rfeng, I thought we don't support mixed
argument
> types
> (4:13:43 PM) rfeng: I also have a simple case such as op(String str1,
> String str2)
> (4:13:49 PM) jboynes: i think the reason it was dropped was that we
didn't
> think anyone would be crazy enough to do that ;-)
> (4:14:10 PM) rfeng: and I expect str1 is XML but str2 is a plain string
> (4:14:33 PM) rfeng: I don't have a way to express that
> (4:15:14 PM) jboynes: physical type String, logical type an element
QName
> ?
> (4:15:41 PM) rfeng: yes, but it cannot be expressed at operation level
> (4:16:06 PM) jboynes: oh
> (4:16:09 PM) rfeng: because for str2, I want to have (String, String,
> java-data-binding)
> (4:16:39 PM) rfeng: meaning no conversion will apply to str2
> (4:17:04 PM) jboynes: sounds like per-arg is not that crazy after all
> (4:17:13 PM) rfeng: I found it different to decide which arg needs to
> convert
> (4:17:26 PM) rfeng: or not to convert
> (4:18:05 PM) rfeng: for WSDL portType, seems to be fine with
> interface-level databinding
> (4:18:46 PM) rfeng: because its types are usually modeled using XSD, and
> there should be a XML binding behind it (AXIOM, DOM, JAXB or SDO)
> (4:19:18 PM) rfeng: for java interface, it's a bit challenging
> (4:19:26 PM) rajith_home: exactly
> (4:19:52 PM) rajith_home: so do I have to support per argument level
data
> binding for jms binding as well? will it makes sense?
> (4:20:17 PM) rfeng: I don't think so
> (4:21:00 PM) rfeng: to me , the JMS message is a carrier of business
data
> which is transparent to other components
> (4:21:04 PM) rajith_home: I guess the simple case of [s1,s2] -->
> intermediate --> jms --> intermediate --> [t1,t2] is fine
> (4:21:12 PM) rajith_home: yes
> (4:21:57 PM) rfeng: if you express the requirement of an intermediate
> format, the wiring fabric can convert for you (the jms binding code)
> (4:22:51 PM) rajith_home: u mean my JMSDataBinding code will convert
from
> the object[] to lets say XML and vice verca ?
> (4:23:20 PM) rajith_home: rfeng, do u prefer that route
> (4:24:15 PM) rfeng: what's your requirement on the Object[]?
> (4:24:46 PM) rfeng: if you use the java interface to define a reference
> with JMS binding?
> (4:25:11 PM) rfeng: I mean the expectation from the JMS binding side?
> (4:25:45 PM) rajith_home: for example [string, int, string] just simple
> data types and the target component expects the same
> (4:25:59 PM) jboynes: i would think there would be multiple JMS data
> bindings
> (4:26:22 PM) jboynes: in that case what would the message be?
> (4:26:43 PM) jboynes: I can see Object[string, int, string] ->
> ObjectMessage
> (4:27:07 PM) rajith_home: the operation name is mapped as a jms propert
> and the the arguments serialized as the payload
> (4:27:27 PM) jboynes: and Object[string, int, string] -> DOM(foo:msg) ->
> TextMessage containing XML
> (4:27:38 PM) rajith_home: the serialization could be xml or java
> serialization so it could be a text msg or object or even bytes msg
> (4:27:44 PM) rfeng: maybe we should follow the java 2 WSDL doc-lit
wrapper
> mapping
> (4:27:56 PM) rfeng: then we have clean data contract
> (4:28:30 PM) jboynes: rajith_home: in that case isn't the operation name
a
> constant value
> (4:28:38 PM) jboynes: added to the specific bindng
> (4:28:55 PM) jboynes: and the binding would insert that to the Message
> (4:30:03 PM) rajith_home: yes the binding defines a operation selector
> (4:30:17 PM) jboynes: yes
> (4:30:38 PM) rajith_home: the op selector decides how to encode the
> operation name and also how to extract it from the jms message
> (4:30:44 PM) jboynes: we could actually implement that as an
> interceptor/transform
> (4:31:18 PM) jboynes: the binding service contract could be
> onMessage(Message)
> (4:31:48 PM) rfeng: yes
> (4:32:01 PM) jboynes: and an interceptor routes that to a different
chain
> based on content of the message
> (4:32:19 PM) jboynes: e.g. using the supplied OperatonSelector
> (4:32:36 PM) rajith_home: yes, if thats the case then it doesn't make
> sense to encode the operation name in the jms message and the payload
will
> contain business data instead of encoded arguments
> (4:33:01 PM) jboynes: lost me there
> (4:33:31 PM) rajith_home: sorry I replied to "the binding service
contract
> could be onMessage(Message)", didn't see your latest post
> (4:34:02 PM) jboynes: ah
> (4:34:57 PM) rajith_home: so the operation selector acts as a
transformer?
> but it doesn't define any data transformation right? it mearly describes
how
> to encode/decode the operation name from a message
> (4:35:35 PM) jboynes: I think its more of an interceptor
> (4:35:38 PM) rajith_home: so I am not sure if the op sec qualifies as a
> transformer. maybe I didn't understand your point
> (4:35:50 PM) rfeng: do you expect the JMSMessage from other non-SCA
> client?
> (4:36:03 PM) rajith_home: thats the intention of the spec group
> (4:36:09 PM) rfeng: ok
> (4:36:29 PM) rfeng: then we need to have a well-defined wire format for
> JMS message?
> (4:36:36 PM) rajith_home: specially we could be accessing a non SCA
> resource like some legacy JMS application
> (4:36:39 PM) jboynes: I'm thinking there are two service contracts in
the
> Service with a JMS binding
> (4:36:55 PM) jboynes: the first is MessageListener
> (4:36:58 PM) rfeng: seems so
> (4:37:05 PM) jboynes: that's the binding contract
> (4:37:10 PM) rfeng: 2nd is mapped interface
> (4:37:19 PM) jboynes: the other is the Service's interface e.g.
Foo.class
> (4:37:33 PM) jboynes: as defined by the <interface>
> (4:37:40 PM) rfeng: yes
> (4:38:10 PM) jboynes: the first part of the interceptor stack converts
> between those two contracts
> (4:38:55 PM) rajith_home: jboynes, when I coded the JMS service I
register
> it as a JMS listener, it picks up the message and invoke a java
interface
> after converting the payload into an object[]
> (4:39:04 PM) jboynes: e.g. using an interceptor to call the
> OperationSelector to map from onMessage to the operation in Foo
> (4:39:30 PM) rfeng: what invocation chain is the interceptor added?
> (4:39:43 PM) rfeng: the fixed onMessage operation?
> (4:39:47 PM) jboynes: yes
> (4:40:01 PM) jboynes: it maps from one chain to many
> (4:40:14 PM) rfeng: ok
> (4:40:23 PM) jboynes: rajith_home: we're trying to cut out the prozy
> invoke
> (4:40:29 PM) jboynes: s/prozy/proxy/
> (4:40:40 PM) rfeng: one inbound chain to many outbound chains to the
> target component
> (4:41:06 PM) jboynes: hmm
> (4:41:09 PM) rajith_home: jboynes, I see
> (4:41:22 PM) jboynes: one inbound chain to many inbound changes to the
> Service
> (4:41:28 PM) jboynes: s/changes/chains/
> (4:43:00 PM) rfeng: why do you need to have many inbound chains in this
> case?
> (4:43:01 PM) rajith_home: jboynes, so if we cut the proxy invoke then we
> always have fixed operation as rfeng suggested. So onMessage()?
> (4:43:31 PM) jboynes: for the binding contract yes
> (4:43:50 PM) jboynes: as that is the interface we are exposing to the
JMS
> implementation
> (4:43:57 PM) rfeng: right
> (4:44:23 PM) rajith_home: rfeng, jboynes I need to go pick up my wife
from
> school, I really hate to leave in the middle of a conversation, but have
no
> choice
> (4:44:32 PM) jboynes: [ I'm going to have to cut and run in a bit - no
> diapers, collecting kid from school ]
> (4:44:33 PM) rfeng: sure, np.
> (4:44:39 PM) jboynes: me too
> (4:44:46 PM) jboynes: sounds like a good time to take abreak
> (4:44:48 PM) rfeng: I'll think more
> (4:44:50 PM) rajith_home: rfeng, jboynes cool
> (4:45:01 PM) rfeng: ttyl
> (4:45:02 PM) jboynes: rfeng: as the last survivor, can you
summarize/post
> this to the list
> (4:45:09 PM) jboynes: please
> (4:45:09 PM) rfeng: sure
> (4:45:14 PM) jboynes: thanks
> (4:45:18 PM) rajith_home: are u guys comming to apache con?
> (4:45:29 PM) jboynes: i think I am
> (4:45:36 PM) jboynes: not confirmed yet
> (4:46:18 PM) rajith_home: we need to come to some resolution on the data
> binding stuff and the binding contract before I move any forward :-(
> (4:47:20 PM) rajith_home: ant has the patch commited to
> ../sandbox/rajith... so feel free to dig in and change stuff if u guys
wanna
> experiment
> (4:47:36 PM) rajith_home: rfeng, jboynes bye guys and thanks for the
> support
>
>