<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">

<head>
<meta http-equiv=Content-Type content="text/html; charset=us-ascii">
<meta name=Generator content="Microsoft Word 12 (filtered medium)">
<style>
<!--
 /* Font Definitions */
 @font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Preformatted Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:"Courier New";}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0in;
        margin-right:0in;
        margin-bottom:0in;
        margin-left:.5in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
span.HTMLPreformattedChar
        {mso-style-name:"HTML Preformatted Char";
        mso-style-priority:99;
        mso-style-link:"HTML Preformatted";
        font-family:"Courier New";}
.MsoChpDefault
        {mso-style-type:export-only;}
@page Section1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.Section1
        {page:Section1;}
 /* List Definitions */
 @list l0
        {mso-list-id:465270864;
        mso-list-type:hybrid;
        mso-list-template-ids:-9814266 -301296908 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l0:level1
        {mso-level-start-at:0;
        mso-level-number-format:bullet;
        mso-level-text:-;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:"Calibri","sans-serif";
        mso-fareast-font-family:Calibri;
        mso-bidi-font-family:"Times New Roman";}
ol
        {margin-bottom:0in;}
ul
        {margin-bottom:0in;}
-->
</style>
<!--[if gte mso 9]><xml>
 <o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
 <o:shapelayout v:ext="edit">
  <o:idmap v:ext="edit" data="1" />
 </o:shapelayout></xml><![endif]-->
</head>

<body lang=EN-US link=blue vlink=purple>

<div class=Section1>

<p class=MsoNormal>[Overall Impressions]<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>According to the author, they are trying to:<o:p></o:p></p>

<p class=MsoListParagraph style='text-indent:-.25in;mso-list:l0 level1 lfo1'><![if !supportLists]><span
style='mso-list:Ignore'>-<span style='font:7.0pt "Times New Roman"'>         
</span></span><![endif]>Discover Support Using Disco<o:p></o:p></p>

<p class=MsoListParagraph style='text-indent:-.25in;mso-list:l0 level1 lfo1'><![if !supportLists]><span
style='mso-list:Ignore'>-<span style='font:7.0pt "Times New Roman"'>         
</span></span><![endif]>Retrieve a list of support Ad-Hoc Commands along with
enough metadata to call those commands (via XSD, in a way similar to WSDL)<o:p></o:p></p>

<p class=MsoListParagraph style='text-indent:-.25in;mso-list:l0 level1 lfo1'><![if !supportLists]><span
style='mso-list:Ignore'>-<span style='font:7.0pt "Times New Roman"'>         
</span></span><![endif]>Call the Commands in either a synchronous or async way.
<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>Essentially (this is me talking, interpreting what I think
the XEP author said), they’re looking to replace SOAP Based Web Services
with XMPP Based services. They’re looking to do this due to the nature of
their very long running transactions and the ability of an XMPP Service to send
an “all done” message, and for the client to get it at some point
in the future. The Async Nature of XMPP is really the main reason for things.<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>(Overall, I quite like the goals here. I think building rich
Services atop XMPP will be important to the long term success of the protocol,
as well as the continued divergence from “just an IM protocol”.)<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>Upon first read of the XEP, I didn’t understand this –
so clarity was (for me) missing. <o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>So, the overaly purpose of the XEP is to build a framework
for a SOA style Service. I’m not quite sure how this differs from XML-RPC
over XMPP, or even SOAP over XMPP, but that’s the case. I think it’s
primary difference is the desire for an async result due to a long running
process. <o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>[Object Spaces]<o:p></o:p></p>

<p class=MsoNormal>The XEP author is defining a custom namespace, called Object
Spaces, in which parameters can be passed to & from the Service. These are
defined to look like:<o:p></o:p></p>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New";
color:black'><x xmlns='http://xmpp.org/protocol/io-object-form'
type='submit'><o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New";
color:black'>        <in><o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New";
color:black'>                <proteinname>CAB08284</proteinname><o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New";
color:black'>        </in><o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New";
color:black'></x><o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New";
color:black'><o:p> </o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New";
color:black'>I don’t understand how this differs from an X-Data Form. The
author keeps saying that X-Data won’t do the trick, but either I’m
missing something or the author is missing something. I don’t understand
why, during discover, the service wouldn’t send back a data form (this is
the required argument list):<o:p></o:p></span></p>

<pre><x xmlns='jabber:x:data' type='form'><o:p></o:p></pre><pre>      <title>Method Arguments</title><o:p></o:p></pre><pre>      <field type='hidden' var='FORM_TYPE'><o:p></o:p></pre><pre>        <value>Object Spaces</value><o:p></o:p></pre><pre>      </field><o:p></o:p></pre><pre>      <field type='text-multi' var='proteinname'><required/></field><o:p></o:p></pre><pre></x><o:p></o:p></pre><pre>    <o:p></o:p></pre><pre>.. and the client would then fill this form out as a submit form:<o:p></o:p></pre><pre><x xmlns='jabber:x:data' type=submit><o:p></o:p></pre><pre>      <field type='hidden' var='FORM_TYPE'><o:p></o:p></pre><pre>        <value>Object Spaces</value><o:p></o:p></pre><pre>      </field><o:p></o:p></pre><pre>      <field type='text-multi' var='proteinname'><value>0</value></field><o:p></o:p></pre><pre></x><o:p></o:p></pre><pre><o:p> </o:p></pre>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New";
color:black'>The resulting message would also have an X-Data from sent from the
server back to the client with the results.<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New";
color:black'><o:p> </o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New";
color:black'>I can see defining some new field types:<o:p></o:p></span></p>

<p class=MsoListParagraph style='text-indent:-.25in;mso-list:l0 level1 lfo1'><![if !supportLists]><span
style='font-size:10.0pt;color:black'><span style='mso-list:Ignore'>-<span
style='font:7.0pt "Times New Roman"'>         
</span></span></span><![endif]><span style='font-size:10.0pt;font-family:"Courier New";
color:black'>Base64 Binary Data <o:p></o:p></span></p>

<p class=MsoListParagraph style='text-indent:-.25in;mso-list:l0 level1 lfo1'><![if !supportLists]><span
style='font-size:10.0pt;color:black'><span style='mso-list:Ignore'>-<span
style='font:7.0pt "Times New Roman"'>         
</span></span></span><![endif]><span style='font-size:10.0pt;font-family:"Courier New";
color:black'>XML Data<o:p></o:p></span></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>I understand the argument, “This is machine to machine
communication, and X-Data is meant for human-to-machine communication”,
but I think it’s flawed. X-Data (to me) seems to allow machine-to-machine
with no trouble. <o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>[Async Results]<o:p></o:p></p>

<p class=MsoNormal>I’m not sure the proposed mechanism for Async Results
will work the way they’re intended. Sending a Message to a bare JID to
indicate, “I’m done” is (in my experience) somewhat bug prone.
It’s possible 2 resources for that JID are online, and there’s no
guarantee the right resource will get the result. The Offline delivery
mechanism is nice and almost gets us what we want, but it’s still not
quite right. <o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>I’m tempted to go a slightly different route (I’ve
never tried it, but it seems more elegant):<o:p></o:p></p>

<p class=MsoNormal>1 – Create a GUID JID for each problem that’s submitted
and for which an async result is expected. <o:p></o:p></p>

<p class=MsoNormal>2 – Have your Bare JID subscribe to the presence of
the new JID. <o:p></o:p></p>

<p class=MsoNormal>3 – When the Problem is complete, have the problem
announce “available” presence. <o:p></o:p></p>

<p class=MsoNormal>4 – At some point in the future, delete the JID. <o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>This has a few advantages: <o:p></o:p></p>

<p class=MsoNormal>1 – All Resources waiting on the result get notified. <o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>2 – When my client comes online, I can check using
IQ:Last to see if the problem has been completed while I was away. This is done
in a stateless way, so if another client comes online and checks, they also see
things are completed. If Offline Messages are used, only the first client to
check sees the result. <o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>3 – You can provide status updates via Presence
Priorities. You can continually announce “unavailable”, but include
whatever status update you want. This would allow a GUI to be put somewhere
showing progress. <o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>--<o:p></o:p></p>

<p class=MsoNormal>Chris Mullins<o:p></o:p></p>

</div>

</body>

</html>