<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.2//EN" "./dtd/document-v12.dtd">
<document> 
  <header> 
    <title>WebServices - Axis</title> 
  </header> 
  <body> 
    <section>
      <title>WebServices - Axis - </title>
<p>
<h2>Notes from Axis Face-to-Face Meeting at Allaire, Newton, MA.  </h2>
<h3>Date: 28 Feb 2001</h3>
<b>Attendees:</b>
<ul>
<li>Glen Daniels, Allaire.  Host</li>
<li>Doug Davis, IBM Raleigh</li>
<li>Steve Graham, IBM Raleigh</li>
<li>Jim Stearns, HP Redmond</li>
<li>Jacek Kopecky,  Idoox, Prague</li>
<li>Waqar Sadiq, Vitria</li>
<li>James Snell, IBM Fresno (by phone)</li>
<li>Stuart Williams, HP Bristol</li>
</ul>

<p>Glen expressed some frustration at the lack of good tools that Apache provides for project management.  The mailing list archives kind of bite, etc.  SourceForge seems to have good tools for scheduling / task management / collaboration...</p>

<p><i><b>ACTION ITEM : Glen will email Sam and ask about the possibility of "co-locating" the project with SourceForge? Investigating other tools and solutions?</b></i></p>

<p>Waquar Sadiq from Vitria, a new member of the team, volunteered to be Project Manager for Axis!  (applause applause)</p>

<p>Steve presented a short Powerpoint presentation to frame the meeting.</p>

Axis 1.0 will be a serious product.  As such, it will have:
<ul>
<li>product-level code</li>
<li>product-level testing</li>
<li>product-level doc + examples</li>
<li>product-level performance</li>
</ul>

<h4>Goals for the 1.0 release:</h4>
<ul>
<li>Full SOAP 1.1 implementation</li>
<ul>
  <li>Interoperability testing/discussions to answer ambiguities</li>
  <li>Intermediary implementation must be in 1.0 release</li>
</ul>
<li>Relative priority (Glen)</li>
   <ul>
   <li>Full implementation of 1.1</li>
   <li>Customer requirements</li>
   <li>Where xmlp is headed (Glen, Waqar, Jacek are all on XML Protocol group)</li>
   </ul>

<li>Fast (need to do the streaming parsing)</li>
<li>Pluggable</li>
</ul>

<p>Support for requestor/provider/intermediary (one-way, initiated by either side); client notification.
Support for request/response and the other 3 transmission primitives from WSDL</p>

<p>Glen : Don't think we should make the axis-user list until 0.9 or beta 1.0...</p>

<p>Issue : Migrating from Apache SOAP to Axis - should be easy, but how easy?</p>

<p>Waqar: We should be tracking ebXML as well as XMLP...</p>

<h5>Testing/Process-related discussion...</h5>
<ul>
<li>coding standards</li>
<li>test-case centric development</li>
<li>regression test cases</li>
<li>scenario-centric design/architecture</li>
<li>Unit tests are good, but not sufficient</li>
<li>Is JUnit too oriented towards "white box" unit testing?  Jim says they're using it as a framework at HP for both unit and functional.</li>
<li>Three types of testing - unit, functional integration, interop</li>
<li>conformance testing; maybe use the userland validator? leverage external efforts? Microsoft "bakeoff"?</li>
<li>interop testing with big players (.NET) is crucial!</li>
<li>Requiring some level of testing implementation from commmitters is key.  The question is how to best codify this in a strong but not draconian way</li>
</ul>

The plan for the rest of today:
<ul>
<li>Walk through requirements doc</li>
<li>Generate scenarios</li>
<li>walk through scenarios, updating requirements</li>
</ul>


