Thu, 31 Aug 2017 18:10:36 +0800
merge
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 */
26 #include "corba.idl"
27 #include "CORBAX.idl"
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 */
36 module PortableServer {
38 #pragma version PortableServer 2.3
40 // forward reference
41 interface POA;
43 /**
44 * List of POAs
45 */
46 typedef sequence<POA> POAList;
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;
58 /**
59 * ObjectId value associated with the object reference.
60 */
61 typedef sequence<octet> ObjectId;
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; };
72 // **********************************************
73 //
74 // Policy interfaces
75 //
76 // **********************************************
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;
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 };
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 };
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 };
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 };
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 };
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 };
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 };
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 };
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 };
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 };
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 };
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 };
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 };
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 };
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};
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);
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 };
362 // **************************************************
363 //
364 // AdapterActivator interface
365 //
366 // ****************************
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 */
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 };
396 // **************************************************
397 //
398 // ServantManager interface
399 //
400 // ******************************
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 */
414 interface ServantManager
415 { #pragma sun_local ServantManager "" };
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 };
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 };
542 // **************************************************
543 //
544 // POA interface
545 //
546 // *****************************************
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 { };
567 /**
568 * This is raised if the POA with a specified Name cannot
569 * be found.
570 */
571 exception AdapterNonExistent { };
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 };
581 /**
582 * This is raised if no default servant is associated
583 * with the POA.
584 */
585 exception NoServant { };
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 */
597 exception ObjectNotActive { };
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 { };
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 { };
613 /**
614 * This is raised if the reference was not created by
615 * the POA
616 * specified in the reference.
617 */
618 exception WrongAdapter { };
620 /**
621 * WrongPolicy is specified when the POA does not
622 * specify the policy appropriate for its operations.
623 */
624 exception WrongPolicy { };
627 //----------------------------------------
628 //
629 // POA creation and destruction
630 //
631 //-------------------------------
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);
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);
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);
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 */
753 RequestProcessingPolicy create_request_processing_policy(
754 in RequestProcessingPolicyValue value);
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;
784 /**
785 * This attribute identifies the adapter activator
786 * associated with the POA.
787 */
788 attribute AdapterActivator the_activator;
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);
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);
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);
856 // **************************************************
857 //
858 // object activation and deactivation
859 //
860 // ************
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 */
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);
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);
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);
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);
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);
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);
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);
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);
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);
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;
1127 };
1129 // *****************************************************
1130 //
1131 // Current interface:
1132 //
1133 // *****************************************************
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 */
1162 exception NoContext { };
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);
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 */
1188 ObjectId get_object_id()
1189 raises (NoContext);
1190 };
1191 };