hammant     02/04/03 07:27:50

  Modified:    altrmi/src/xdocs altrmi.uris book.xml
  Added:       altrmi/src/xdocs otherfeatures.xml transports.xml
  Log:
  more blurb for altrmi
  
  Revision  Changes    Path
  1.2       +2 -0      jakarta-avalon-excalibur/altrmi/src/xdocs/altrmi.uris
  
  Index: altrmi.uris
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/altrmi/src/xdocs/altrmi.uris,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- altrmi.uris       3 Apr 2002 13:59:22 -0000       1.1
  +++ altrmi.uris       3 Apr 2002 15:27:50 -0000       1.2
  @@ -1,4 +1,6 @@
   index.html
  +otherfeatures.html
  +transports.html
   images/add.jpg
   images/fix.jpg
   images/remove.jpg
  
  
  
  1.2       +2 -0      jakarta-avalon-excalibur/altrmi/src/xdocs/book.xml
  
  Index: book.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/altrmi/src/xdocs/book.xml,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- book.xml  3 Apr 2002 13:59:22 -0000       1.1
  +++ book.xml  3 Apr 2002 15:27:50 -0000       1.2
  @@ -12,6 +12,8 @@
       <menu-item type="external" id="ExcaliburHome" label="Excalibur Home" 
href="http://jakarta.apache.org/avalon/excalibur/index.html"/>    
       <menu-item type="external" id="downloads" label="Download" 
href="http://jakarta.apache.org/builds/jakarta-avalon/apps"/>
       <menu-item type="external" id="api-docs" label="API Docs" 
href="api/index.html"/>
  +    <menu-item label="Other Features" href="otherfeatures.html"/>
  +    <menu-item label="Transports" href="transports.html"/>
     </menu>
   
   </book>
  
  
  
  1.1                  
jakarta-avalon-excalibur/altrmi/src/xdocs/otherfeatures.xml
  
  Index: otherfeatures.xml
  ===================================================================
  <?xml version="1.0"?>
  
  <!DOCTYPE document SYSTEM "dtd/document-v10.dtd">
  
  <document>
    <header>
      <title>Excalibur AltRMI / Overview</title>
      <authors>
        <person name="Paul Hammant" email="[EMAIL PROTECTED]"/>
      </authors>
    </header>
    <body>
      <s1 title="Introduction">
        <p>
          Blah
        </p>
      </s1>          
      <s1 title="Features">
        <p>                
          Blah     
        </p>
        <s2 title="Choice of location of generated Proxy class.">            
          <p>
            Classes providing client side implementation of the transported 
          interface(s) can be either on the client side or the server side (and 
          duly transported) at time of lookup.  On the server side, the proxy 
classes
            can be generated in advance (Ant Task) or at runtime - javac is 
invoked.
          </p>
        </s2>
        <s2 title="Choice of castability of generated proxy class.">            
          <p>
            To suit remote facilities that are happy with refection and do 
          not need to cast to an interface to use a bean (I am thinking of 
          BeanShell) the proxy class can be generated without specifying
          that it implements the interface(s).
          </p>
        </s2>
        <s2 title="Suspendable/Resumable service.">            
          <p>
            The Server supports suspend() and resume().  With the current impl 
this 
          replies in a timely fashion to the client that the client should try
          later.  The client waits for the notified amount of time and 
seamlessly
          tries the request again.  A server could cycle through suspended and 
back
          to resumed will not affect the client except for the a delay.
          </p>
        </s2>
        <s2 title="Recovering transport">            
          <p>
            AltRMI tries to recover its transports should they fail.  The 
recovery 
          is pluggable in that the developer can choose when/how/if the 
connection
          handler tries to recover the connection.  Any inprogress, but
          disconnected method invocation will attempt to be recoved and just 
return
            as normal, albeit after a longer than normal delay.
          </p>
        </s2>
        <s2 title="Event API">            
          <p>
            For suspensions, abnormal ends of connection etc, there is a 
listener 
          that can be set that will allow actions to be taken.  Abnormally 
          terminated connections will by default try to be reconnected, the 
            listener can decide if, how many, and how often the retries occur.
          </p>
        </s2>
        <s2 title="Pluggable Transport indenpendant keep-alive concept.">       
     
          <p>
            On the client side, there is an API for a pluggable pinger.  While 
the server
          may support timeouts for client connections, the client could choose 
to
            overcome that default policy with a ping concept.
          </p>
        </s2>
        <s2 title="Unpublishable and republishable API">            
          <p>
            The server is able to unpublish a service.  In conjuction with 
          suspend()/resume() a service can be republished, upgraded etc
          whilst in use, or just offlined.
          </p>
        </s2>
        <s2 title="Startable API for Server">            
          <p>
            The server implements and acts upon start() and stop() methods.
          </p>
        </s2>
        <s2 title="Not just pass by value.">            
          <p>
            AltRMI started life as 'pass by value' only.  In now supports 
return 
            types and parameters wrapped in another AltRMI Facade.
          </p>
        </s2>
        <s2 title="No duplicate instances.">            
          <p>
            For Facades, if you call Person p = getPerson("Fred") twice you 
will get 
          the same instance on the client side is it is the same instance on 