<h3>Requirements discussion</h3>
<ul>
 <li>lose
     1.1 and 1.1.1: architecture is settling  not overdoing use of handlers</li>
 <li>server-initiated
     solicit/response (in WSDL spec)</li>
 <li>4
     options (synch/asynch, client-initiated vs server-initiated)</li>
 <ul type="circle">
  <li>requestor/provider
      </li>
  <li>Facets
      (Steve):</li>
  <ul type="square">
   <li>Who
       initiates (server or client)</li>
   <li>1-way/2-way</li>
   <li>asynch/synch</li>
   <li>(1-way
       synch makes no sense, so 7 options)</li>
   <li>2-way
       asynch?</li>
  </ul>
  <li>Glen:
      what is underlying protocol doesn't support synchronous (such as smtp)?</li>
  <li>Waqar:
      what about async request expecting ack, vs. one not expecting one?</li>
  <li>Is this (a)synchronous at the <b>API</b> level, or the <b>transport</b> level?</li>
  <li>Call
      this topic "message exchange patterns"</li>
  <li>"Synchronous"
      == blocking</li>
  <li>everything is initiated
      by a client of the axis engine, which can be on requestor,
      intermediary, or provider</li>
  <li>Q:
      in a one-way WSDL message, can you specify a fault? James: yes, but spec doesn't say what
      to do with the fault. Stuart:
      thinks treatment of fault is above the message layer.</li>
  <li>WSDL
      1.1 one-way only has input, but doesn't have output or fault (Steve
      brought up)</li>
  <li>Stuart:
      Service in wsdl is more like operation.</li>
 </ul>
 <li>What
     can we dispatch by?</li>
 <ul type="circle">
  <li>Dispatch
      by transport URL</li>
  <li>Dispatch
      by HTTP SOAPAction</li>
  <li>Dispatch
      by QName of first body entry</li>
  <li>Dispatch,
      using custom handler, by any information available)</li>
 </ul>
 <li>How
     many RPC's per message, and where</li>
 <ul type="circle">
  <li>Axis
      will NOT support a RPC invocation specified in a header</li>
  <li>Axis
      will support only one RPC invocation per body entry.</li>
  <li>Suggestion to remove "first" from body child, 6-2 against.</li>
 </ul>
 <li>XML
     Prototocol - Status</li>
 <ul type="circle">
  <li>Something
      will be published in April  issues with SOAP 1.1 that need to be fixed</li>
  <li>July-ish:
      first XML protocol spec  soap 1.1 with fixes to some issues</li>
  <li>November:
      proposed recommendation</li>
  <li>December:
      1.0 spec  recommendation</li>
 </ul>
 <li>Intermediaries:
     Glen: TRLSoap has implemented them to some extent.</li>
 <ul type="circle">
  <li>Steve:
      state of the art is Single-hop fake.</li>
 </ul>
 <li>SOAP
     Encoding Support</li>
 <ul type="circle">
  <li>We
      use for RPC, and yet won't require xsi:type (<b>type info can come from a
      reference to a schema outside the message</b>) </li>
 </ul>
 <li>Performance</li>
 <ul type="circle">
  <li>Action
      Item: need to research alternative benchmarks for SOAP performance (Jim
      volunteered) and for interoperability.</li>
  <ul type="square">
   <li>UI</li>
  </ul>
  <li>Glen
      was willing to prioritize "not significantly slower" as want but not
      required. Jim advocated that we
      need at release, and Steve agreed.</li>
 </ul>
</ul>

<p>Discussion of metrics - some arguments as to whether it's a Handler or an API.  Well, logging is an API, maybe metrics are as well...</p>

<p><i><b>ACTION ITEM: Glen will investigate JRun's metrics API and share with the group.</b></i></p>

<p>We need to have some kind of "Required header" parameter either in the WSDD or as an API in the Handler itself if we want "pre-flight" knowledge of required headers (and perhaps a default fault response)...</p>

<p>Big discussion about header handling - jukebox handler, there were worries that it's a security risk.  Glen notes that the handlers that are in the jukebox's registry are limited, just like the handlers on a chain, you just don't need to call them all in order...doesn't seem like a risk.</p>


<hr/>

<h2>Day 2</h2>
<h3>1 March 2001</h3>

