poa.idl revision 608:7e06bf1dcb09
1/*
2 * Copyright (c) 1997, 2001, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.  Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26#include "corba.idl"
27#include "CORBAX.idl"
28
29#pragma prefix "omg.org"
30/**
31 * All Mapping corresponds to the Chapter 11 of 
32 * CORBA V2.3.1 specified by OMG document formal/99-10-07.pdf.
33 * The exception to this is the id attribute, which is added in ptc/00-08-06, 
34 * section 11.3.8.26.
35 */
36module PortableServer { 
37
38	#pragma version PortableServer 2.3
39
40        // forward reference 
41        interface POA; 
42
43	/**
44	 * List of POAs
45	 */
46	typedef sequence<POA> POAList;
47
48	/**
49	 * Values of type Servant support a language specific
50	 * programming interface that can be used by the ORB to
51	 * obtain a default POA for that servant.  
52	 * Some language mappings may allow Servant values to 
53	 * be implicitly converted to object references under 
54	 * appropriate conditions.
55	 */
56	native Servant;
57
58	/**
59	 * ObjectId value associated with the object reference.
60	 */
61        typedef sequence<octet> ObjectId; 
62
63	/**
64	 * ForwardRequest to indicate to the ORB 
65	 * that it is responsible for delivering 
66	 * the current request and subsequent 
67	 * requests to the object denoted in the 
68	 * forward_reference member of the exception.
69	 */
70        exception ForwardRequest { Object forward_reference; }; 
71        
72        // ********************************************** 
73        // 
74        // Policy interfaces 
75        // 
76        // ********************************************** 
77
78	/**
79	 * The value representing THREAD_POLICY_ID.
80	 */
81        const CORBA::PolicyType THREAD_POLICY_ID = 16; 
82	/**
83	 * The value representing LIFESPAN_POLICY_ID.
84	 */
85        const CORBA::PolicyType LIFESPAN_POLICY_ID = 17; 
86	/**
87	 * The value representing ID_UNIQUENESS_POLICY_ID.
88	 */
89        const CORBA::PolicyType ID_UNIQUENESS_POLICY_ID = 18; 
90	/**
91	 * The value representing ID_ASSIGNMENT_POLICY_ID.
92	 */
93        const CORBA::PolicyType ID_ASSIGNMENT_POLICY_ID = 19; 
94	/**
95	 * The value representing IMPLICIT_ACTIVATION_POLICY_ID.
96	 */
97        const CORBA::PolicyType IMPLICIT_ACTIVATION_POLICY_ID = 20;
98	/**
99	 * The value representing SERVANT_RETENTION_POLICY_ID.
100	 */
101        const CORBA::PolicyType SERVANT_RETENTION_POLICY_ID = 21; 
102	/**
103	 * The value representing REQUEST_PROCESSING_POLICY_ID.
104	 */
105        const CORBA::PolicyType REQUEST_PROCESSING_POLICY_ID = 22;
106
107	/**
108	 * The ThreadPolicyValue can have the following values.
109	 * ORB_CTRL_MODEL - The ORB is responsible for assigning 
110	 * requests for an ORB- controlled POA to threads. 
111	 * SINGLE_THREAD_MODEL - Requests for a single-threaded 
112	 * POA are processed sequentially. 
113	 */
114        enum ThreadPolicyValue { ORB_CTRL_MODEL, SINGLE_THREAD_MODEL }; 
115
116	/**
117	 * The ThreadPolicy specifies the threading model 
118	 * used with the created POA. The default is 
119	 * ORB_CTRL_MODEL.
120	 */
121        interface ThreadPolicy : CORBA::Policy { 
122                #pragma sun_local ThreadPolicy ""
123	/**
124	 * specifies the policy value
125	 */
126                readonly attribute ThreadPolicyValue value; 
127        }; 
128
129	/**
130	 * The LifespanPolicyValue can have the following values.
131	 * TRANSIENT - The objects implemented in the POA 
132	 * cannot outlive the POA instance in which they are 
133	 * first created. 
134	 * PERSISTENT - The objects implemented in the POA can 
135	 * outlive the process in which they are first created. 
136	 */
137        enum LifespanPolicyValue { TRANSIENT, PERSISTENT }; 
138
139	/**
140	 * The LifespanPolicy specifies the lifespan of the 
141	 * objects implemented in the created POA. The default 
142	 * is TRANSIENT.
143	 */
144        interface LifespanPolicy : CORBA::Policy { 
145                #pragma sun_local LifespanPolicy ""
146	/**
147	 * specifies the policy value
148	 */
149                readonly attribute LifespanPolicyValue value; 
150        }; 
151
152	/**
153	 * IdUniquenessPolicyValue can have the following values.
154	 * UNIQUE_ID - Servants activated with that POA support 
155	 * exactly one Object Id.  MULTIPLE_ID - a servant 
156	 * activated with that POA may support one or more 
157	 * Object Ids.
158	 */
159        enum IdUniquenessPolicyValue { UNIQUE_ID, MULTIPLE_ID }; 
160
161	/**
162	 * The IdUniquenessPolicy specifies whether the servants 
163	 * activated in the created POA must have unique object i
164	 * identities. The default is UNIQUE_ID.
165	 */
166        interface IdUniquenessPolicy : CORBA::Policy { 
167                #pragma sun_local IdUniquenessPolicy ""
168	/**
169	 * specifies the policy value
170	 */
171                readonly attribute IdUniquenessPolicyValue value; 
172        }; 
173
174	/**
175	 * The IdAssignmentPolicyValue can have the following
176	 * values. USER_ID - Objects created with that POA are 
177	 * assigned Object Ids only by the application. 
178	 *  SYSTEM_ID - Objects created with that POA are 
179	 * assigned Object Ids only by the POA. If the POA also 
180	 * has the PERSISTENT policy, assigned Object Ids must 
181	 * be unique across all instantiations of the same POA.
182	 */
183        enum IdAssignmentPolicyValue { USER_ID, SYSTEM_ID }; 
184
185	/**
186	 * IdAssignmentPolicy specifies whether Object Ids in 
187	 * the created POA are generated by the application or 
188	 * by the ORB. The default is SYSTEM_ID.
189	 */
190        interface IdAssignmentPolicy : CORBA::Policy { 
191                #pragma sun_local IdAssignmentPolicy ""
192	/**
193	 * specifies the policy value
194	 */
195                readonly attribute IdAssignmentPolicyValue value; 
196        }; 
197
198	/**
199	 * ImplicitActivationPolicyValue has the following
200	 * semantics.
201	 * IMPLICIT_ACTIVATION to indicate implicit activation
202	 * of servants.  This requires SYSTEM_ID and RETAIN 
203	 * policies to be set.
204	 * NO_IMPLICIT_ACTIVATION to indicate no implicit 
205	 * servant activation.
206	 */
207        enum ImplicitActivationPolicyValue { 
208                IMPLICIT_ACTIVATION, NO_IMPLICIT_ACTIVATION 
209        }; 
210
211	/**
212	 * This policy specifies whether implicit activation 
213	 * of servants is supported in the created POA.
214	 */
215        interface ImplicitActivationPolicy : CORBA::Policy { 
216                #pragma sun_local ImplicitActivationPolicy ""
217	/**
218	 * specifies the policy value
219	 */
220                readonly attribute ImplicitActivationPolicyValue value; 
221        }; 
222
223	/**
224	 * ServantRetentionPolicyValue can have the following 
225	 * values. RETAIN - to indicate that the POA will retain 
226	 * active servants in its Active Object Map. 
227	 * NON_RETAIN - to indicate Servants are not retained by 
228	 * the POA. If no ServantRetentionPolicy is specified at 
229	 * POA creation, the default is RETAIN.
230	 */
231        enum ServantRetentionPolicyValue { RETAIN, NON_RETAIN }; 
232
233	/**
234	 * This policy specifies whether the created POA retains 
235	 * active servants in an Active Object Map. 
236	 */
237        interface ServantRetentionPolicy : CORBA::Policy { 
238                #pragma sun_local ServantRetentionPolicy ""
239	/**
240	 * specifies the policy value
241	 */
242                readonly attribute ServantRetentionPolicyValue value; 
243        }; 
244
245	/**
246	 * The RequestProcessingPolicyValue can have the following
247	 * values.  USE_ACTIVE_OBJECT_MAP_ONLY - If the Object Id 
248	 * is not found in the Active Object Map, 
249	 * an OBJECT_NOT_EXIST exception is returned to the 
250	 * client. The RETAIN policy is also required.
251	 * USE_DEFAULT_SERVANT - If the Object Id is not found in 
252	 * the Active Object Map or the NON_RETAIN policy is 
253	 * present, and a default servant has been registered 
254	 * with the POA using the set_servant operation, 
255	 * the request is dispatched to the default servant. 
256	 * USE_SERVANT_MANAGER - If the Object Id is not found 
257	 * in the Active Object Map or the NON_RETAIN policy 
258	 * is present, and a servant manager has been registered 
259	 * with the POA using the set_servant_manager operation, 
260	 * the servant manager is given the opportunity to 
261	 * locate a servant or raise an exception. 
262	 */
263        enum RequestProcessingPolicyValue { 
264        USE_ACTIVE_OBJECT_MAP_ONLY, USE_DEFAULT_SERVANT, USE_SERVANT_MANAGER 
265        }; 
266
267	/**
268	 * This policy specifies how requests are processed by 
269	 * the created POA.  The default is 
270	 * USE_ACTIVE_OBJECT_MAP_ONLY.
271	 */
272        interface RequestProcessingPolicy : CORBA::Policy { 
273                #pragma sun_local RequestProcessingPolicy ""
274	/**
275	 * specifies the policy value
276	 */
277                readonly attribute RequestProcessingPolicyValue value; 
278        }; 
279
280
281        // ************************************************** 
282        // 
283        // POAManager interface 
284        // 
285        // **********************************
286	/**
287	 * Each POA object has an associated POAManager object. 
288	 * A POA manager may be associated with one or more 
289	 * POA objects. A POA manager encapsulates the processing 
290	 * state of the POAs it is associated with.
291	 */
292        interface POAManager { 
293                #pragma sun_local POAManager ""
294                exception AdapterInactive{ }; 
295	/**
296	 * Specifies the states for the POAManager
297	 */
298		enum State {HOLDING, ACTIVE, DISCARDING, INACTIVE};
299
300	/**
301	 * This operation changes the state of the POA manager 
302	 * to active, causing associated POAs to start processing
303	 * requests.
304	 * @exception AdapterInactive is raised if the operation is
305	 *            invoked on the POAManager in inactive state.
306	 */
307                void activate() 
308                        raises(AdapterInactive); 
309	/**
310	 * This operation changes the state of the POA manager 
311	 * to holding, causing associated POAs to queue incoming
312	 * requests.
313	 * @param wait_for_completion if FALSE, the operation 
314	 *            returns immediately after changing state.  
315	 *            If TRUE, it waits for all active requests 
316	 *            to complete. 
317	 * @exception AdapterInactive is raised if the operation is
318	 *            invoked on the POAManager in inactive state.
319	 */
320                void hold_requests(in boolean wait_for_completion) 
321                        raises(AdapterInactive); 
322	/**
323	 * This operation changes the state of the POA manager 
324	 * to discarding. This causes associated POAs to discard
325	 * incoming requests.
326	 * @param wait_for_completion if FALSE, the operation 
327	 *            returns immediately after changing state.  
328	 *            If TRUE, it waits for all active requests 
329	 *            to complete. 
330	 * @exception AdapterInactive is raised if the operation is
331	 *            invoked on the POAManager in inactive state.
332	 */
333                void discard_requests(in boolean wait_for_completion)
334                        raises(AdapterInactive); 
335
336	/**
337	 * This operation changes the state of the POA manager 
338	 * to inactive, causing associated POAs to reject the
339	 * requests that have not begun executing as well as
340	 * as any new requests.
341	 * @param etherealize_objects a flag to indicate whether
342	 *        to invoke the etherealize operation of the
343	 *        associated servant manager for all active 
344	 *        objects.
345	 * @param wait_for_completion if FALSE, the operation 
346	 *            returns immediately after changing state.  
347	 *            If TRUE, it waits for all active requests 
348	 *            to complete. 
349	 * @exception AdapterInactive is raised if the operation is
350	 *            invoked on the POAManager in inactive state.
351	 */
352                void deactivate(in boolean etherealize_objects, 
353                                in boolean wait_for_completion) 
354                        raises(AdapterInactive); 
355	/**
356	 * This operation returns the state of the POA manager.
357	 */
358		State get_state();
359        }; 
360
361
362        // ************************************************** 
363        // 
364        // AdapterActivator interface 
365        // 
366        // ****************************
367
368	/**
369	 * An adapter activator supplies a POA with the ability 
370	 * to create child POAs on demand, as a side-effect of 
371	 * receiving a request that names the child POA 
372	 * (or one of its children), or when find_POA is called 
373	 * with an activate parameter value of TRUE.
374	 */
375
376        interface AdapterActivator { 
377                #pragma sun_local AdapterActivator ""
378		#pragma version AdapterActivator 2.3
379	/**
380	 * This operation is invoked when the ORB receives 
381	 * a request for an object reference that identifies 
382	 * a target POA that does not exist. The ORB invokes 
383	 * this operation once for each POA that must be 
384	 * created in order for the target POA to exist.
385	 * @param parent indicates the parent POA for the POA
386	 *               that needs to be created.
387	 * @param name identifies the name of the POA relative to
388	 *             the parent.
389	 * @return returns TRUE if the POA was created or FALSE
390	 *         otherwise.
391	 */
392                boolean unknown_adapter(in POA parent, in string name); 
393        }; 
394
395
396        // ************************************************** 
397        // 
398        // ServantManager interface 
399        // 
400        // ******************************
401
402	/**
403	 * A servant manager supplies a POA with the ability 
404	 * to activate objects on demand when the POA receives 
405	 * a request targeted at an inactive object. A servant 
406	 * manager is registered with a POA as a callback object, 
407	 * to be invoked by the POA when necessary.
408	 * ServantManagers can either be ServantActivators or
409	 * ServantLocators. A ServantManager object must be 
410	 * local to the process containing the POA objects 
411	 * it is registered with.
412	 */
413
414        interface ServantManager 
415        { #pragma sun_local ServantManager "" }; 
416
417
418	/**
419	 * When the POA has the RETAIN policy it uses servant 
420	 * managers that are ServantActivators. 
421	 */
422        interface ServantActivator : ServantManager { 
423	        #pragma version ServantActivator 2.3
424                #pragma sun_localservant ServantActivator ""
425	/**
426	 * This operation is invoked by the POA whenever the 
427	 * POA receives a request for an object that is not 
428	 * currently active, assuming the POA has the 
429	 * USE_SERVANT_MANAGER and RETAIN policies.
430	 * @param oid object Id associated with the object on 
431	 *            the request was made.
432	 * @param adapter object reference for the POA in which
433	 *                the object is being activated.
434	 * @return Servant corresponding to oid is created or 
435	 *         located by the user supplied servant manager.
436	 * @exception ForwardRequest to indicate to the ORB 
437	 *            that it is responsible for delivering 
438	 *            the current request and subsequent 
439	 *            requests to the object denoted in the 
440	 *            forward_reference member of the exception.
441	 */
442                Servant incarnate ( in ObjectId oid, in POA adapter ) 
443                                raises (ForwardRequest); 
444	/**
445	 * This operation is invoked whenever a servant for 
446	 * an object is deactivated, assuming the POA has 
447	 * the USE_SERVANT_MANAGER and RETAIN policies.
448	 * @param oid object Id associated with the object 
449	 *            being deactivated.
450	 * @param adapter object reference for the POA in which
451	 *                the object was active.
452	 * @param serv contains reference to the servant
453	 *        associated with the object being deactivated.
454	 * @param cleanup_in_progress if TRUE indicates that
455	 *        destroy or deactivate is called with 
456	 *        etherealize_objects param of TRUE.  FALSE
457	 *        indicates that etherealize was called due to
458	 *        other reasons.
459	 * @param remaining_activations indicates whether the
460	 *        Servant Manager can destroy a servant.  If
461	 *        set to TRUE, the Servant Manager should wait
462	 *        until all invocations in progress have
463	 *        completed.
464	 */
465                void etherealize ( in ObjectId oid, 
466                                   in POA adapter, 
467                                   in Servant serv, 
468                                   in boolean cleanup_in_progress, 
469                                   in boolean remaining_activations); 
470        }; 
471
472
473	/**
474	 * When the POA has the NON_RETAIN policy it uses servant 
475	 * managers that are ServantLocators. Because the POA 
476	 * knows that the servant returned by this servant 
477	 * manager will be used only for a single request, 
478	 * it can supply extra information to the servant 
479	 * manager's operations and the servant manager's pair 
480	 * of operations may be able to cooperate to do 
481	 * something different than a ServantActivator. 
482	 * When the POA uses the ServantLocator interface, 
483	 * immediately after performing the operation invocation 
484	 * on the servant returned by preinvoke, the POA will 
485	 * invoke postinvoke on the servant manager, passing the 
486	 * ObjectId value and the Servant value as parameters 
487	 * (among others). This feature may be used to force 
488	 * every request for objects associated with a POA to 
489	 * be mediated by the servant manager.
490	 */
491        interface ServantLocator : ServantManager { 
492                #pragma sun_localservant ServantLocator ""
493	/**
494	 * Opaque data used to pass the information from
495	 * preinvoke to postinvoke hooks.  This specific
496	 * by the language mapping, that is why it is
497	 * specified as native.
498	 */
499	        native Cookie;
500	/**
501	 * This operations is used to get a servant that will be
502	 * used to process the request that caused preinvoke to
503	 * be called.
504	 * @param oid the object id associated with object on
505	 *            which the request was made. 
506	 * @param adapter the reference for POA in which the
507	 *                object is being activated.
508	 * @param operation the operation name.
509	 * @param the_cookie  an opaque value that can be set
510	 *                    by the servant manager to be used
511	 *                    during postinvoke.
512	 * @return Servant used to process incoming request.
513	 * @exception ForwardRequest to indicate to the ORB 
514	 *            that it is responsible for delivering 
515	 *            the current request and subsequent 
516	 *            requests to the object denoted in the 
517	 *            forward_reference member of the exception.
518	 */
519                Servant preinvoke( in ObjectId oid, in POA adapter, 
520                                   in CORBA::Identifier operation, 
521                                   out Cookie the_cookie ) 
522                                raises (ForwardRequest); 
523	/**
524	 * This operation is invoked whenener a servant completes
525	 * a request.
526	 * @param oid the object id ssociated with object on which
527	 *            the request was made.
528	 * @param adapter the reference for POA in which the
529	 *                object was active.
530	 * @param the_cookie  an opaque value that contains
531	 *                    the data set by preinvoke.
532	 * @param the_servant reference to the servant that is
533	 *                    associated with the object.
534	 */
535                void postinvoke( in ObjectId oid, in POA adapter, 
536                                 in CORBA::Identifier operation, 
537                                 in Cookie the_cookie, 
538                                 in Servant the_servant); 
539        }; 
540
541
542        // ************************************************** 
543        // 
544        // POA interface 
545        // 
546        // *****************************************
547
548	/**
549	 * A POA object manages the implementation of a 
550	 * collection of objects. The POA supports a name space 
551	 * for the objects, which are identified by Object Ids. 
552	 * A POA also provides a name space for POAs. A POA is 
553	 * created as a child of an existing POA, which forms a 
554	 * hierarchy starting with the root POA. A POA object 
555	 * must not be exported to other processes, or 
556	 * externalized with ORB::object_to_string.
557	 */
558        interface POA { 
559                #pragma sun_local POA ""
560		#pragma version POA 2.3
561	/**
562	 * specifies that an child POA with the specified
563	 * name already exists.
564	 */
565                exception AdapterAlreadyExists { }; 
566
567	/**
568	 * This is raised if the POA with a specified Name cannot
569	 * be found.
570	 */
571                exception AdapterNonExistent { }; 
572
573	/**
574	 * This is raised if any of the policy objects are
575	 * not valid for the ORB
576	 */
577                exception InvalidPolicy { 
578                        unsigned short index; 
579                }; 
580
581	/**
582	 * This is raised if no default servant is associated
583	 * with the POA.
584	 */
585                exception NoServant { }; 
586
587	/**
588	 * specifies that an object is already active or
589	 * exists in the Active Object Map.
590	 */
591                exception ObjectAlreadyActive { }; 
592	/**
593	 * specifies that the object is not active or its
594	 * mapping does not exist in the Active Object Map.
595	 */
596
597                exception ObjectNotActive { }; 
598
599	/**
600	 * This is raised when an attempt is made to activate
601	 * a servant that is already active or has a mapping in
602	 * the Active Object Map.
603	 */
604                exception ServantAlreadyActive { }; 
605
606	/**
607	 * This is raised when an attempt is made to access a
608	 * servant that is not active or is not registered in
609	 * the Active Object Map.
610	 */
611                exception ServantNotActive { }; 
612
613	/**
614	 * This is raised if the reference was not created by 
615	 * the POA 
616	 * specified in the reference.
617	 */
618                exception WrongAdapter { }; 
619
620	/**
621	 * WrongPolicy is specified when the POA does not
622	 * specify the policy appropriate for its operations.
623	 */
624                exception WrongPolicy { }; 
625
626                
627                //---------------------------------------- 
628                // 
629                // POA creation and destruction 
630                // 
631                //-------------------------------
632
633	/**
634	 * This operation creates a new POA as a child of the 
635	 * target POA.
636	 * @param adapter_name identifies the new POA with 
637	 *        respect to other POAs with the same parent POA.
638	 * @param a_POAManager specifies the POA Manager to be
639	 *        associated with the new POA.
640	 * @param policies specifies policy objects to be 
641	 *        associated with the POA to control its behavior.
642	 * @exception AdapterAlreadyExists specifies that the
643	 *            target POA already has a child POA with 
644	 *            the specified name.
645	 * @exception InvalidPolicy is raised if any of the
646	 *            policy objects are not valid for the ORB,
647	 *            or are in conflict, or require an 
648	 *            administrative action that has not been
649	 *            performed.
650	 */
651                POA create_POA(in string adapter_name, 
652                               in POAManager a_POAManager, 
653                               in CORBA::PolicyList policies) 
654                        raises (AdapterAlreadyExists, InvalidPolicy); 
655
656	/**
657	 * If the target POA is the parent of a child POA with 
658	 * the specified name (relative to the target POA), that 
659	 * child POA is returned. 
660	 * @param adapter_name POA name to be found.
661	 * @param activate_it  if a POA with the specified 
662	 *        name does not exist and the value of 
663	 *        the activate_it parameter is TRUE, the target 
664	 *        POA's AdapterActivator, if one exists, 
665	 *        is invoked.
666	 * @return POA if one exists or is activated by the
667	 *         AdapterActivator.
668	 * @return AdapterNonExistent is raised if POA with
669	 *         a specified name cannot be found or
670	 *         activated using AdapaterActivator.
671	 */
672                POA find_POA(in string adapter_name, 
673	                     in boolean activate_it) 
674                        raises (AdapterNonExistent); 
675
676	/**
677	 * This operation destroys the POA and all descendant 
678	 * POAs. All descendant POAs are destroyed (recursively) 
679	 * before the destruction of the containing POA. The POA 
680	 * so destroyed (that is, the POA with its name) may be 
681	 * re-created later in the same process.
682	 * @param etherealize_objects flag to indicate whether
683	 *        etherealize operation on servant manager needs
684	 *        to be called.
685	 * @param wait_for_completion flag to indicate whether
686	 *        POA and its children need to wait for active
687	 *        requests and the etherealization to complete.
688	 *
689	 */
690                void destroy( in boolean etherealize_objects, 
691                              in boolean wait_for_completion); 
692                
693                // ************************************************** 
694                // 
695                // Factories for Policy objects 
696                // 
697                // ************ 
698	/**
699	 * These operations each return a reference to a policy 
700	 * object with the specified value.
701	 * @param value policy type
702	 * @return ThreadPolcy Object
703	 */
704                ThreadPolicy create_thread_policy(
705	                                in ThreadPolicyValue value); 
706	/**
707	 * These operations each return a reference to a policy 
708	 * object with the specified value.
709	 * @param value policy type
710	 * @return LifespanPolicy Object.
711	 */
712                LifespanPolicy create_lifespan_policy(
713                                        in LifespanPolicyValue value); 
714	/**
715	 * These operations each return a reference to a policy 
716	 * object with the specified value.
717	 * @param value policy type
718	 * @return IdUniquenessPolicy Object.
719	 */
720                IdUniquenessPolicy create_id_uniqueness_policy(
721                                        in IdUniquenessPolicyValue value); 
722	/**
723	 * These operations each return a reference to a policy 
724	 * object with the specified value. 
725	 * @param value policy type
726	 * @return IdAssignmentPolicy Object.
727	 */
728                IdAssignmentPolicy create_id_assignment_policy(
729                                        in IdAssignmentPolicyValue value); 
730	/**
731	 * These operations each return a reference to a policy 
732	 * object with the specified value. 
733	 * @param value policy type
734	 * @return ImplicitActivationPolicy Object.
735	 */
736                ImplicitActivationPolicy create_implicit_activation_policy(
737                                        in ImplicitActivationPolicyValue value);
738	/**
739	 * These operations each return a reference to a policy 
740	 * object with the specified value.
741	 * @param value policy type
742	 * @return ServantRetentionPolicy Object.
743	 */
744                ServantRetentionPolicy create_servant_retention_policy(
745                                        in ServantRetentionPolicyValue value); 
746	/**
747	 * These operations each return a reference to a policy 
748	 * object with the specified value. 
749	 * @param value policy type
750	 * @return RequestProcessingPolicy Object.
751	 */
752
753                RequestProcessingPolicy create_request_processing_policy(
754                                        in RequestProcessingPolicyValue value); 
755                
756                //-------------------------------------------------- 
757                // 
758                // POA attributes 
759                // 
760                //-----------------------------------
761	/**
762	 * This attribute identifies the POA relative to its 
763	 * parent. This name is assigned when the POA is created.
764	 */
765                readonly attribute string the_name; 
766	/**
767	 * This attribute identifies the parent of the POA. 
768	 * The parent of the root POA is null. 
769	 */
770                readonly attribute POA the_parent; 
771	/**
772	 * This attribute identifies the current set of all 
773	 * child POAs of the POA. The set of child POAs 
774	 * includes only the POA's immediate children, and 
775	 * not their descendants.
776	 */
777	        readonly attribute POAList the_children;
778	/**
779	 * This attribute identifies the POA manager 
780	 * associated with the POA.
781	 */
782                readonly attribute POAManager the_POAManager; 
783
784	/**
785	 * This attribute identifies the adapter activator 
786	 * associated with the POA.
787	 */
788                attribute AdapterActivator the_activator; 
789
790                //-------------------------------------------------- 
791                // 
792                // Servant Manager registration: 
793                // 
794                //-------------------------------------------------- 
795	/**
796	 *
797	 * If the ServantRetentionPolicy of the POA is RETAIN, 
798	 * then the ServantManager argument (imgr) shall support 
799	 * the ServantActivator interface. For a NON_RETAIN policy,
800	 * the ServantManager shall support the ServantLocator 
801	 * interface. If the argument is nil, or does not support 
802	 * the required interface, then the OBJ_ADAPTER 
803	 * exception is raised.
804	 * @return ServantManager associated with a POA or null if
805	 *         none exists.
806	 * @exception WrongPolicy raised if the 
807	 *            USE_SERVANT_MANAGER policy is not specified.
808	 */
809                ServantManager get_servant_manager() 
810                        raises (WrongPolicy); 
811	/**
812	 *
813	 * This operation sets the default servant manager 
814	 * associated with the POA. This operation may only be 
815	 * invoked once after a POA has been created. Attempting 
816	 * to set the servant manager after one has already 
817	 * been set will result in the BAD_INV_ORDER exception 
818	 * being raised.
819	 * @param imgr servant manager to be used as a default.
820	 * @exception WrongPolicy raised if the 
821	 *            USE_SERVANT_MANAGER policy is not specified.
822	 */
823                void set_servant_manager( in ServantManager imgr) 
824                        raises (WrongPolicy); 
825                
826                //-------------------------------------------------- 
827                // 
828                // operations for the USE_DEFAULT_SERVANT policy 
829                // 
830                //---------- 
831	/**
832	 * This operation returns the default servant associated 
833	 * with the POA. 
834	 * @return p_servant default servant associated with a POA.
835	 * @exception NoServant raised if no default servant is
836	 *            associated with the POA.
837	 * @exception WrongPolicy raised if the 
838	 *            USE_DEFAULT_SERVANT policy is not specified.
839	 */
840                Servant get_servant() 
841                        raises (NoServant, WrongPolicy);
842
843	/**
844	 *
845	 * This operation registers the specified servant with 
846	 * the POA as the default servant. This servant will 
847	 * be used for all requests for which no servant is 
848	 * found in the Active Object Map.
849	 * @param p_servant servant to be used as a default.
850	 * @exception WrongPolicy raised if the 
851	 *            USE_DEFAULT_SERVANT policy is not specified.
852	 */
853                void set_servant(in Servant p_servant) 
854                        raises (WrongPolicy); 
855                
856                // ************************************************** 
857                // 
858                // object activation and deactivation 
859                // 
860                // ************
861
862	/**
863	 *
864	 * This operation generates an Object Id and enters 
865	 * the Object Id and the specified servant in the 
866	 * Active Object Map.
867	 * @param p_servant servant to be associated with an
868	 *            object to be activated.
869	 * @return POA generated object id.
870	 * @exception ServantAlreadyActive is raised if the
871	 *            POA has UNIQUE_ID policy and servant is
872	 *            is already in the Active Object Map.
873	 * @exception WrongPolicy raised if the SYSTEM_ID and 
874	 *            RETAIN policies are not specified.
875	 */
876                ObjectId activate_object( in Servant p_servant ) 
877                        raises (ServantAlreadyActive, WrongPolicy); 
878        /**
879         * This operation enters an association between the 
880	 * specified Object Id and the specified servant in the 
881	 * Active Object Map.
882	 * @param id object id for the object to be activated.
883	 * @param p_servant servant to be associated with the
884	 *                  object.
885	 * @exception ServantAlreadyActive raised if the POA 
886	 *            has the UNIQUE_ID policy and the servant 
887	 *            is already in the Active Object Map.
888	 * @exception ObjectAlreadyActive raised if the object is
889	 *            already active in the POA.
890         * @exception WrongPolicy raised if the RETAIN policy is
891         *            is not specified.
892         */
893
894                void activate_object_with_id( in ObjectId id, 
895                                              in Servant p_servant) 
896                        raises ( ServantAlreadyActive, ObjectAlreadyActive,
897                                     WrongPolicy); 
898	/**
899	 *
900	 * This operation causes the ObjectId specified in the 
901	 * oid parameter to be deactivated. An ObjectId which 
902	 * has been deactivated continues to process requests 
903	 * until there are no active requests for that ObjectId. 
904	 * A deactivated ObjectId is removed from the Active 
905	 * Object Map when all requests executing for that 
906	 * ObjectId have completed. 
907	 * @param oid Object Id for the object to be deactivated.
908	 * @exception ObjectNotActive if the object with the
909	 *            specified oid is not in the Active Object
910	 *            Map.
911	 * @exception WrongPolicy raised if the RETAIN policy is
912	 *            is not specified.
913	 */
914                void deactivate_object(in ObjectId oid) 
915                        raises (ObjectNotActive, WrongPolicy); 
916                
917                // ************************************************** 
918                // 
919                // reference creation operations 
920                // 
921                // *****************
922	/**
923	 * This operation creates an object reference that 
924	 * encapsulates a POA-generated Object Id value and 
925	 * the specified interface repository id. 
926	 *
927	 * @param intf rep id for creating an object reference.
928	 * @return object reference created using intf.
929	 * @exception WrongPolicy if SYSTEM_ID policy is not 
930	 *            specified.
931	 */
932                Object create_reference ( in CORBA::RepositoryId intf ) 
933                        raises (WrongPolicy); 
934
935	/**
936	 * This operation creates an object reference that 
937	 * encapsulates the specified Object Id and interface 
938	 * repository Id values. It does not cause an activation 
939	 * to take place. The resulting reference may be passed 
940	 * to clients, so that subsequent requests on those 
941	 * references will cause the object to be activated 
942	 * if necessary, or the default servant used, depending 
943	 * on the applicable policies. 
944	 * @param oid object id for creating an objref
945	 * @param intf rep id for creating an objref
946	 * @return object reference created using oid and intf
947	 * @exception BAD_PARAM is raised if the POA has the 
948	 *             SYSTEM_ID policy and it detects that the 
949	 *             Object Id value was not generated by the 
950	 *             system or for this POA.
951	 */
952                Object create_reference_with_id ( in ObjectId oid, 
953                                                  in CORBA::RepositoryId intf ); 
954                // not specified in 11.3.8.19 raises (WrongPolicy);
955
956                //-------------------------------------------------- 
957                // 
958                // Identity mapping operations: 
959                // 
960                //-------------------------------------------------- 
961	/**
962	 * This operation has four possible behaviors. 
963	 * 1. If the POA has the UNIQUE_ID policy and the 
964	 * specified servant is active, the Object Id associated 
965	 * with that servant is returned.
966	 * 2. If the POA has the IMPLICIT_ACTIVATION policy and 
967	 * either the POA has the MULTIPLE_ID policy or the 
968	 * specified servant is not active, the servant is 
969	 * activated using a POA-generated Object Id and the 
970	 * Interface Id associated with the servant, and that 
971	 * Object Id is returned. 
972	 * 3. If the POA has the USE_DEFAULT_SERVANT policy, 
973	 * the servant specified is the default servant, and the 
974	 * operation is being invoked in the context of executing 
975	 * a request on the default servant, then the ObjectId 
976	 * associated with the current invocation is returned. 
977	 * 4. Otherwise, the ServantNotActive exception is raised.
978	 *
979	 * @param p_servant servant for which the object disi returned.
980	 * @return object id associated with the servant.
981	 * @exception ServantNotActive if the above rules and
982	 *            policy combination is not met. 
983	 * @exception WrongPolicy if the USE_DEFAULT_SERVANT policy
984	 *            or a combination of the RETAIN policy and 
985	 *            either the UNIQUE_ID or IMPLICIT_ACTIVATION 
986	 *            policies are not present. 
987	 */
988                ObjectId servant_to_id(in Servant p_servant) 
989                        raises (ServantNotActive, WrongPolicy); 
990	
991	/**
992	 * This operation requires the RETAIN policy and either 
993	 * the UNIQUE_ID or IMPLICIT_ACTIVATION policies if 
994	 * invoked outside the context of an operation dispatched 
995	 * by this POA. It has four possible behaviors.
996	 * 1. If the POA has both the RETAIN and the 
997	 * UNIQUE_ID policy and the specified servant is active, 
998	 * an object reference encapsulating the information used 
999	 * to activate the servant is returned. 
1000	 * 2. If the POA has both the RETAIN and the 
1001	 * IMPLICIT_ACTIVATION policy and either the POA has the 
1002	 * MULTIPLE_ID policy or the specified servant is not 
1003	 * active, the servant is activated using a POA-generated 
1004	 * Object Id and the Interface Id associated with the 
1005	 * servant, and a corresponding object reference is 
1006	 * returned. 
1007	 * 3. If the operation was invoked in the context of 
1008	 * executing a request on the specified servant, the 
1009	 * reference associated with the current invocation 
1010	 * is returned. 
1011	 * 4. Otherwise, the ServantNotActive exception is raised.
1012	 *
1013	 * @param p_servant servant for which the object reference
1014	 *                  needs to be obtained.
1015	 * @return object reference associated with the servant.
1016	 * @exception WrongPolicy if the operation is not invoked 
1017	 *            in the context of executing a request on 
1018	 *            the specified servant and the required 
1019	 *            policies are not present.
1020	 * @exception ServantNotActive if the above specified
1021	 *            policies and rules are not met.
1022	 */
1023                Object servant_to_reference(in Servant p_servant) 
1024                        raises (ServantNotActive, WrongPolicy); 
1025
1026	/**
1027	 * If the POA has the RETAIN policy and the specified 
1028	 * object is present in the Active Object Map, this 
1029	 * operation returns the servant associated with that 
1030	 * object in the Active Object Map. Otherwise, if the 
1031	 * POA has the USE_DEFAULT_SERVANT policy and a default 
1032	 * servant has been registered with the POA, this 
1033	 * operation returns the default servant. If the object 
1034	 * reference was not created by this POA, 
1035	 * the WrongAdapter exception is raised. (OMG Issue
1036	 * on inconsistency with the POA.IDL.
1037	 *
1038	 * @param reference object reference for which the
1039	 *                  servant is returned.
1040	 * @return servant associated with the reference.
1041	 * @exception WrongPolicy if neither the RETAIN policy or 
1042	 *            the USE_DEFAULT_SERVANT policy is present. 
1043	 * @exception ObjectNotActive if the servant is not
1044	 *            present in the Active Object Map (for RETAIN)
1045	 *            or no default servant is registered (for
1046	 *            USE_DEFAULT_POLICY).
1047	 * @exception WrongAdapter if reference was not created by
1048	 *	      this POA instance.
1049	 */
1050                Servant reference_to_servant(in Object reference)
1051		    raises (ObjectNotActive, WrongPolicy, WrongAdapter); 
1052
1053	/**
1054	 * This operation returns the Object Id value 
1055	 * encapsulated by the specified reference. This 
1056	 * operation is valid only if the reference was created 
1057	 * by the POA on which the operation is being performed. 
1058	 * The object denoted by the reference does not have 
1059	 * to be active for this operation to succeed.
1060	 *
1061	 * @param reference the object reference from which the
1062	 *                  object id needs to be returned.
1063	 * @return object id encapsulated in the reference.
1064	 * @exception WrongAdapter if the reference was not 
1065	 *            created by the POA specified in the 
1066	 *            reference.
1067	 * @exception WrongPolicy declared to allow future 
1068	 *            extensions. 
1069	 *
1070	 */
1071                ObjectId reference_to_id(in Object reference) 
1072                        raises (WrongAdapter, WrongPolicy); 
1073
1074	/**
1075	 * If the POA has the RETAIN policy and the specified 
1076	 * ObjectId is in the Active Object Map, this operation 
1077	 * returns the servant associated with that object in 
1078	 * the Active Object Map. Otherwise, if the POA has 
1079	 * the USE_DEFAULT_SERVANT policy and a default servant 
1080	 * has been registered with the POA, this operation 
1081	 * returns the default servant. 
1082	 *
1083	 * @param oid object id for the which the servant is
1084	 *            returned.
1085	 * @return servant associated with oid.
1086	 * @exception ObjectNotActive is raised if ObjectId is
1087	 *            is not in the Active Object Map (for RETAIN
1088	 *            policy), or no default servant is registered
1089	 *            (for USE_DEFAULT_SERVANT policy).
1090	 *
1091	 * @exception WrongPolicy is raised if the RETAIN policy
1092	 *                        or the USE_DEFAULT_SERVANT 
1093	 *                        policy is not present. 
1094	 */
1095                Servant id_to_servant(in ObjectId oid) 
1096                        raises (ObjectNotActive, WrongPolicy); 
1097
1098	/**
1099	 * If an object with the specified Object Id value is 
1100	 * currently active, a reference encapsulating the 
1101	 * information used to activate the object is returned. 
1102	 *
1103	 * @param oid id of the object for which the
1104	 *                 reference is returned.
1105	 * @return the object reference 
1106	 *
1107	 * @exception ObjectNotActive if the Object Id value 
1108	 *             is not active in the POA.
1109	 * @exception WrongPolicy if the RETAIN policy is not 
1110	 *             present.
1111	 */
1112                Object id_to_reference(in ObjectId oid) 
1113                        raises (ObjectNotActive, WrongPolicy); 
1114
1115        /**
1116	 * This returns the unique id of the POA in the process in which it 
1117	 * is created.  It is for use by portable interceptors.
1118	 * <p>
1119	 * This id is guaranteed unique for the life span of the POA in the
1120	 * process.  For persistent POAs, this means that if a POA is created 
1121	 * in the same path with the same name as another POA, these POAs 
1122	 * are identical and, therefore, have the same id.  For transient 
1123	 * POAs, each POA is unique.
1124	 */
1125                readonly attribute ::org::omg::CORBA::OctetSeq id;
1126
1127        }; 
1128
1129        // *****************************************************
1130        // 
1131        // Current interface: 
1132        // 
1133        // *****************************************************
1134
1135	/**
1136	 * The PortableServer::Current interface, derived from 
1137	 * CORBA::Current, provides method implementations with 
1138	 * access to the identity of the object on which the 
1139	 * method was invoked. The Current interface is provided 
1140	 * to support servants that implement multiple objects, 
1141	 * but can be used within the context of POA-dispatched 
1142	 * method invocations on any servant. To provide location 
1143	 * transparency, ORBs are required to support use of 
1144	 * Current in the context of both locally and remotely 
1145	 * invoked operations. An instance of Current can be 
1146	 * obtained by the application by issuing the 
1147	 * CORBA::ORB::resolve_initial_references("POACurrent") 
1148	 * operation. Thereafter, it can be used within the 
1149	 * context of a method dispatched by the POA to obtain 
1150	 * the POA and ObjectId that identify the object on 
1151	 * which that operation was invoked.
1152	 */
1153	interface Current : CORBA::Current { 
1154	        #pragma sun_local Current ""
1155	        #pragma version Current 2.3
1156	/**
1157	 * The exception that is used to indicate that the
1158	 * operation is invoked outside the context of the
1159	 * POA-dispatched operation.
1160	 */
1161
1162	        exception NoContext { }; 
1163	
1164	/**
1165	 * Returns reference to the POA implementing the 
1166	 * object in whose context it is called. 
1167	 *
1168	 * @return The poa implementing the object
1169	 * 
1170	 * @exception NoContext is raised when the operation is
1171	 *            outside the context of a POA-dispatched 
1172	 *            operation
1173	 */
1174	        POA get_POA() 
1175	                raises (NoContext); 
1176
1177	/** 
1178	 * Returns the ObjectId identifying the object in 
1179	 * whose context it is called. 
1180	 *
1181	 * @return the ObjectId of the object
1182	 *
1183	 * @exception NoContext is raised when the operation
1184	 * is called outside the context of a POA-dispatched 
1185	 * operation.
1186	 */
1187
1188	        ObjectId get_object_id() 
1189	                raises (NoContext); 
1190	}; 
1191};
1192