ACE+TAO-7_0_8
[ACE_TAO.git] / TAO / tests / Bug_2936_Regression / PersistentPOA.cpp
blob1c54c14eb978d638616a72be5464c4b0da354734
2 #include "ace/Arg_Shifter.h"
3 #include "tao/PortableServer/POAManager.h"
4 #include "tao/PortableServer/PortableServer.h"
6 #include "PersistentPOA.h"
7 #include "DllORB.h"
9 const ACE_TCHAR *POAname_ = 0;
10 const ACE_TCHAR *ORBname_ = 0;
12 PersistentPoa::PersistentPoa ( )
14 } /* end of PersistentPoa::PersistentPoa ( ) */
17 PersistentPoa::~PersistentPoa ( )
18 throw ()
20 } /* end of PersistentPoa::~PersistentPoa ( ) */
23 int PersistentPoa::init (int argc, ACE_TCHAR *argv[])
25 int result = 0;
27 ACE_Arg_Shifter as(argc, argv);
28 POAname_ = as.get_current();
29 as.ignore_arg();
31 ORBname_ = as.get_current();
32 as.ignore_arg();
34 while(as.is_anything_left())
36 as.ignore_arg();
39 try
41 DllORB * p_orb = ACE_Dynamic_Service<DllORB>::instance (ORBname_);
43 mv_orb = p_orb->orb();
45 CORBA::Object_var v_poa = mv_orb->resolve_initial_references("RootPOA");
47 mv_rootPOA = PortableServer::POA::_narrow(v_poa.in ());
49 if(CORBA::is_nil(mv_rootPOA.in()))
51 ACE_DEBUG((
52 LM_DEBUG,
53 ACE_TEXT ("(%P|%t) init - nil root POA\n")
54 ));
55 return -1;
58 // Policies for the new POA
59 CORBA::PolicyList policies(3);
60 policies.length (3);
62 // Threading policy
63 policies[0] = mv_rootPOA->create_thread_policy(PortableServer::ORB_CTRL_MODEL);
65 // Lifespan policy
66 policies[1] = mv_rootPOA->create_lifespan_policy(PortableServer::PERSISTENT);
68 // ID assignment policy
69 policies[2] = mv_rootPOA->create_id_assignment_policy(PortableServer::USER_ID);
71 mv_thisPOA = mv_rootPOA->create_POA(
72 ACE_TEXT_ALWAYS_CHAR(POAname_),
73 PortableServer::POAManager::_nil(),
74 policies
76 if (CORBA::is_nil(mv_thisPOA.in()))
78 ACE_DEBUG((
79 LM_DEBUG,
80 ACE_TEXT ("(%P|%t) init - POA creation failed\n")
81 ));
82 return -1;
84 else
86 ACE_DEBUG((
87 LM_DEBUG,
88 ACE_TEXT ("(%P|%t) init - POA created\n")
89 ));
92 mv_poaManager = mv_thisPOA->the_POAManager();
94 mv_poaManager->activate();
95 ACE_DEBUG((
96 LM_DEBUG,
97 ACE_TEXT ("(%P|%t) init - activated POA manager\n")
98 ));
100 catch(...)
102 ACE_DEBUG((
103 LM_DEBUG,
104 ACE_TEXT ("(%P|%t) init - exception\n")
106 result = -1;
107 return result;
110 ACE_DEBUG((
111 LM_DEBUG,
112 ACE_TEXT ("(%P|%t) init - POA activated\n")
115 return result;
116 } /* end of PersistentPoa::init ( ) */
119 int PersistentPoa::fini (void)
121 int result = 0;
125 mv_poaManager->deactivate(1, 1);
126 mv_thisPOA->destroy(1, 1);
127 mv_thisPOA = PortableServer::POA::_nil();
129 catch(...)
131 ACE_DEBUG((
132 LM_DEBUG,
133 ACE_TEXT ("(%P|%t) init - exception\n")
135 result = -1;
136 return result;
138 ACE_DEBUG((
139 LM_DEBUG,
140 ACE_TEXT ("(%P|%t) fini - POA deactivated\n")
143 return result;
144 } /* end of PersistentPoa::fini ( ) */
147 ACE_FACTORY_DEFINE (bug2936, PersistentPoa)