1 package org.omg.PortableInterceptor; 2 3 4 /** 5 * org/omg/PortableInterceptor/ORBInitializerOperations.java . 6 * Generated by the IDL-to-Java compiler (portable), version "3.2" 7 * from ../../../../src/share/classes/org/omg/PortableInterceptor/Interceptors.idl 8 * Saturday, February 9, 2008 9:40:08 AM GMT 9 */ 10 11 12 /** 13 * Facilitates interceptor registration and ORB initialization. 14 * <p> 15 * Interceptors are intended to be a means by which ORB services gain 16 * access to ORB processing, effectively becoming part of the ORB. 17 * Since Interceptors are part of the ORB, when <code>ORB.init</code> 18 * returns an ORB, the Interceptors shall have been registered. 19 * Interceptors cannot be registered on an ORB after it has been 20 * returned by a call to <code>ORB.init</code>. 21 * <p> 22 * An Interceptor is registered by registering an associated 23 * <code>ORBInitializer</code> object which implements the 24 * <code>ORBInitializer</code> interface. When an ORB is initializing, 25 * it shall call each registered <code>ORBInitializer</code>, passing it 26 * an <code>ORBInitInfo</code> object which is used to register its 27 * Interceptor. 28 * <p> 29 * <b>Registering ORB Initializers in Java</b> 30 * <p> 31 * ORBInitializers are registered via Java ORB properties. 32 * <p> 33 * The property names are of the form: 34 * <blockquote><code> 35 * org.omg.PortableInterceptor.ORBInitializerClass.<Service> 36 * </code></blockquote> 37 * where <code><Service></code> is the string name of a class 38 * which implements 39 * <blockquote><code> 40 * org.omg.PortableInterceptor.ORBInitializer 41 * </code></blockquote> 42 * To avoid name collisions, the reverse DNS name convention should be 43 * used. For example, if company X has three initializers, it could define 44 * the following properties: 45 * <ul> 46 * <li><code> 47 * org.omg.PortableInterceptor.ORBInitializerClass.com.x.Init1 48 * </code></li> 49 * <li><code> 50 * org.omg.PortableInterceptor.ORBInitializerClass.com.x.Init2 51 * </code></li> 52 * <li><code> 53 * org.omg.PortableInterceptor.ORBInitializerClass.com.x.Init3 54 * </code></li> 55 * </ul> 56 * During ORB.init, these ORB properties which begin with 57 * <code>org.omg.PortableInterceptor.ORBInitializerClass</code> shall be 58 * collected, the <code><Service></code> portion of each property 59 * shall be extracted, an object shall be instantiated with the 60 * <code><Service></code> string as its class name, and the 61 * <code>pre_init</code> and <code>post_init</code> methods shall be 62 * called on that object. If there are any exceptions, the ORB shall 63 * ignore them and proceed. 64 * <p> 65 * <b><i>Example</i></b> 66 * <p> 67 * A client-side logging service written by company X, for example, may 68 * have the following ORBInitializer implementation: 69 * <code><pre> 70 * package com.x.logging; 71 * 72 * import org.omg.PortableInterceptor.Interceptor; 73 * import org.omg.PortableInterceptor.ORBInitializer; 74 * import org.omg.PortableInterceptor.ORBInitInfo; 75 * 76 * public class LoggingService implements ORBInitializer { 77 * void pre_init( ORBInitInfo info ) { 78 * // Instantiate the Logging Service s Interceptor. 79 * Interceptor interceptor = new LoggingInterceptor(); 80 * 81 * // Register the Logging Service s Interceptor. 82 * info.add_client_request_interceptor( interceptor ); 83 * } 84 * 85 * void post_init( ORBInitInfo info ) { 86 * // This service does not need two init points. 87 * } 88 * } 89 * </pre></code> 90 * To run a program called <code>MyApp</code> using this logging 91 * service, the user could type: 92 * <blockquote><code> 93 * java 94 *-Dorg.omg.PortableInterceptor.ORBInitializerClass.com.x.Logging.LoggingService 95 * MyApp 96 * </code></blockquote> 97 * <p> 98 * <b>Notes about Registering Interceptors</b> 99 * <p> 100 * Request Interceptors are registered on a per-ORB basis. 101 * <p> 102 * To achieve virtual per-object Interceptors, query the policies on the 103 * target from within the interception points to determine whether they 104 * should do any work. 105 * <p> 106 * To achieve virtual per-POA Interceptors, instantiate each POA with a 107 * different ORB. While Interceptors may be ordered administratively, 108 * there is no concept of order with respect to the registration of 109 * Interceptors. Request Interceptors are concerned with service contexts. 110 * Service contexts have no order, so there is no purpose for request 111 * Interceptors to have an order. IOR Interceptors are concerned with 112 * tagged components. Tagged components also have no order, so there 113 * is no purpose for IOR Interceptors to have an order. 114 * <p> 115 * Registration code should avoid using the ORB (i.e., calling 116 * <code>ORB.init</code> with the provided <code>orb_id</code>). Since 117 * registration occurs during ORB initialization, results of invocations 118 * on this ORB while it is in this state are undefined. 119 * 120 * @see ORBInitInfo 121 */ 122 public interface ORBInitializerOperations 123 { 124 125 /** 126 * Called during ORB initialization. If it is expected that initial 127 * services registered by an interceptor will be used by other 128 * interceptors, then those initial services shall be registered at 129 * this point via calls to 130 * <code>ORBInitInfo.register_initial_reference</code>. 131 * 132 * @param info provides initialization attributes and operations by 133 * which Interceptors can be registered. 134 */ 135 void pre_init (org.omg.PortableInterceptor.ORBInitInfo info); 136 137 /** 138 * Called during ORB initialization. If a service must resolve initial 139 * references as part of its initialization, it can assume that all 140 * initial references will be available at this point. 141 * <p> 142 * Calling the <code>post_init</code> operations is not the final 143 * task of ORB initialization. The final task, following the 144 * <code>post_init</code> calls, is attaching the lists of registered 145 * interceptors to the ORB. Therefore, the ORB does not contain the 146 * interceptors during calls to <code>post_init</code>. If an 147 * ORB-mediated call is made from within <code>post_init</code>, no 148 * request interceptors will be invoked on that call. 149 * Likewise, if an operation is performed which causes an IOR to be 150 * created, no IOR interceptors will be invoked. 151 * 152 * @param info provides initialization attributes and 153 * operations by which Interceptors can be registered. 154 */ 155 void post_init (org.omg.PortableInterceptor.ORBInitInfo info); 156 } // interface ORBInitializerOperations 157