You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by ha...@apache.org on 2002/04/03 17:27:50 UTC

cvs commit: jakarta-avalon-excalibur/altrmi/src/xdocs otherfeatures.xml transports.xml altrmi.uris book.xml

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="Paul_Hammant@yahoo.com"/>
      </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="Paul_Hammant@yahoo.com"/>
      </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:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>