Portable Interceptors



 

Introduction

 

In the context of the IRL Project, a fundamental role is accomplished by CORBA Portable Interceptors.

CORBA Request Portable Interceptors allow to intercept messages flowing between clients and servers and to modify messages as well as the invocation path, even on the basis of the information contained in the messages (with some limitation). In particular, Portable Interceptors are a useful tool in the contex of the IRL Project to let a CORBA client holding an Interoperable Object Group Reference invoke an object group and obtain replication and failure transparency. In IRL, this task is accomplished in a transparent way by the Outgoing Request GateWay (ORGW, see also the Architecture page).

To evaluate Portable Interceptor's performances on Java ORBs, we run a wide set of experiments on three distinct Java ORBs, namely JacORB, ORBacus for Java, and Orbix 2000. The code is available to download.

contact: Carlo Marchetti, Luigi Verde - carlo.marchetti@dis.uniroma1.it, verdefl@tin.it

 

How to run the experiments

 

The experiments,grouped for packages, are the following:

  1. Base
  2. PIno_op
  3. PIPermanent
  4. PINonPermanent
  5. Piggybacking
  6. NonPerm1ORBCollocDyn
  7. Perm1ORBCollocDyn
  8. NonPerm1ORBCollocStatic
  9. Perm1ORBCollocStatic
  10. NonPerm2ORBCollocDyn
  11. Perm2ORBCollocDyn
  12. NonPerm2ORBCollocStatic
  13. Perm2ORBCollocStatic
  14. NonPermNonCollocDyn
  15. PermNonCollocDyn
  16. NonPermNonCollocStatic
  17. PermNonCollocStatic

We can group them in four classes: Landmarks, PortableInterceptors, CollocatedProxy and NonCollocatedProxy. For each example, a client performs a burst of requests to the server in order to evaluate two parameters: the latency (averange, min and max) and the throughput.

Landmarks

This section comprises:

  • Base
  • PIno_op

The Base example is the static (stub-skeleton) case used as landmark. The PIno_op calculates the cost added by a no-op.

To run an experiment (i.e. Base):

java [ORB-Properties] Base.MBServer

java [ORB-Properties] Base.Client

 

PortableInterceptors

This section includes:

  • PINonPermanent
  • PIPermanent
  • Piggybacking

An interceptor can redirect a client request throwing a LOCATION_FORWARD exception (PINonPermanent case) or all the client requests throwing a LOCATION_FORWARD_PERMANENT exception (PIPermanent case). It is also possible to piggyback information (i.e. a password) from the client orb to the server orb adding service contexts to the message (Piggybacking case).

To run an experiment (i.e. PIPermanent):

java [ORB-Properties] PIPermanent.MBServer

java [ORB-Properties] PIPermanent.Client

 

CollocatedProxy

This section can be divided into two subclasses: 1ORBCollocated and 2ORBCollocated.

 

1ORBCollocated

  • NonPerm1ORBCollocDyn
  • Perm1ORBCollocDyn
  • NonPerm1ORBCollocStatic
  • Perm1ORBCollocStatic

 

 

The Proxy is a middle-tier between the Client and the Server and it is a CORBA object collocated in the same Client addressable space. The client requests are redirected by the PortableInterceptor to the Proxy that then invokes the Server. The Proxy can be static (receives the client request through the skeleton and then invokes the Server by stub) or dynamic (the same operation with DSI and DII).

To run an experiment (i.e. NonPerm1ORBCollocDyn):

java [ORB-Properties] NonPerm1ORBCollocDyn.MBServer

java [ORB-Properties] NonPerm1ORBCollocDyn.Client

 

2ORBCollocated

  • NonPerm2ORBCollocDyn
  • Perm2ORBCollocDyn
  • NonPerm2ORBCollocStatic
  • Perm2ORBCollocStatic

 

 

How the picture shows, the only difference from the previous case is that the Proxy and the Client are running in the same process, but on distinct ORBs.

To run an experiment (i.e. NonPerm2ORBCollocDyn):

java [ORB-Properties] NonPerm2ORBCollocDyn.MBServer

java [ORB-Properties] NonPerm2ORBCollocDyn.Client

 

NonCollocatedProxy

This section includes:

  • NonPermNonCollocDyn
  • PermNonCollocDyn
  • NonPermNonCollocStatic
  • PermNonCollocStatic

 

 

In this case, the Proxy runs in the same client host, but in a different process.

To run a static experiment (i.e. NonPermNonCollocDyn):

java [ORB-Properties] NonPermNonCollocDyn.MBServer

java [ORB-Properties] NonPermNonCollocDyn.Server

java [ORB-Properties] NonPermNonCollocDyn.Client

 

To run a dynamic experiment (i.e. NonPermNonCollocStatic):

java [ORB-Properties] NonPermNonCollocStatic.MBServer

java [ORB-Properties] NonPermNonCollocStatic.proxy.Server

java [ORB-Properties] NonPermNonCollocStatic.Client

 

Download

 

We have tested our experiments on WinNT and Windows2000 platforms with JDK1.3.

 

Platform Version Size
1.3.30 422k
ORBacus 4 for Java code 412k
Orbix 2000 1.2 for Java code 444k