Revert "Use a variable on the stack to not have a temporary in the call"
[ACE_TAO.git] / TAO / tests / Bug_2188_Regression / server.cpp
blob91e1704f2902d64c051b2ec13a2d091f324bf17a
1 #include "broken_i.h"
2 #include "ace/Get_Opt.h"
3 #include "ace/OS_NS_stdio.h"
5 const ACE_TCHAR *ior_output_file = ACE_TEXT("broken.ior");
7 int
8 parse_args (int argc, ACE_TCHAR *argv[])
10 ACE_Get_Opt get_opts (argc, argv, ACE_TEXT("o:"));
11 int c;
13 while ((c = get_opts ()) != -1)
14 switch (c)
16 case 'o':
17 ior_output_file = get_opts.opt_arg ();
18 break;
20 case '?':
21 default:
22 ACE_ERROR_RETURN ((LM_ERROR,
23 "usage: %s "
24 "-o <iorfile>"
25 "\n",
26 argv [0]),
27 -1);
29 // Indicates successful parsing of the command line
30 return 0;
33 int
34 ACE_TMAIN(int argc, ACE_TCHAR *argv[])
36 try
38 CORBA::ORB_var orb =
39 CORBA::ORB_init (argc, argv);
41 CORBA::Object_var poa_object =
42 orb->resolve_initial_references("RootPOA");
44 PortableServer::POA_var root_poa =
45 PortableServer::POA::_narrow (poa_object.in ());
47 if (CORBA::is_nil (root_poa.in ()))
48 ACE_ERROR_RETURN ((LM_ERROR,
49 " (%P|%t) Panic: nil RootPOA\n"),
50 1);
52 PortableServer::POAManager_var poa_manager =
53 root_poa->the_POAManager ();
55 if (parse_args (argc, argv) != 0)
56 return 1;
58 ArrayTest_i *target_servant;
59 ACE_NEW_RETURN (target_servant,ArrayTest_i,1);
61 PortableServer::ServantBase_var owner_transfer(target_servant);
63 PortableServer::ObjectId_var id =
64 root_poa->activate_object (target_servant);
66 CORBA::Object_var object = root_poa->id_to_reference (id.in ());
68 ArrayTest_var atobj =
69 ArrayTest::_narrow (object.in ());
71 ServerAdmin_i *servant;
72 ACE_NEW_RETURN (servant, ServerAdmin_i(atobj.in()),1);
74 // safely releases previous reference and takes ownership of this one.
75 owner_transfer = servant;
77 id = root_poa->activate_object (servant);
78 object = root_poa->id_to_reference (id.in ());
79 ServerAdmin_var saobj = ServerAdmin::_narrow (object.in ());
81 CORBA::String_var ior =
82 orb->object_to_string (saobj.in ());
84 // Output the IOR to the <ior_output_file>
85 FILE *output_file= ACE_OS::fopen (ior_output_file, "w");
86 if (output_file == 0)
87 ACE_ERROR_RETURN ((LM_ERROR,
88 "Cannot open output file for writing IOR: %s",
89 ior_output_file),
90 1);
91 ACE_OS::fprintf (output_file, "%s", ior.in ());
92 ACE_OS::fclose (output_file);
94 poa_manager->activate ();
96 orb->run ();
98 ACE_DEBUG ((LM_DEBUG, "(%P|%t) server - event loop finished\n"));
100 root_poa->destroy (true, true);
102 orb->destroy ();
104 catch (const CORBA::Exception& ex)
106 ex._tao_print_exception ("Exception caught:");
107 return 1;
110 return 0;