1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
|
// $Id$
//===========================================================================
//
// = LIBRARY
// TAO/tests/POA/FindPOA
//
// = FILENAME
// FindPOA.cpp
//
// = DESCRIPTION
// This Program tests the find_POA method of a POA.
//
// = AUTHOR
// Irfan Pyarali
//
//===========================================================================
#include "tao/corba.h"
#include "tao/PortableServer/PortableServer.h"
#include "tao/PortableServer/POA.h"
ACE_RCSID(FindPOA, FindPOA, "$Id$")
void
find_non_existant_POA (PortableServer::POA_ptr parent,
const char *child_poa_name,
int activate)
{
int expected_exception_raised = 0;
// New environment.
ACE_TRY_NEW_ENV
{
// Try to find child poa.
PortableServer::POA_var child_poa =
parent->find_POA (child_poa_name,
activate
TAO_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
}
ACE_CATCH (PortableServer::POA::AdapterNonExistent, foo)
{
expected_exception_raised = 1;
}
ACE_ENDTRY;
ACE_ASSERT (expected_exception_raised);
// In non-debug compiles, asserts will disappear.
ACE_UNUSED_ARG (expected_exception_raised);
}
int
main (int argc, char **argv)
{
TAO_ENV_DECLARE_NEW_ENV;
// Initialize the ORB
ACE_TRY
{
CORBA::ORB_var orb = CORBA::ORB_init (argc, argv, 0 TAO_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
// Obtain the RootPOA.
CORBA::Object_var obj =
orb->resolve_initial_references ("RootPOA"
TAO_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
// Narrow Object reference to RootPOA to a POA reference.
PortableServer::POA_var root_poa =
PortableServer::POA::_narrow (obj.in() TAO_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
// Get the POAManager of the RootPOA.
PortableServer::POAManager_var poa_manager =
root_poa->the_POAManager (TAO_ENV_SINGLE_ARG_PARAMETER);
ACE_TRY_CHECK;
poa_manager->activate (TAO_ENV_SINGLE_ARG_PARAMETER);
ACE_TRY_CHECK;
// Try to find a non-existant POA. Since the Adapter Activator
// has not been installed yet, this call should fail.
find_non_existant_POA (root_poa.in (),
"firstPOA",
1);
// Get a TAO_Adapter_Activator reference
PortableServer::AdapterActivator_var activator =
new TAO_Adapter_Activator (poa_manager.in ());
// Register the TAO_Adapter_Activator reference to be the RootPOA's
// Adapter Activator.
root_poa->the_activator (activator.in ()
TAO_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
// Try to find a childPOA of RootPOA named firstPOA
ACE_CString name = "firstPOA";
PortableServer::POA_var first_poa =
root_poa->find_POA (name.c_str (),
1
TAO_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
name = "secondPOA";
PortableServer::POA_var second_poa =
first_poa->find_POA (name.c_str (),
1
TAO_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
// Try to find a non-existant POA. Even though the Adapter
// Activator has been installed, this call should fail because
// the activate (if not found) flag is 0.
find_non_existant_POA (root_poa.in (),
"thirdPOA",
0);
// Get the names of all the POAs
CORBA::String_var root_poa_name =
root_poa->the_name (TAO_ENV_SINGLE_ARG_PARAMETER);
ACE_TRY_CHECK;
CORBA::String_var first_poa_name =
first_poa->the_name (TAO_ENV_SINGLE_ARG_PARAMETER);
ACE_TRY_CHECK;
CORBA::String_var second_poa_name =
second_poa->the_name (TAO_ENV_SINGLE_ARG_PARAMETER);
ACE_TRY_CHECK;
ACE_DEBUG ((LM_DEBUG,
"%s\n%s\n%s\n",
root_poa_name.in (),
first_poa_name.in (),
second_poa_name.in ()));
}
ACE_CATCHANY
{
ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "Exception caught");
return -1;
}
ACE_ENDTRY;
ACE_CHECK_RETURN (-1);
return 0;
}
|