<b>Attendees:</b>
<ul>
<li>Glen</li>
<li>Steve</li>
<li>Doug</li>
<li>Jacek</li>
<li>Jim</li>
</ul>

Agenda (wish list):
<ul>
<li>Finish revision of requirements</li>
<li>Develop rough use case scenarios</li>
<li>Revisit requirements after use cases</li>
<li>Glen: supplier pattern</li>
<li>Steve: WSDD</li>
<li>All: streaming parser</li>
</ul>

<p>Code on BOTH client and Server looks like this?</p>

<code>
Handler handler = Axis.getHandler(name1);<br/>
MessageContext mc = new MessageContext();<br/>
// set up MC properties, including target!<br/>
handler.invoke(mc);<br/>
</code>

<h3>Requirements review, continued</h3>

<ul>
 <li>Service
     Description</li>
 <ul type="circle">
  <li>Interaction
      between WSDL and WSDD. Each can
      be used to create the other?</li>
  <li>Steve:
      hard to generate wsdl for document (rather than rpc).</li>
  <li>Jacek:
      treat the WSDD as the master</li>
  <li>Jim:
      no, WSDL is the standard, WSDD is just our team's proposal.</li>
  <li>Glen:
      WSDD may not contain all the info needed to generate a WSDL file</li>
  <li>WSDD
      can contain either (1) pointer to existing WSDL file or (2) enough data
      (possibly, but not certainly) to generate a WSDL from scratch, or (3)
      enough data which in combination with existing WSDL, to generate an
      updated WSDL.</li>
  <li>WSDD
      should provide cross-checking (WSDL not consistent with WSDD)</li>
  <li>(I
      missed some issues here: there's flexibility here that makes this
      difficult  e.g. what serializer?)</li>
  <li>DISCO
      on Axis root added.</li>
  <li>Client-side</li>
  <ul type="square">
   <li>Default
       will be simple case: generate a proxy</li>
   <li>But
       WSDL can require a digital signature header  want to be able to have
       WSDD on client side to deploy a chain that includes a digital signature
       generator.</li>
   <li>Doug:
       where to get digital signature handler?</li>
	   <ul>
   <li>Steve/Glen: wsdl can include pointer to handler.</li>
   <li>Glen: there are extension elements in
       WSDL.</li>
	   </ul>
   <li>Added
       as wish proxy generation from wsdl (and wsdd). Stated: java, possibly c++</li>
  </ul>
 </ul>
 <li>Platform</li>
 <ul type="circle">
  <li>Surprising
      amount of interest in doing C++ implementation (Glen, Steve, Jacek) for
      performance, but was listed as wish [P5]. Background: James Snell added this, including using local
      services (e.g. COM).</li>
 </ul>
 <li>Transports
     </li>
 <ul type="circle">
  <li>SMTP
      sender and POP3 poller.  Assume external mail server
      available.  This is what
      Apache SOAP 2 does.</li>
  <li>Glen:
      do we want to provide a generic (fast) transport between handlers?</li>
  <ul type="square">
   <li>Transport
       Sender</li>
   <li>Glen:
       all transport-specific chains end in a router. Oops, maybe not; if no router at end, look at target
       service field and if not null, invoke that service; then look <i>again</i> to see if target service is not null.  Loop until null.</li>
   <li>Order</li>
   <ul>
    <li>Transport
        chain  no router</li>
    <li>Global
        chain  no router</li>
   </ul>
  </ul>
  <li><i>(Lots
      of discussion on axis engine and dispatching)</i></li>
  <li>Jim
      asked whether any of these transport cases could be punted  these
      asymmetric cases of HTTP request asking for SMTP response. Glen, Steve, Jacek all said no, we
      need to support all of these.</li>
  <li>(Discussion
      over how to send asymmetric response to request sent over one-way
      protocol: callback, or configure in a Transport Sender and if return
      message is non-null, send and then null out return message so it. Callback or null-out message? Steve and Jacek: putting up to
      committer vote would be a big morass? Jacek: ok, grumble, fallback.</li>
  <li>Doug:
      are we going to support multi-cast? Jacek: why not? Jim: why?</li>
  <li>Things
      that Transport Listener must call and set:</li>
  <ul type="square">
   <li>Static
       handler Axis.getHandler(String tlID);</li>
   <li>Request
       chain bag ID</li>
   <li>Response
       chain bag ID</li>
   <li>Target
       bad ID</li>
   <li>Transport
       Sender</li>
  </ul>
  <li>Jacek
      prefers many small registries over fewer larger ones. Glen said that smaller hash tables
      perform lookups faster.</li>
  <ul type="square">
   <li>Services (deployed handlers)</li>
   <li>Handlers
       (available handlers)</li>
   <li>(After
       much discussion, settled on 2)</li>
  </ul>
 </ul>
 <li>Data
     Encoding</li>
 <ul type="circle">
  <li>Steve:
      (de)serialization only makes sense for RPC, not document handling.</li>
  <li>Jacek
      would love to see general serialization at 1.0 release.</li>
  <li>Serialization
      may occur anywhere, not in one fixed place in Axis architecture.</li>
 </ul>
</ul>


<h2>Streaming Parser Discussion</h2>

<p>For reading in input, we use the PDOM model - <br/>
We have either a SAX event source or a pull parser underneath something that looks like JDOM.<br/>
In the SAX case:<br/>
<ol>
<li>a thread starts processing the SAX event stream, and blocks until told to continue.</li>
<li>When people ask for a particular element (i.e. getNextChild()), the parser thread unblocks, and runs the SAX event stream through, building up the JDOM object model, until it gets to the desired element/attribute/etc.  Then it blocks again, and returns control to the getWhatever() API.</li>
</ol>
</p>
Sot the Message API gets: (or maybe JDOM gets the latter three)<br/><br/> 
<code>
getAsElement()<br/>
parseAsSAX(SAXHandler)<br/>
getAsXMLStream()<br/>
getAsByteStream()<br/>
</code>

<p>Does getAsByteStream() terminate the option of doing anything else afterwards?</p>

How do we test this?  Metrics:
<ol>
<li>Use PDOM, read first few elements, then stream rest to file</li>
<li>Use JDOM, process first few elements, then write to file</li>
<li>Stream bytes from file to file</li>
</ol>
<p>do this for small (1K), medium (50K), and large (10 meg) files</p>

<p>On the output side, we should be able to setAsStream, and hand the element a stream which will eventually be pulled for content when someone does a getAsStream() on the whole doc.  This means a proxy stream which clunks its way down the message, draining streams it encounters along the way.</p>

<p>Open question - is it easy/efficient to get a JDOM Element as a stream/string, as opposed to a whole doc?  Looks like Element.getSerializedForm() isn't implemented yet?</p>

<p>Pull parser discussion - if possible, a real pull parser would avoid the multi-threading, and probably perform better than the SAX-based PDOM model.  We'll look into this!</p>

<hr/>

<p>Project Participants:</p>

<ul>
 <li>PM: Waqar
     (Vitria)</li>
 <li>Coders:
     Doug, Steve, Glen, Jacek, Jim, James, Yuichi, Ryoh</li>
 <ul type="circle">
  <li>Glen
      and Doug can work on this a lot</li>
  <li>James
      doing stuff</li>
  <li>Steve
      doesn't have much time for coding</li>
 </ul>
 <li>Others:
     George, Chris Nelson, Kevin Mitchell, Sanjiva, Matt, </li>
 <li>Sam
     for political and process stuff.</li>
 <li>Connection
     to XML Protocol: Glen, Waqar, Jacek</li>
 <ul type="circle">
  <li>Stuart
      for Conversations</li>
 </ul>
 <li>Connection
     to Apache 2.x: Doug, Glen, Sanjiva</li>
 <li>(Glen:
     SOAP 2.1 documentation is bad, could impact us  less credibility).</li>
</ul>
</p>
    </section>
  </body>
</document>