the 
            server side.        
          </p>
        </s2>
        <s2 title="Load balancing server grouping">            
          <p>
            In some configurations, the client side can have multiple servers 
it 
            will forward calls to (TODO).
          </p>
        </s2>
        <s2 title="">            
          <p>
            Blah
          </p>
        </s2>      
      </s1>       
    </body>
    <footer>
      <legal>
        Copyright (c) @year@ The Jakarta Apache Project All rights reserved.
        $Revision: 1.1 $ $Date: 2002/04/03 15:27:50 $
      </legal>
    </footer>
  </document>
  
  
  
  1.1                  jakarta-avalon-excalibur/altrmi/src/xdocs/transports.xml
  
  Index: transports.xml
  ===================================================================
  <?xml version="1.0"?>
  
  <!DOCTYPE document SYSTEM "dtd/document-v10.dtd">
  
  <document>
    <header>
      <title>Excalibur AltRMI / Overview</title>
      <authors>
        <person name="Paul Hammant" email="[EMAIL PROTECTED]"/>
      </authors>
    </header>
    <body>
      <s1 title="Introduction">
        <p>
          AltRMI has pluggable and reimplementable transports.  They differ in 
terms of speed and layers of transport.  Some are in VM, others between VMs 
using sockets and various Java concepts.
        </p>
      </s1>          
      <s1 title="Transports">
        <p>                
          Blah     
        </p>
        <s2 title="Plain Sockets / ObjectStream &amp; CustomStream varients">   
         
          <p>
            Blah
          </p>
        </s2>
        <s2 title="Over RMI">    
          <p>
            Blah
          </p>            
        </s2>
        <s2 title="Piped with same VM / ObjectStream &amp; CustomStream 
varients">    
          <p>
            Blah
          </p>      
        </s2>
        <s2 title="Direct within same VM">    
          <p>
            Blah
          </p>      
        </s2>    
      </s1>
      <s1 title="Future Transports">    
        <p>
          <ul>
            <li>SOAP - Might require additional undynamic "toWSDL()" step.</li>
          <li>CORBA - Might require additional undynamic "toIDL()" step.</li>
          <li>JMS</li>
          <li>UDP</li>
          <li>Over RMI over IIOP</li>
          <li>Over JMS</li>
          <li>Over RMI over HTTP</li>
          <li>Over HTTP (custom impl)</li>
          <li>TLS enabled versions of many of the above.</li>
          </ul>
        </p>      
      </s1>
      <s1 title="JNDI">    
        <p>
          Blah
        </p>      
      </s1>
      <s1 title="Speed">    
        <p>
          Counting the number of 'void testSpeed()' invocations in 10 seconds,
          we can guage the differences (my Athlon900 machine)
            
  
        </p>
            <s2 title="AltRMI types over TCP/IP">
            <p>
            For remote publication<br/>
            <br/>
            Speed Test type                   Count Relative<br/>
            ------------------------------- ------- --------<br/>
            a) ObjectStream over sockets #2    2702     1.00<br/>
            b) Over RMI                        4359     1.61<br/>
            c) CustomStream over sockets       6069     2.25<br/>
            d) ObjectStream over sockets #1   10088     3.73<br/>
  
              </p>          
              </s2>
            <s2 title="AltRMI types in the same VM">
            <p>
  
            These are useful for complete classloader separation of interface 
&amp; impl using 
            different classloaders. Impl and 'remote' proxy do not need to see 
the same 
              interfaces etc..<br/>
              <br/>
            Speed Test type                   Count Relative<br/>
            ------------------------------- ------- --------<br/>
            e) ObjectStream over Pipe #2      12095     4.48<br/>
            f) Direct Marshalled #3           20759     7.68<br/>
            g) ObjectStream over Pipe #1      61166    22.64<br/>
            h) Direct Unmarshalled #        2391498   885.08<br/>
            
            #1 Without calling reset() as workaround to the ObjectStream bug
            #2 With calling reset() as workaround to the ObjectStream bug
            #3 Completely separates classloaders of client and server. Requires 
               a thread for each though.
            #4 Good as DynamicProxy for separation. Does not separate 
classloaders
               of client and server.
            </p>
            </s2>
            <s2 title="Non AltRMI types">
            <p>
  
            - In VM, without using AltRMI - for comparison.
            - The inteface, impl and proxy cannot be separated in terms of
              branches of classloader for these three. The same interfaces 
              etc must be visible to both impl and proxy.
              <br/>
            Speed Test type                   Count Relative<br/>
            ------------------------------- ------- --------<br/>           
            i) DyanmicProxy #5<br/>
               (copied from Excalibur)     20282070  7506.32<br/>
            j) Hand-coded proxy #5         41214422 15253.30<br/>
            k) No Proxy #5                 42384804 15686.46<br/>
            <br/>
            #4 - For all of these three, the actual timing may slow down the 
test.<br/>
             </p>      
             </s2>
      </s1>       
    </body>
    <footer>
      <legal>
        Copyright (c) @year@ The Jakarta Apache Project All rights reserved.
        $Revision: 1.1 $ $Date: 2002/04/03 15:27:50 $
      </legal>
    </footer>
  </document>
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to