diff options
author | smcqueen <smcqueen@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2003-11-18 14:55:10 +0000 |
---|---|---|
committer | smcqueen <smcqueen@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2003-11-18 14:55:10 +0000 |
commit | f9a2805548ad34f7134c49d4fcdba65330e6dca2 (patch) | |
tree | 5a3efe2343f5f09601d809aaca43c2eb4c1cf178 | |
parent | 999a88e99e9e79c5b3cd7002bbdac7e7271840bf (diff) | |
download | ATCD-f9a2805548ad34f7134c49d4fcdba65330e6dca2.tar.gz |
ChangeLogTag: Tue Nov 18 13:59:11 2003 Simon McQueen <sm@prismtechnologies.com>
98 files changed, 6134 insertions, 1221 deletions
diff --git a/TAO/ChangeLog b/TAO/ChangeLog index 47ec08c7b88..9016c1478e9 100644 --- a/TAO/ChangeLog +++ b/TAO/ChangeLog @@ -1,8 +1,165 @@ +Tue Nov 18 13:59:11 2003 Simon McQueen <sm@prismtechnologies.com> + + * tao/ORB.cpp (resolve_service): + + Remove the check for an environment property defining the IOR of one + of the four 'known' services. + + (resolve_initial_references): + + Check instead for an environment property in the form <name>IOR after + checking the IOR table (where name is any name). This fixes bug + #1334. + + (create_operation_list): + Added this method. Delegates to TAO_IFR_Client_Adapter (see below). + + * tao/CORBA_methods.h: + * tao/ORB.h (create_operation_list): + * tao/IFR_Client_Adapter.h (create_operation_list): + * tao/IFR_Client/IFR_ClientAdapterImpl.h (create_operation_list): + * tao/IFR_Client/IFR_ClientAdapterImpl.cpp (create_operation_list): + + Implemented create_operation_list. This fixes bug #1630. + + * orbsvcs/IFR_Service/ifr_removing_visitor.cpp: + * orbsvcs/IFR_Service/ifr_removing_visitor.h: + + Added visit_root method. This fixes bug #1331. + + * tao/DynamicAny/DynUnion_i.cpp (to_any): + + Check if union is empty, i.e. check if it has an active member, + before adding member_ to the CDR Stream. This fixes bug #1636. + + (set_from_any): + + Strip alias from type code. This fixes bug #1639. + + * utils/nslist/nsadd.cpp: + * utils/nslist/nslist.cpp: + * utils/nslist/README: + + Add the ability to list the IORs of subcontexts within a naming + graph. This fixes bug #1624. + + * tao/Valuetype/ValueBase.cpp (_tao_unmarshal_pre): + + If no type information is given in the CDR encoding, as indicated + by the <value-tag>, then use the repository id parameter instead. + This fixes bug #1629. + + * TAO_IDL/be/be_visitor_typedef/typedef_ci.cpp (visit_array): + + Fix check for definition in another file. This fixes bug #1628. + + * utils/catior/catior.cpp (main): + + Removed -n option. It doesn't do anything. Fixes bug #1332. + + * tao/Acceptor_Registry.cpp (open): + + Allow additional -ORBEndpoint value(s) to be specified as the + environment property TAO_ORBENDPOINT. This fixes bug #1627. + + * orbsvcs/orbsvcs/CosNaming.bor: + * orbsvcs/orbsvcs/CosNaming.dsp: + * orbsvcs/orbsvcs/CosNaming.mpc: + * orbsvcs/orbsvcs/Makefile.CosNaming: + + Added dependency on TAO_Messaging. See below. + + * orbsvcs/orbsvcs/Naming/Hash_Naming_Context.cpp: + * orbsvcs/orbsvcs/Naming/Naming_Utils.cpp: + * orbsvcs/orbsvcs/Naming/Naming_Utils.h: + + Set relative round trip timeout on Orb in response to value + of new '-z' command line NameService parameter. This fixes + bug #1634. + + * orbsvcs/Naming_Service/README: + + Documented the -z option. + + * orbsvcs/tests/Bug_1334_Regression/Bug_1334_client.dsp: + * orbsvcs/tests/Bug_1334_Regression/Bug_1334_client.dsw: + * orbsvcs/tests/Bug_1334_Regression/Bug_1334_Regression.dsw: + * orbsvcs/tests/Bug_1334_Regression/client.cpp: + * orbsvcs/tests/Bug_1334_Regression/Makefile: + * orbsvcs/tests/Bug_1334_Regression/Makefile.Bug_1334_client: + * orbsvcs/tests/Bug_1334_Regression/README: + * orbsvcs/tests/Bug_1334_Regression/run_test.pl: + * orbsvcs/tests/Bug_1334_Regression/test.mpc: + * orbsvcs/tests/Bug_1630_Regression/Bug_1630_Regression.dsw: + * orbsvcs/tests/Bug_1630_Regression/Bug_1630_testclient.dsp: + * orbsvcs/tests/Bug_1630_Regression/Makefile: + * orbsvcs/tests/Bug_1630_Regression/Makefile.Bug_1630_testclient: + * orbsvcs/tests/Bug_1630_Regression/run_test.pl: + * orbsvcs/tests/Bug_1630_Regression/test.mpc: + * orbsvcs/tests/Bug_1630_Regression/testclient.cpp: + * tests/Bug_1330_Regression/Bug_1330_Client.dsp: + * tests/Bug_1330_Regression/Bug_1330_Regression.mpc: + * tests/Bug_1330_Regression/Bug_1330_Server.dsp: + * tests/Bug_1330_Regression/client.cpp: + * tests/Bug_1330_Regression/Makefile: + * tests/Bug_1330_Regression/Makefile.Bug_1330_Client: + * tests/Bug_1330_Regression/Makefile.Bug_1330_Server: + * tests/Bug_1330_Regression/README: + * tests/Bug_1330_Regression/run_test.pl: + * tests/Bug_1330_Regression/server.cpp: + * tests/Bug_1330_Regression/Test.idl: + * tests/Bug_1330_Regression/Test_i.cpp: + * tests/Bug_1330_Regression/Test_i.h: + * tests/Bug_1627_Regression/Bug_1627_Client.dsp: + * tests/Bug_1627_Regression/Bug_1627_Regression.dsw: + * tests/Bug_1627_Regression/Bug_1627_Server.dsp: + * tests/Bug_1627_Regression/client.cpp: + * tests/Bug_1627_Regression/Makefile: + * tests/Bug_1627_Regression/Makefile.Bug_1627_Client: + * tests/Bug_1627_Regression/Makefile.Bug_1627_Server: + * tests/Bug_1627_Regression/README: + * tests/Bug_1627_Regression/run_test.pl: + * tests/Bug_1627_Regression/server.cpp:: + * tests/Bug_1627_Regression/Test.idl: + * tests/Bug_1627_Regression/test.mpc: + * tests/Bug_1627_Regression/Test_i.cpp: + * tests/Bug_1627_Regression/Test_i.h: + * tests/Bug_1628_Regression/run_test.pl: + * tests/Bug_1628_Regression/TestCase.idl: + * tests/Bug_1628_Regression/TestType.idl: + * tests/Bug_1635_Regression/Bug_1635_Client.dsp: + * tests/Bug_1635_Regression/Bug_1635_Regression.dsw: + * tests/Bug_1635_Regression/Bug_1635_Regression.mpc: + * tests/Bug_1635_Regression/client.cpp: + * tests/Bug_1635_Regression/Makefile: + * tests/Bug_1635_Regression/Makefile.Bug_1635_Client: + * tests/Bug_1635_Regression/README: + * tests/Bug_1635_Regression/run_test.pl: + * tests/Bug_1636_Regression/Bug_1636_Regression.dsw: + * tests/Bug_1636_Regression/bug_1636_testclient.dsp: + * tests/Bug_1636_Regression/client.cpp: + * tests/Bug_1636_Regression/Makefile: + * tests/Bug_1636_Regression/Makefile.bug_1636_testclient: + * tests/Bug_1636_Regression/README: + * tests/Bug_1636_Regression/run_test.pl: + * tests/Bug_1636_Regression/test.idl: + * tests/Bug_1636_Regression/test.mpc: + * tests/Bug_1639_Regression/Bug_1639_Regression.dsw: + * tests/Bug_1639_Regression/Bug_1639_testclient.dsp: + * tests/Bug_1639_Regression/Makefile: + * tests/Bug_1639_Regression/Makefile.Bug_1639_testclient: + * tests/Bug_1639_Regression/run_test.pl: + * tests/Bug_1639_Regression/struct.idl: + * tests/Bug_1639_Regression/struct_client.cpp: + * tests/Bug_1639_Regression/test.mpc: + + Regression tests added. + Tue Nov 18 07:46:30 2003 Balachandran Natarajan <bala@dre.vanderbilt.edu> * orbsvcs/orbsvcs/FaultTolerance/FT_ORB_Utils_export.h: - Removed the pragma message. + Removed the pragma message. Tue Nov 18 05:12:17 UTC 2003 Don Hinton <dhinton@dresystems.com> @@ -22,11 +179,11 @@ Tue Nov 18 05:12:17 UTC 2003 Don Hinton <dhinton@dresystems.com> Mon Nov 17 20:42:06 2003 Balachandran Natarajan <bala@dre.vanderbilt.edu> - * orbsvcs/orbsvcs/FaultTolerance/fault_tol_export.h: - - Reverted the change to fault_tol_export.h. This was creating - problems with g++, especially the pragma messages. This - reversion just removes those messages. + * orbsvcs/orbsvcs/FaultTolerance/fault_tol_export.h: + + Reverted the change to fault_tol_export.h. This was creating + problems with g++, especially the pragma messages. This + reversion just removes those messages. Mon Nov 17 16:31:39 2003 Dale Wilson <wilson_d@ociweb.com> diff --git a/TAO/TAO_IDL/be/be_visitor_typedef/typedef_ci.cpp b/TAO/TAO_IDL/be/be_visitor_typedef/typedef_ci.cpp index 8e0587ef0a1..145ba780e8f 100644 --- a/TAO/TAO_IDL/be/be_visitor_typedef/typedef_ci.cpp +++ b/TAO/TAO_IDL/be/be_visitor_typedef/typedef_ci.cpp @@ -18,8 +18,8 @@ // // ============================================================================ -ACE_RCSID (be_visitor_typedef, - typedef_ci, +ACE_RCSID (be_visitor_typedef, + typedef_ci, "$Id$") // ****************************************************** @@ -78,7 +78,7 @@ be_visitor_typedef_ci::visit_typedef (be_typedef *node) ACE_ERROR_RETURN ((LM_ERROR, "(%N:%l) be_visitor_typedef_ch::" "visit_typedef - " - "bad primitive base type\n"), + "bad primitive base type\n"), -1); } @@ -88,7 +88,7 @@ be_visitor_typedef_ci::visit_typedef (be_typedef *node) ACE_ERROR_RETURN ((LM_ERROR, "(%N:%l) be_visitor_typedef_ch::" "visit_typedef - " - "failed to accept visitor\n"), + "failed to accept visitor\n"), -1); } @@ -108,7 +108,7 @@ be_visitor_typedef_ci::visit_typedef (be_typedef *node) ACE_ERROR_RETURN ((LM_ERROR, "(%N:%l) be_visitor_typedef_ch::" "visit_typedef - " - "bad base type\n"), + "bad base type\n"), -1); } @@ -118,7 +118,7 @@ be_visitor_typedef_ci::visit_typedef (be_typedef *node) ACE_ERROR_RETURN ((LM_ERROR, "(%N:%l) be_visitor_typedef_ch::" "visit_typedef - " - "failed to accept visitor\n"), + "failed to accept visitor\n"), -1); } @@ -169,7 +169,7 @@ be_visitor_typedef_ci::visit_array (be_array *node) } else { - if (bt->imported ()) + if (bt->imported () && bt->cli_inline_gen()) { // Code below is generated in another file. return 0; @@ -240,7 +240,7 @@ be_visitor_typedef_ci::visit_sequence (be_sequence *node) ACE_ERROR_RETURN ((LM_ERROR, "(%N:%l) be_visitor_typedef_ci::" "visit_sequence - " - "base class visitor failed \n"), + "base class visitor failed \n"), -1); } } @@ -271,7 +271,7 @@ be_visitor_typedef_ci::visit_structure (be_structure *node) ACE_ERROR_RETURN ((LM_ERROR, "(%N:%l) be_visitor_typedef_ci::" "visit_structure - " - "base class visitor failed \n"), + "base class visitor failed \n"), -1); } } @@ -302,7 +302,7 @@ be_visitor_typedef_ci::visit_union (be_union *node) ACE_ERROR_RETURN ((LM_ERROR, "(%N:%l) be_visitor_typedef_ci::" "visit_union - " - "base class visitor failed \n"), + "base class visitor failed \n"), -1); } } diff --git a/TAO/docs/Options.html b/TAO/docs/Options.html index 80c2cafbbd7..8fea9e065eb 100644 --- a/TAO/docs/Options.html +++ b/TAO/docs/Options.html @@ -1,1110 +1,1197 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> <!-- $Id$ --> -<HTML><HEAD><TITLE>Options for TAO Components</TITLE> -</HEAD> -<BODY text=#000000 vLink=#ff0f0f link=#000fff bgColor=#ffffff> -<HR> - -<P> -<H2 align=center>Options for TAO Components</H2> - -<H3>Table of Contents</H3> -<UL> - <LI><A href="#MOT">Introduction</A> - <LI><A href="#choose">Choosing the Right Approach</A> - <LI><A href="#EXP">TAO's ORB Configuration Options</A> - <UL> - <LI><A href="#EV">Environment Variables</A> - <LI><A href="#CLO">Command-line Options</A> - <OL> - <LI><A - href="#CSCB">Controling Service Configurator Behavior </A> - <LI><A - href="#CDI">Controlling Debugging Information </A> - <LI><A - href="#ORP">Optimizing Request Processing </A> - <LI><A - href="#CMPS">Connection Management and Protocol Selection </A> - <LI><A - href="#MO">Miscellaneous Options </A></LI></OL> - <LI><A href="#SVC">Service Configuration File </A> - <OL> - <LI><A href="#TRF">Simple and Advanced Resource Factories </A> - <OL> - <LI><A - href="#TDRF">TAO_Default_Resource_Factory - </A> - <LI><A - href="#TARF">TAO_Advanced_Resource_Factory - </A></LI></OL> - <LI><A - href="#TSSF">Server_Strategy_Factory - </A> - <LI><A - href="#TCSF">Client_Strategy_Factory - </A></LI></OL></LI></UL></LI></UL> -<HR> - -<H3><B><A name=MOT>Introduction</A></B></H3> - + <title>Options for TAO Components</title> +</head> +<body bgcolor="#ffffff" link="#000fff" vlink="#ff0f0f" text="#000000"> +<hr> +<p></p> +<h2 align="center">Options for TAO Components</h2> +<h3>Table of Contents</h3> +<ul> + <li><a href="#MOT">Introduction</a> </li> + <li><a href="#choose">Choosing the Right Approach</a> </li> + <li><a href="#EXP">TAO's ORB Configuration Options</a> + <ul> + <li><a href="#EV">Environment Variables</a> </li> + <li><a href="#CLO">Command-line Options</a> + <ol> + <li><a href="#CSCB">Controling Service Configurator Behavior </a> + </li> + <li><a href="#CDI">Controlling Debugging Information </a> </li> + <li><a href="#ORP">Optimizing Request Processing </a> </li> + <li><a href="#CMPS">Connection Management and Protocol +Selection </a> </li> + <li><a href="#MO">Miscellaneous Options </a></li> + </ol> + </li> + <li><a href="#SVC">Service Configuration File </a> + <ol> + <li><a href="#TRF">Simple and Advanced Resource Factories </a> + <ol> + <li><a href="#TDRF">TAO_Default_Resource_Factory </a> </li> + <li><a href="#TARF">TAO_Advanced_Resource_Factory </a></li> + </ol> + </li> + <li><a href="#TSSF">Server_Strategy_Factory </a> </li> + <li><a href="#TCSF">Client_Strategy_Factory </a></li> + </ol> + </li> + </ul> + </li> +</ul> +<hr> +<h3><b><a name="MOT">Introduction</a></b></h3> TAO is a highly flexible ORB that contains a wide range of ORB -configuration options. One or more of these options can be combined +configuration options. One or more of these options can be combined to meet various application requirements, such as low-latency, -predictable real-time behavior, or small memory footprint. TAO's ORB +predictable real-time behavior, or small memory footprint. TAO's ORB configuration options are managed by an object-oriented framework within the ORB Core that contains the following types of entities: - -<UL> - -<LI><B>Settings</B>, which are options that can be assigned values -differing from their default settings. Examples include setting the +<ul> + <li><b>Settings</b>, which are options that can be assigned values +differing from their default settings. Examples include setting the size of a Portable Object Adapter (POA)'s active object map or configuring the ORB to print debugging information as it processes -requests. A few of these are run-time options, while a majority of -them are compile-time options. <P> - -<LI><B>Resources</B>, which are objects used internally by TAO, such -as a <EM>reactor</EM> framework that demultiplexes new connection and -data requests from a client or <EM>synchronization mechanisms</EM> -used to regulate access to certain parts of the ORB.<P> - -<LI><B>Strategies</B>, which are objects that use the <B>Resource</B> +requests. A few of these are run-time options, while a majority of +them are compile-time options. + <p></p> + </li> + <li><b>Resources</b>, which are objects used internally by TAO, such +as a <em>reactor</em> framework that demultiplexes new connection and +data requests from a client or <em>synchronization mechanisms</em> +used to regulate access to certain parts of the ORB. + <p></p> + </li> + <li><b>Strategies</b>, which are objects that use the <b>Resource</b> entities to perform various ORB tasks, such as connection management, -concurrency, and demultiplexing. <P> - -<LI><B>Factories</B>, which TAO uses to create and consolidate its +concurrency, and demultiplexing. + <p></p> + </li> + <li><b>Factories</b>, which TAO uses to create and consolidate its many resources and strategies into a manageable number of factories that can be (re)configured into the ORB conveniently and consistently -by ORB and application developers. <P> - -</UL> - +by ORB and application developers. + <p></p> + </li> +</ul> The set of TAO ORB configuration options that are represented by the settings, resources, strategies, and factories can be specified via -<B>environment variables</B>, <B>service configuration files</B>, and -<B>command-line arguments</B>, as outlined below: - -<UL> - -<LI> <B>Environment variables</B> are limited to specifying the +<b>environment variables</b>, <b>service configuration files</b>, and +<b>command-line arguments</b>, as outlined below: +<ul> + <li> <b>Environment variables</b> are limited to specifying the interoperable object reference (IOR) and port number of TAO's Naming Service, Trading Service and Implementation Repository. They are limited in flexibility and don't provide the most important configuration hooks necessary to configure TAO for real-time and -high-performance applications.<P> - -<LI> <B>Command-line options</B> are passed to the ORB initialization -factory method, <CODE>CORBA::ORB_init()</CODE>, by an application +high-performance applications. + <p></p> + </li> + <li> <b>Command-line options</b> are passed to the ORB +initialization +factory method, <code>CORBA::ORB_init()</code>, by an application using the standard <i>argc, argv</i> tuple passed to the application's -<CODE>main()</CODE>. Most of the options that can be exercised through + <code>main()</code>. Most of the options that can be exercised +through environment variables can also be manipulated through command-line -options. Command-line options override the environment variable -settings if both are enabled. <p> - -<LI> The <B>Service Configurator</B> is a framework that can be used +options. Command-line options override the environment variable +settings if both are enabled. + <p></p> + </li> + <li> The <b>Service Configurator</b> is a framework that can be used to statically and dynamically configure components into middleware and -applications. The information comprising the names of these +applications. The information comprising the names of these components and their corresponding options are specified in a service configurator file, whose default file name is -<CODE>svc.conf</code>. The service configurator is opened and -processed by the ORB in <CODE>CORBA::ORB_init()</CODE>. The service + <code>svc.conf</code>. The service configurator is opened and +processed by the ORB in <code>CORBA::ORB_init()</code>. The service configurator processing is done after all the command-line options -have been <!-- Bala, should this be "processed" or just "parsed"? -There could be a different --> parsed.<P> -<!-- It should be just "parsed". The options from the command lines +have been<!-- Bala, should this be "processed" or just "parsed"? +There could be a different --> +parsed. + <p><!-- It should be just "parsed". The options from the command lines <!-- are just parsed in ORB_init () and stored for later use --> <!-- For the service configurator it is tricky. To be on the safer -<!-- side I would say "processed". --> - -</UL> - -<P><HR align=left width=25%><P> -<h3><A NAME="choose">Choosing the Right Approach</A></h3> - +<!-- side I would say "processed". --></p> + </li> +</ul> +<p></p> +<hr width="25%" align="left"> +<p></p> +<h3><a name="choose">Choosing the Right Approach</a></h3> TAO's command-line options are useful when there's a fixed set of configuration options, each of which has a predefined list of -alternative values. Conversely, TAO's service configurator file is +alternative values. Conversely, TAO's service configurator file is useful for configuring a broader range of resources, strategies, and factories. Generally speaking, the service configurator file allows the user to <br> - -<Ul> - <li>configure the existing components (<EM>i.e.</EM>, resources, - strategies and factories) based on the predefined list of - alternatives that TAO provides or<P> +<ul> + <li>configure the existing components (<em>i.e.</em>, resources, +strategies and factories) based on the predefined list of alternatives +that TAO provides or + <p> </p> </li> <li>extend the existing factories by providing user-defined - components and dynamically load them through the service - configurator mechanism. </li> -</Ul> +components and dynamically load them through the service configurator +mechanism. </li> +</ul> Additionally, the service configurator mechanism allows an application to control the behavior of the ORB using extensible -configuration information. - -In general, the command-line configuration options are provided in TAO +configuration information. In general, the command-line configuration +options are provided in TAO in order to leverage preexisting configuration settings that are -compiled within the TAO ORB. Users are not allowed to change these +compiled within the TAO ORB. Users are not allowed to change these settings. In contrast, those options that require more flexible manipulation of resources, strategies, and factories must be -configured via <A HREF="#SVC">service configuration files</A>. As a +configured via <a href="#SVC">service configuration files</a>. As a result, the command-line options and the service configurator options -cannot be used interchangeably. <P> - -<HR> - -<H3><B><A name=EXP>TAO's ORB Configuration Options</A></B></H3> - +cannot be used interchangeably. +<p></p> +<hr> +<h3><b><a name="EXP">TAO's ORB Configuration Options</a></b></h3> This section provides a detailed overview of how to configure TAO's options using environment variables, command-line options, and service -configuration files.<P> - -<HR align=left width=25%> -<h3><A name=EV>Environment Variables</A></h3> - +configuration files. +<p></p> +<hr width="25%" align="left"> +<h3><a name="EV">Environment Variables</a></h3> As mentioned earlier, environment variables have a limited use in TAO -ORB configuration. The currently supported environment variables are +ORB configuration. The currently supported environment variables are listed below. They are used to specify the IOR and port numbers for three of TAO's ORB services. - -<BLOCKQUOTE> - <P> - <TABLE cellSpacing=2 cellPadding=0 border=2> - <TBODY> - <TR> - <TH>Environment Variable</TH> - <TH>Description</TH></TR> - <TR> - <TD><CODE>NameServiceIOR</CODE> <EM>which</EM></TD> - <TD>Specifies the IOR for the Naming Service that can be used to - bootstrap the Naming Service object reference within an - application. </TD></TR> - <TR> - <TD><CODE>NameServicePort</CODE> <EM>which</EM></TD> - <TD>Specifies which port the Naming Service is listening on for - multicast requests. </TD></TR> - <TR> - <TD><CODE>TradingServiceIOR</CODE> <EM>which</EM></TD> - <TD>Specifies the IOR for the Trading Service. </TD></TR> - <TR> - <TD><CODE>TradingServicePort</CODE> <EM>which</EM></TD> - <TD>Specifies which port the Trading Service is listening on for - multicast requests. </TD></TR> - <TR> - <TD><CODE>ImplRepoServiceIOR</CODE> <EM>which</EM></TD> - <TD>Specifies the IOR for the Implementation Repository. </TD></TR> - <TR> - <TD><CODE>ImplRepoServicePort</CODE> <EM>which</EM></TD> - <TD>Specifies which port the Implementation Repository is listening on - for multicast requests. </TD></TR></TBODY></TABLE></P></BLOCKQUOTE> - +<blockquote> + <p> + <table border="2" cellpadding="0" cellspacing="2"> + <tbody> + <tr> + <th>Environment Variable</th> + <th>Description</th> + </tr> + <tr> + <td><code>NameServicePort</code> <em>which</em></td> + <td>Specifies which port the Naming Service is listening on for +multicast requests. </td> + </tr> + <tr> + <td><code>TradingServicePort</code> <em>which</em></td> + <td>Specifies which port the Trading Service is listening on +for multicast requests. </td> + </tr> + <tr> + <td><code>ImplRepoServicePort</code> <em>which</em></td> + <td>Specifies which port the Implementation Repository is +listening on for multicast requests. </td> + </tr> + </tbody> + </table> + </p> +</blockquote> +In addition to being able to define the port where these known services +are listening for multicast requests, as above, it is possible to set +an environment variable that specifies the IOR of any named service. +For example <code>NameServiceIOR=<which>,TradingServiceIOR=<which>, +ImplRepoServiceIOR=<which>, MyServiceIOR=<which></code>. This +will have a similar effect to defining an -ORBInitRef value on the +command line (see below). Any value set as a command line -ORBInitRef +option will override any value set as an environment variable for the +same service name.<br> +<br> In general, setting environment variables is not particularly portable or convenient, which is why users can also set these options via command-line options. The example shown below demonstrates a deployment scenario where the client and Naming Service run on the -same host: <P> -<code> +same host: +<p><code> % NameService.exe -ORBEndpoint iiop://localhost:12345 -</CODE><P> -<CODE> +</code></p> +<p><code> % client.exe -ORBInitRef NameService=iiop://localhost:12345" -</code><P> - -An explanation of these command-line options appears below. <P> - -<HR align=left width=25%> -<H3><A name=CLO>Command-line Options</A></h3> - +</code></p> +<p>An explanation of these command-line options appears below. </p> +<p></p> +<hr width="25%" align="left"> +<h3><a name="CLO">Command-line Options</a></h3> TAO's run-time behavior can also be controlled by passing options via -the CORBA initialization method <CODE>CORBA::ORB_init()</CODE>. ORB +the CORBA initialization method <code>CORBA::ORB_init()</code>. ORB initialization options are commonly passed into the program from the -command-line, using the <CODE>argc</CODE> and <CODE>argv</CODE> -parameters available to the <CODE>main()</CODE> function. <P> - -Command-line options can be classified into the following groups -according to their purposes:</P> - -<OL> - <LI><A - href="#CSCB">Controlling - Service Configurator Behavior</A> - <LI><A href="#CDI">Controlling - Debugging Information</A> - <LI><A href="#ORP">Optimizing - Request Processing</A> - <LI><A href="#CMPS">Connection - Management and Protocol Selection</A> - <LI><A - href="#MO">Miscellaneous - Options</A> -</OL> - -We describe each of these five groups of options below. <P> - -<h4><A name=CSCB>1. Controlling Service Configurator Behavior</A></h4> - -The options described below influence the behavior of the ORB's <A -HREF="#SVC">service configurator</CODE>, -which is opened and processed <EM>after</EM> the command-line options -have been parsed. <P> - -<BLOCKQUOTE> - <P> - <TABLE cellSpacing=2 cellPadding=0 border=2> - <TBODY> - <TR> - <TH>Option</TH> - <TH>Description</TH></TR> - <TR> - <TD><CODE>-ORBSvcConf</CODE> <EM>config filename</EM></TD> - <TD>Specifies the name of the file used to read - service configuration directives via the Service - Configurator framework. By - default, a service configurator-based application will look for a file - named <CODE>"svc.conf"</CODE> in the current directory. </TD></TR> - <TR> - <TD><CODE>-ORBSvcConfDirective</CODE> <EM>directivestring</EM></TD> - <TD>Specifies a service configuration directive, which is passed to - the Service Configurator. You can pass multiple of these options on - the same command-line. </TD></TR> -</TBODY></TABLE></P></BLOCKQUOTE> - -<h4><A name=CDI>2. Controlling Debugging Information</A></h4> - +command-line, using the <code>argc</code> and <code>argv</code> +parameters available to the <code>main()</code> function. +<p>Command-line options can be classified into the following groups +according to their purposes:</p> +<ol> + <li><a href="#CSCB">Controlling Service Configurator Behavior</a> </li> + <li><a href="#CDI">Controlling Debugging Information</a> </li> + <li><a href="#ORP">Optimizing Request Processing</a> </li> + <li><a href="#CMPS">Connection Management and Protocol Selection</a> </li> + <li><a href="#MO">Miscellaneous Options</a> + </li> +</ol> +We describe each of these five groups of options below. +<p></p> +<h4><a name="CSCB">1. Controlling Service Configurator Behavior</a></h4> +The options described below influence the behavior of the ORB's <a + href="#SVC">service configurator, which is opened and processed <em>after</em> +the command-line options +have been parsed. </a> +<p></p> +<blockquote><a href="#SVC"> </a> + <p><a href="#SVC"> </a> + <table border="2" cellpadding="0" cellspacing="2"> + <tbody> + <tr> + <th>Option</th> + <th>Description</th> + </tr> + <tr> + <td><code>-ORBSvcConf</code> <em>config filename</em></td> + <td>Specifies the name of the file used to read service +configuration directives via the Service Configurator framework. By +default, a service configurator-based application will look for a file +named <code>"svc.conf"</code> in the current directory. </td> + </tr> + <tr> + <td><code>-ORBSvcConfDirective</code> <em>directivestring</em></td> + <td>Specifies a service configuration directive, which is +passed to the Service Configurator. You can pass multiple of these +options on the same command-line. </td> + </tr> + </tbody> + </table> + </p> +</blockquote> +<h4><a name="CDI">2. Controlling Debugging Information</a></h4> During application development and testing, it is often necessary to control the amount and type of debugging information output by the -ORB. The following options enable TAO to provide debugging -information at several levels of granularity.<P> - -<BLOCKQUOTE> - <P> - <TABLE cellSpacing=2 cellPadding=0 border=2> - <TBODY> - <TR> - <TH>Option</TH> - <TH>Description</TH></TR> - <TR> - <TD><CODE>-ORBDebug</CODE></TD> - <TD>Instructs the ORB to print debugging messages from the - service configurator framework. This option does not have a - value but is used as a toggle to enable or disable debugging - messages.</TD></TR> - <TR> - <TD><CODE>-ORBDebugLevel </CODE><EM>level</EM></TD> - <TD>Control the level of debugging in the ORB. - Higher numbers generate more output (try 10). The default value - of this option is 0.</TD></TR> - <TR> - <TD><CODE>-ORBLogFile</CODE> <EM>Logfilename</EM></TD> - <TD>Causes all <CODE>ACE_DEBUG</CODE> and <CODE>ACE_ERROR</CODE> - output to be redirected to the designated - <CODE>Logfilename</CODE>. </TD></TR> - <TR> - <TD><CODE>-ORBObjRefStyle</CODE> <EM>IOR/URL</EM></TD> - <TD>Specifies the user-visible style of object references. - The <CODE>IOR</CODE> style (default) is the conventional CORBA object - reference, whereas the <CODE>URL</CODE> style looks more like a URL. -</TD></TR></TBODY></TABLE></P></BLOCKQUOTE> - -<h4><A name=ORP>3. Optimizing Request Processing</A></h4> - -It is often possible to <A HREF="performance.html">increase TAO's -throughput and reduce latency</A> by optimizing certain stages of +ORB. The following options enable TAO to provide debugging +information at several levels of granularity. +<p></p> +<blockquote> + <p> + <table border="2" cellpadding="0" cellspacing="2"> + <tbody> + <tr> + <th>Option</th> + <th>Description</th> + </tr> + <tr> + <td><code>-ORBDebug</code></td> + <td>Instructs the ORB to print debugging messages from the +service configurator framework. This option does not have a value but +is used as a toggle to enable or disable debugging messages.</td> + </tr> + <tr> + <td><code>-ORBDebugLevel </code><em>level</em></td> + <td>Control the level of debugging in the ORB. Higher numbers +generate more output (try 10). The default value of this option is 0.</td> + </tr> + <tr> + <td><code>-ORBLogFile</code> <em>Logfilename</em></td> + <td>Causes all <code>ACE_DEBUG</code> and <code>ACE_ERROR</code> +output to be redirected to the designated <code>Logfilename</code>. </td> + </tr> + <tr> + <td><code>-ORBObjRefStyle</code> <em>IOR/URL</em></td> + <td>Specifies the user-visible style of object references. The <code>IOR</code> +style (default) is the conventional CORBA object reference, whereas the + <code>URL</code> style looks more like a URL. + </td> + </tr> + </tbody> + </table> + </p> +</blockquote> +<h4><a name="ORP">3. Optimizing Request Processing</a></h4> +It is often possible to <a href="performance.html">increase TAO's +throughput and reduce latency</a> by optimizing certain stages of request processing in the ORB. The following command-line options -control various optimizations during request processing.<P> - -<BLOCKQUOTE> - <P> - <TABLE cellSpacing=2 cellPadding=0 border=2> - <TBODY> - <TR> - <TH>Option</TH> - <TH>Description</TH></TR> - <TR> - <TD><CODE>-ORBCDRTradeoff</CODE> <EM>maxsize</EM></TD> - <TD><A name=-ORBCDRTradeoff></A>Control the strategy to tradeoff between - copy vs. no copy marshaling of octet sequences. If an octet sequence is - smaller than <CODE>maxsize</CODE> (which defaults to - <CODE>ACE_DEFAULT_CDR_MEMORY_TRADEOFF</CODE>) -- and the - current message block contains - enough space for it -- the octet sequence is copied instead of - appended to the CDR stream. - </TD></TR> - <TR> - <TD><CODE>-ORBCollocation</CODE> <EM>global/per-orb/no</EM></TD> - <TD><A name=-ORBCollocation></A>Specifies the use of collocation object - optimization. If <CODE>global</CODE> is specified (default), - objects in the same process will be treated as - collocated. If <CODE>per-orb</CODE> is specified, - only objects in the same ORB are treated as collocated. When - <EM>no</EM> - is specified, no objects are treated as collocated. </TD></TR> - <TR> - <TD><CODE>-ORBCollocationStrategy</CODE> <EM>thru_poa/direct</EM> </TD> - <TD>Specifies what type of collocated object to use. If the - <CODE>thru_poa</CODE> (default) strategy is used, TAO uses the - collocation object implementation that respects POA's - current state and policies. When using the - <CODE>direct</CODE> strategy, method invocations on - collocated - objects become direct calls to servant without checking POA's status, - which can increase performance. If you use the - <CODE>direct</CODE> strategy, your interfaces must be - compiled with the - <CODE><A href="compiler.html#collocation-stubs">-Gd</A></CODE> - IDL <A HREF="compiler.html">compiler option</a>. </TD></TR> - <TR> - <TD><CODE>-ORBNodelay</CODE> <EM>boolean (0|1)</EM></TD> - <TD><A name=-ORBNodelay></A>Enable or disable the <CODE>TCP_NODELAY</CODE> - option (Nagle's algorithm). By - default, <CODE>TCP_NODELAY</CODE> is enabled.</TD></TR> - <TR> - <TD><CODE>-ORBRcvSock</CODE> <EM>receive buffer size</EM></TD> - <TD><A name=-ORBRcvSock></A>Specify the size of the socket receive - buffer as a positive, non-zero integer. If not specified, the - <CODE>ACE_DEFAULT_MAX_SOCKET_BUFSIZ</CODE> default is used.</TD></TR> - <TR> - <TD><CODE>-ORBSndSock</CODE> <EM>send buffer size</EM></TD> - <TD><A name=-ORBSndSock></A>Specify the size of the socket send buffer - as a positive, non-zero integer. If not specified, the - <CODE>ACE_DEFAULT_MAX_SOCKET_BUFSIZ</CODE> default is used.</TD></TR> - <TR> - <TD><CODE>-ORBStdProfileComponents</CODE> <EM>boolean (0|1)</EM></TD> - <TD><A name=-ORBStdProfileComponents></A>If <EM>0</EM> then the ORB does - not generate the OMG standardized profile components, such as the ORB - type and code sets. Notice that the presence of this components is - optional in GIOP 1.1 The default value is controlled by a compile-time - flag (check orbconf.h).</TD></TR> - <TR> - <TD><CODE>-ORBSingleReadOptimization</CODE> <EM>boolean (0|1)</EM></TD> - <TD><A name=-ORBSingleReadOptimization></A>This option controls - whether TAO's ``single read optimization'' is used when receiving - requests. If this option is disabled (<code>0</code>), the ORB - will do two reads to read a request: one reads the request header and - the other reads the request payload. If this option is enabled - (<CODE>1</CODE>), the ORB will do a read of size - <CODE>TAO_MAXBUFSIZE</CODE>, hoping to read the - entire request. If more than one request is read they will be - queued up for processing later. <P> - This option defaults to <CODE>1</CODE> because it can provide better - performance. However, in the case of RT-CORBA, this option should be set to <code>0</code>. Consider the - following scenario: (1) two requests are read from one socket, - (2) the additional request is queued, and (3) the ORB uses its - Reactor's notification mechanism to wake up the follower threads. If at - the same time, however, new requests arrive on others sockets of higher - priority the lower priority queued message will be processed before the - newly arrived higher priority request since Reactor notifications are - given preferences over normal I/O, thereby causing priority inversion.</P></TD></TR></TBODY></TABLE></P></BLOCKQUOTE> - -<h4><A name=CMPS>4. Connection Management and Protocol Selection</A></h4> - -TAO can send and receive requests and replies using various <A -HREF="pluggable_protocols">transport protocols</a>. Each protocol has -its own concept of an <A HREF="ORBEndpoint.html">endpoint</A>. +control various optimizations during request processing. +<p></p> +<blockquote> + <p> + <table border="2" cellpadding="0" cellspacing="2"> + <tbody> + <tr> + <th>Option</th> + <th>Description</th> + </tr> + <tr> + <td><code>-ORBCDRTradeoff</code> <em>maxsize</em></td> + <td><a name="-ORBCDRTradeoff"></a>Control the strategy to +tradeoff between copy vs. no copy marshaling of octet sequences. If an +octet sequence is smaller than <code>maxsize</code> (which defaults to + <code>ACE_DEFAULT_CDR_MEMORY_TRADEOFF</code>) -- and the +current message block contains enough space for it -- the octet +sequence is copied instead of appended to the CDR stream. </td> + </tr> + <tr> + <td><code>-ORBCollocation</code> <em>global/per-orb/no</em></td> + <td><a name="-ORBCollocation"></a>Specifies the use of +collocation object optimization. If <code>global</code> is specified +(default), objects in the same process will be treated as collocated. +If <code>per-orb</code> is specified, only objects in the same ORB are +treated as collocated. When <em>no</em> is specified, no objects are +treated as collocated. </td> + </tr> + <tr> + <td><code>-ORBCollocationStrategy</code> <em>thru_poa/direct</em> + </td> + <td>Specifies what type of collocated object to use. If the <code>thru_poa</code> +(default) strategy is used, TAO uses the collocation object +implementation that respects POA's current state and policies. When +using the <code>direct</code> strategy, method invocations on +collocated objects become direct calls to servant without checking +POA's status, which can increase performance. If you use the <code>direct</code> +strategy, your interfaces must be compiled with the <code><a + href="compiler.html#collocation-stubs">-Gd</a></code> IDL <a + href="compiler.html">compiler option</a>. </td> + </tr> + <tr> + <td><code>-ORBNodelay</code> <em>boolean (0|1)</em></td> + <td><a name="-ORBNodelay"></a>Enable or disable the <code>TCP_NODELAY</code> +option (Nagle's algorithm). By default, <code>TCP_NODELAY</code> is +enabled.</td> + </tr> + <tr> + <td><code>-ORBRcvSock</code> <em>receive buffer size</em></td> + <td><a name="-ORBRcvSock"></a>Specify the size of the socket +receive buffer as a positive, non-zero integer. If not specified, the <code>ACE_DEFAULT_MAX_SOCKET_BUFSIZ</code> +default is used.</td> + </tr> + <tr> + <td><code>-ORBSndSock</code> <em>send buffer size</em></td> + <td><a name="-ORBSndSock"></a>Specify the size of the socket +send buffer as a positive, non-zero integer. If not specified, the <code>ACE_DEFAULT_MAX_SOCKET_BUFSIZ</code> +default is used.</td> + </tr> + <tr> + <td><code>-ORBStdProfileComponents</code> <em>boolean (0|1)</em></td> + <td><a name="-ORBStdProfileComponents"></a>If <em>0</em> then +the ORB does not generate the OMG standardized profile components, such +as the ORB type and code sets. Notice that the presence of this +components is optional in GIOP 1.1 The default value is controlled by a +compile-time flag (check orbconf.h).</td> + </tr> + <tr> + <td><code>-ORBSingleReadOptimization</code> <em>boolean (0|1)</em></td> + <td><a name="-ORBSingleReadOptimization"></a>This option +controls whether TAO's ``single read optimization'' is used when +receiving requests. If this option is disabled (<code>0</code>), the +ORB will do two reads to read a request: one reads the request header +and the other reads the request payload. If this option is enabled (<code>1</code>), +the ORB will do a read of size <code>TAO_MAXBUFSIZE</code>, hoping to +read the entire request. If more than one request is read they will be +queued up for processing later. + <p> This option defaults to <code>1</code> because it can +provide better performance. However, in the case of RT-CORBA, this +option should be set to <code>0</code>. Consider the following +scenario: (1) two requests are read from one socket, (2) the additional +request is queued, and (3) the ORB uses its Reactor's notification +mechanism to wake up the follower threads. If at the same time, +however, new requests arrive on others sockets of higher priority the +lower priority queued message will be processed before the newly +arrived higher priority request since Reactor notifications are given +preferences over normal I/O, thereby causing priority inversion.</p> + </td> + </tr> + </tbody> + </table> + </p> +</blockquote> +<h4><a name="CMPS">4. Connection Management and Protocol Selection</a></h4> +TAO can send and receive requests and replies using various <a + href="pluggable_protocols">transport protocols</a>. Each protocol has +its own concept of an <a href="ORBEndpoint.html">endpoint</a>. The following options manage connections and control protocol -selection within a TAO application.<P> - -<BLOCKQUOTE> - <P> - <TABLE cellSpacing=2 cellPadding=0 border=2> - <TBODY> - <TR> - <TH>Option</TH> - <TH>Description</TH></TR> - <TR> - <TD><CODE>-ORBDefaultInitRef</CODE> <EM>IOR prefix</EM></TD> - <TD><A name=-ORBDefaultInitRef></A>This argument allows resolution of - initial references not explicitly specified with -ORBInitRef. It - requires a URL prefix that, after appending a slash '/' ('|' - for the UIOP pluggable protocol) and a simple object key, forms a new URL to identify - an initial object reference. The URL prefix format currently supported - is based on the standard <CODE>corbaloc</CODE> mechanism in - the CORBA <A HREF="INS.html">Interoperable Naming Service</CODE>. </TD></TR> - <TR> - <TD><CODE>-ORBDottedDecimalAddresses</CODE> <EM>boolean (0|1)</EM></TD> - <TD><A name=-ORBDottedDecimalAddresses></A>Use the dotted decimal - notation for addresses. This option can be used to workaround broken DNS - implementations and may also reduce the time spent resolving IP - addresses. By default, this option is disabled - (<CODE>0</CODE>) since domain names are the standard address - notation for IORs.</TD></TR> - <TR> - <TD><CODE>-ORBEndpoint</CODE> - <EM>endpoint</EM></TD> - <TD><A name=-ORBEndpoint></A>This option is similar to the - <CODE>-ORBListenEndPoints</CODE> option described below. - <FONT color=red>This option will be deprecated in later - versions on TAO since the CORBA specification now defines the - <CODE>-ORBListenEndpoints</CODE> option instead. </FONT> - </TD></TR> - <TR> - <TD><CODE>-ORBListenEndpoints</CODE> <EM>endpoint</EM></TD> - <TD><A name=-ORBListenEndpoints></A> This option was introduced with - the CORBA <A href="http://cgi.omg.org/docs/orbos/01-01-04.pdf"> - ORT </a> (Object Reference Template) specification. It - instructs a server ORB to listen for requests on the - interface specified by <code>endpoint</code>. - TAO <A href="ORBEndpoint.html"> - endpoints</A> are specified using a URL style format. An - endpoint has the form: - <BLOCKQUOTE><CODE>protocol://V.v@addr1,...,W.w@addrN - </CODE></BLOCKQUOTE>where <CODE>V.v</CODE> and <CODE>W.w</CODE> are - optional protocol versions for each address. An example of an IIOP - endpoint is: - <BLOCKQUOTE><CODE>iiop://<I><EM>hostname</EM></I>:<I><EM>port</EM></I> - </CODE></BLOCKQUOTE>Sets of endpoints may be specified using multiple - <CODE>-ORBEndpoint</CODE> options or by delimiting endpoints with a - semi-colon (;). For example, - <BLOCKQUOTE><CODE>-ORBEndpoint iiop://localhost:9999 -ORBEndpoint - uiop:///tmp/mylocalsock -ORBEndpoint shmiop://10002 - </CODE></BLOCKQUOTE>is equivalent to: - <BLOCKQUOTE><CODE>-ORBEndpoint - 'iiop://localhost:9999;uiop:///tmp/mylocalsock;shmiop://10002' - </CODE></BLOCKQUOTE>Notice the single quotes (') in the latter option - specification. Single quotes are needed to prevent the shell from - interpreting text after the semi-colon as another command to run. - <P>If an endpoint is specified without an <CODE>addr</CODE> such as the - following: - <BLOCKQUOTE><CODE>-ORBEndpoint uiop:// -ORBEndpoint shmiop:// - </CODE></BLOCKQUOTE>then a default endpoint will be created for the - specified protocol. <P></TD></TR> - <TR> - <TD><CODE>-ORBImplRepoServicePort</CODE> <EM>portspec</EM></TD> - <TD>Specifies which port the Implementation Repository is listening - on for multicast requests. By default, the - <CODE>TAO_DEFAULT_IMPLREPO_SERVER_REQUEST_PORT</CODE> (10018) is used.</TD></TR> - <TR> - <TD><CODE>-ORBInitRef</CODE> <EM>ObjectId=IOR</EM></TD> - <TD><A name=-ORBInitRef></A>Allows specification of an arbitrary object - reference for an initial service. The IOR could be in any one of the - following formats: OMG <CODE>IOR</CODE>, <CODE>URL</CODE>, - <CODE>corbaloc</CODE> (including <CODE>uioploc</CODE>) or <CODE>file</CODE>. - <CODE>corbaloc</CODE> is a multiple end-point IOR understood - by <CODE>ORB::string_to_object()</CODE> and used as a - boot-strapping mechanism by the - <CODE>ORB::resolve_initial_references()</CODE>. The mappings specified through - this argument override the ORB install-time defaults. The - <CODE>file://pathname</CODE> interprets the contents of the <CODE>pathname</CODE> - file as an object reference in any of the above formats. </TD></TR> - <TR> - <TD><CODE>-ORBMulticastDiscoveryEndpoint</CODE> <EM>endpoint</EM></TD> - <TD>Specifies the <CODE>endpoint</CODE> that should be used for locating the Naming - Service through multicast. <EM>endpoint</EM> is of the form - <CODE>ip-number:port-number</CODE> (<EM>e.g.</EM>, - <CODE>"tango.cs.wustl.edu:1234"</CODE> or - <CODE>"128.252.166.57:1234"</CODE>). If there is no - <CODE>':'</CODE> in the end_point it is assumed to be a port - number, with the IP address being <CODE>INADDR_ANY</CODE>. </TD> - <TR> - <TD><CODE>-ORBNameServicePort</CODE> <EM>portspec</EM></TD> - <TD>Specifies which port the Naming Service is listening on for - multicast requests. By default, the <CODE>TAO_DEFAULT_NAME_SERVICE_REQUEST_PORT</CODE> - (10013) value is used.</TD></TR> - <TR> - <TD> <A HREF="http://cvs.doc.wustl.edu/viewcvs.cgi/*checkout*/TAO/docs/ORBEndpoint.html?rev=HEAD"><CODE>-ORBTradingServicePort</CODE> <EM>portspec</EM></TD> - <TD> <A -http://cvs.doc.wustl.edu/viewcvs.cgi/TAO/docs/ORBEndpoint.html?rev=HEAD">Specifies to which port the Trading Service is listening on for - multicast requests. By default, the <CODE>TAO_DEFAULT_TRADING_SERVICE_REQUEST_PORT</CODE> - (10016) value is used.</TD></TR> - <TR> - <TD> <CODE>-ORBUseIMR</CODE> <EM>boolean (0|1)</EM></TD> - <TD>This argument specifies that for POAs with - the <CODE>PERSISTENT</CODE> policy, that the TAO <A - HREF="implrepo/">Implementation Repository</A> should be used - for notification of startup and shutdown and object references should be - changed to use the Implementation Repository also. - </TD></TR> - </TD></TR></TBODY></TABLE></P></BLOCKQUOTE> - -<h4><A name=MO>5. Miscellaneous Options</A></h4> - +selection within a TAO application. +<p></p> +<blockquote> + <p> + <table border="2" cellpadding="0" cellspacing="2"> + <tbody> + <tr> + <th>Option</th> + <th>Description</th> + </tr> + <tr> + <td><code>-ORBDefaultInitRef</code> <em>IOR prefix</em></td> + <td><a name="-ORBDefaultInitRef"></a>This argument allows +resolution of initial references not explicitly specified with +-ORBInitRef. It requires a URL prefix that, after appending a slash '/' +('|' for the UIOP pluggable protocol) and a simple object key, forms a +new URL to identify an initial object reference. The URL prefix format +currently supported is based on the standard <code>corbaloc</code> +mechanism in the CORBA <a href="INS.html">Interoperable Naming +Service. </a></td> + </tr> + <tr> + <td><code>-ORBDottedDecimalAddresses</code> <em>boolean (0|1)</em></td> + <td><a name="-ORBDottedDecimalAddresses"></a>Use the dotted +decimal notation for addresses. This option can be used to workaround +broken DNS implementations and may also reduce the time spent resolving +IP addresses. By default, this option is disabled (<code>0</code>) +since domain names are the standard address notation for IORs.</td> + </tr> + <tr> + <td><code>-ORBEndpoint</code> <em>endpoint</em></td> + <td><a name="-ORBEndpoint"></a>This option is similar to the <code>-ORBListenEndPoints</code> +option described below. <font color="red">This option will be +deprecated in later versions on TAO since the CORBA specification now +defines the <code>-ORBListenEndpoints</code> option instead. </font> </td> + </tr> + <tr> + <td><code>-ORBListenEndpoints</code> <em>endpoint</em></td> + <td><a name="-ORBListenEndpoints"></a> This option was +introduced with the CORBA <a + href="http://cgi.omg.org/docs/orbos/01-01-04.pdf"> ORT </a> (Object +Reference Template) specification. It instructs a server ORB to listen +for requests on the interface specified by <code>endpoint</code>. TAO <a + href="ORBEndpoint.html"> endpoints</a> are specified using a URL style +format. An endpoint has the form: + <blockquote><code>protocol://V.v@addr1,...,W.w@addrN </code></blockquote> +where <code>V.v</code> and <code>W.w</code> are optional protocol +versions for each address. An example of an IIOP endpoint is: + <blockquote><code>iiop://<i><em>hostname</em></i>:<i><em>port</em></i> + </code></blockquote> +Sets of endpoints may be specified using multiple <code>-ORBEndpoint</code> +options or by delimiting endpoints with a semi-colon (;). For example, + <blockquote><code>-ORBEndpoint iiop://localhost:9999 +-ORBEndpoint uiop:///tmp/mylocalsock -ORBEndpoint shmiop://10002 </code></blockquote> +is equivalent to: + <blockquote><code>-ORBEndpoint +'iiop://localhost:9999;uiop:///tmp/mylocalsock;shmiop://10002' </code></blockquote> +Notice the single quotes (') in the latter option specification. Single +quotes are needed to prevent the shell from interpreting text after the +semi-colon as another command to run. + <p>If an endpoint is specified without an <code>addr</code> +such as the following: </p> + <blockquote><code>-ORBEndpoint uiop:// -ORBEndpoint shmiop:// </code></blockquote> +then a default endpoint will be created for the specified protocol. + <p></p> + </td> + </tr> + <tr> + <td><code>-ORBImplRepoServicePort</code> <em>portspec</em></td> + <td>Specifies which port the Implementation Repository is +listening on for multicast requests. By default, the <code>TAO_DEFAULT_IMPLREPO_SERVER_REQUEST_PORT</code> +(10018) is used.</td> + </tr> + <tr> + <td><code>-ORBInitRef</code> <em>ObjectId=IOR</em></td> + <td><a name="-ORBInitRef"></a>Allows specification of an +arbitrary object reference for an initial service. The IOR could be in +any one of the following formats: OMG <code>IOR</code>, <code>URL</code>, + <code>corbaloc</code> (including <code>uioploc</code>) or <code>file</code>. + <code>corbaloc</code> is a multiple end-point IOR understood by + <code>ORB::string_to_object()</code> and used as a +boot-strapping mechanism by the <code>ORB::resolve_initial_references()</code>. +The mappings specified through this argument override the ORB +install-time defaults. The <code>file://pathname</code> interprets the +contents of the <code>pathname</code> file as an object reference in +any of the above formats. </td> + </tr> + <tr> + <td><code>-ORBMulticastDiscoveryEndpoint</code> <em>endpoint</em></td> + <td>Specifies the <code>endpoint</code> that should be used +for locating the Naming Service through multicast. <em>endpoint</em> +is of the form <code>ip-number:port-number</code> (<em>e.g.</em>, <code>"tango.cs.wustl.edu:1234"</code> +or <code>"128.252.166.57:1234"</code>). If there is no <code>':'</code> +in the end_point it is assumed to be a port number, with the IP address +being <code>INADDR_ANY</code>. </td> + </tr> + <tr> + <td><code>-ORBNameServicePort</code> <em>portspec</em></td> + <td>Specifies which port the Naming Service is listening on for +multicast requests. By default, the <code>TAO_DEFAULT_NAME_SERVICE_REQUEST_PORT</code> +(10013) value is used.</td> + </tr> + <tr> + <td> <a + href="http://cvs.doc.wustl.edu/viewcvs.cgi/*checkout*/TAO/docs/ORBEndpoint.html?rev=HEAD"><code>-ORBTradingServicePort</code> + <em>portspec</em></a></td> + <td> <a + http://cvs.doc.wustl.edu/viewcvs.cgi/tao/docs/orbendpoint.html?rev="HEAD"">Specifies +to which port the Trading Service is listening on for multicast +requests. By default, the <code>TAO_DEFAULT_TRADING_SERVICE_REQUEST_PORT</code> +(10016) value is used.</a></td> + </tr> + <tr> + <td> <code>-ORBUseIMR</code> <em>boolean (0|1)</em></td> + <td>This argument specifies that for POAs with the <code>PERSISTENT</code> +policy, that the TAO <a href="implrepo/">Implementation Repository</a> +should be used for notification of startup and shutdown and object +references should be changed to use the Implementation Repository also. + </td> + </tr> + </tbody> + </table> + </p> +</blockquote> +<h4><a name="MO">5. Miscellaneous Options</a></h4> Options in this category don't control the behavior of the ORB in -terms of resouces or strategies. Instead, they are helper options +terms of resouces or strategies. Instead, they are helper options provided for specific application requirements. - -<BLOCKQUOTE> - <P> - <TABLE cellSpacing=2 cellPadding=0 border=2> - <TBODY> - <TR> - <TH>Option</TH> - <TH>Description</TH></TR> - <TR> - <TD><CODE>-ORBId</CODE> <EM>orb_name</EM></TD> - <TD><A name=-ORBId></A>This option allows the name of an ORB to - be set to <CODE>orb_name</CODE>. The ORBId will be passed to - the ORB_init() method to differentiate coexisting ORBs (when - there are more than one ORBs).</TD></TR> - <TR> - <TD><CODE>-ORBServerId</CODE> <EM>server_id</EM></TD> - <TD><A name=-ORBId></A>This option allows setting a name/id to a - server - to uniquely identify a server to TAO's <A HREF="implrepo">Implementation Repository</A>. </TD></TR> - <TR> - <TD><CODE>-ORBDaemon</CODE></TD> - <TD>Specifies that the ORB should <EM>daemonize</EM> itself, - <em>i.e.</EM>, run as a background process. This option is only - meaningful on OS platforms that support daemonization.</TD></TR> -</TBODY></TABLE></P></BLOCKQUOTE> -<P></P> - -<HR align=left width=25%> - -<H3><A name=SVC>The Service Configurator File</A></H3> - -Internally, TAO uses the <A -href="http://www.cs.wustl.edu/~schmidt/PDF/Svc-Conf.pdf">ACE Service -Configurator framework</A> to allow applications to configure the ORB -at run-time. Applications provide a file named <CODE>svc.conf</CODE> +<blockquote> + <p> + <table border="2" cellpadding="0" cellspacing="2"> + <tbody> + <tr> + <th>Option</th> + <th>Description</th> + </tr> + <tr> + <td><code>-ORBId</code> <em>orb_name</em></td> + <td><a name="-ORBId"></a>This option allows the name of an ORB +to be set to <code>orb_name</code>. The ORBId will be passed to the +ORB_init() method to differentiate coexisting ORBs (when there are more +than one ORBs).</td> + </tr> + <tr> + <td><code>-ORBServerId</code> <em>server_id</em></td> + <td><a name="-ORBId"></a>This option allows setting a name/id +to a server to uniquely identify a server to TAO's <a href="implrepo">Implementation +Repository</a>. </td> + </tr> + <tr> + <td><code>-ORBDaemon</code></td> + <td>Specifies that the ORB should <em>daemonize</em> itself, <em>i.e.</em>, +run as a background process. This option is only meaningful on OS +platforms that support daemonization.</td> + </tr> + </tbody> + </table> + </p> +</blockquote> +<p></p> +<hr width="25%" align="left"> +<h3><a name="SVC">The Service Configurator File</a></h3> +Internally, TAO uses the <a + href="http://www.cs.wustl.edu/%7Eschmidt/PDF/Svc-Conf.pdf">ACE Service +Configurator framework</a> to allow applications to configure the ORB +at run-time. Applications provide a file named <code>svc.conf</code> with options that configure appropriate strategies in to the ORB. The options enable developers to control the behavior of the factories, -strategies, and resources that the ORB uses. By default, TAO provides -the following set of factories: </p> - -<OL> - <LI><A href="#TRF">Default Resource and Advanced Resource Factories.</A> - This factory controls the creation of configurable resources used by - TAO's ORB core. The resource factory is responsible for constructing - and providing access to various resources used by the ORB irrespective of whether - they perform client or server roles. ORB resources include reactors, - protocol factories, message flushing strategies, connection purging - strategies and different IOR parsers. <P> - <LI> <A href="#TSSF">Server Strategy Factory.</A> This factory - creates various strategies of special utility to the ORB that is useful for - controlling the behavior of servers. This factory is responsible - for creating strategies useful for server objects like the - concurrency strategy and the request demultiplexing strategies used by the - POA.<P> - <LI> <A href="#TCSF">Client Strategy Factory.</A> This factory - creates various strategies of special utility to the ORB, useful for - controlling the behavior of clients. This factory is responsible - for creating strategies useful for clients such as request - multiplexing strategies, wait strategies, connect strategies etc.<P> -</OL> - -Options specified via a <CODE>svc.conf</CODE> file can represent +strategies, and resources that the ORB uses. By default, TAO provides +the following set of factories: +<p></p> +<ol> + <li><a href="#TRF">Default Resource and Advanced Resource Factories.</a> +This factory controls the creation of configurable resources used by +TAO's ORB core. The resource factory is responsible for constructing +and providing access to various resources used by the ORB irrespective +of whether they perform client or server roles. ORB resources include +reactors, protocol factories, message flushing strategies, connection +purging strategies and different IOR parsers. + <p> </p> + </li> + <li> <a href="#TSSF">Server Strategy Factory.</a> This factory +creates various strategies of special utility to the ORB that is useful +for controlling the behavior of servers. This factory is responsible +for creating strategies useful for server objects like the concurrency +strategy and the request demultiplexing strategies used by the POA. + <p> </p> + </li> + <li> <a href="#TCSF">Client Strategy Factory.</a> This factory +creates various strategies of special utility to the ORB, useful for +controlling the behavior of clients. This factory is responsible for +creating strategies useful for clients such as request multiplexing +strategies, wait strategies, connect strategies etc. + <p></p> + </li> +</ol> +Options specified via a <code>svc.conf</code> file can represent either the components provided by TAO (including the -<CODE>Resource_Factory</CODE>, and the -<CODE>Server_Strategy_Factory</CODE> and -<CODE>Client_Strategy_Factory</CODE>) or customized components +<code>Resource_Factory</code>, and the +<code>Server_Strategy_Factory</code> and +<code>Client_Strategy_Factory</code>) or customized components developed by the users. The service configurator file -(<CODE>svc.conf</CODE>) provided by the user identifies the components -to be loaded with the required strategies for each component. <p> - -A <CODE>svc.conf</CODE> file is <EM><B>not</B></EM> required to run +(<code>svc.conf</code>) provided by the user identifies the components +to be loaded with the required strategies for each component. +<p>A <code>svc.conf</code> file is <em><b>not</b></em> required to +run TAO applications since TAO provides a set of default values for -strategies useful for the most common use cases, <EM>i.e.</EM>, the -default values are set for all options. When a TAO application calls -<CODE>CORBA::ORB_init()</CODE> it will try to find the -<CODE>svc.conf</CODE> file. If found, TAO will parse and process the +strategies useful for the most common use cases, <em>i.e.</em>, the +default values are set for all options. When a TAO application calls +<code>CORBA::ORB_init()</code> it will try to find the +<code>svc.conf</code> file. If found, TAO will parse and process the directives in the file; if not found, the default value for the -default components will be used.</P> - -<hr align=left width=25%> -<h4><A name=TRF>1. Default and Advanced Resource Factories</A></h4> - -Many of TAO's ORB Core resources are fixed, including the allocators for -the incoming and outgoing data paths, and data structures for the various -maps and lists maintained by the ORB. There is some flexibility, +default components will be used.</p> +<hr width="25%" align="left"> +<h4><a name="TRF">1. Default and Advanced Resource Factories</a></h4> +Many of TAO's ORB Core resources are fixed, including the allocators +for +the incoming and outgoing data paths, and data structures for the +various +maps and lists maintained by the ORB. There is some flexibility, however, in the choice of a reactor, the selection of transport protocols, choice of data flushing strategy, various forms of connection resource management strategies and possibility of using -different IOR parsers. The resource factories supported by TAO -include the <CODE>Resource_Factory</CODE> and -<CODE>Advanced_Resource_Factory</CODE>. TAO provides defaults of these -factories, as well as the specialized resource factories described +different IOR parsers. The resource factories supported by TAO +include the <code>Resource_Factory</code> and +<code>Advanced_Resource_Factory</code>. TAO provides defaults of these +factories, as well as the specialized resource factories described below: - -<BLOCKQUOTE> - <P> - <TABLE cellSpacing=2 cellPadding=0 border=2> - <TBODY> - <TR> - <TH>Resource Factory</TH> - <TH>Description</TH></TR> - <TR> - <TD><CODE><A - href="#TDRF">Resource Factory</A></CODE></TD> - <TD>Unless configured otherwise, this is the default resource - factory used by the ORB.The resource factory is responsible - for creating and providing access to various resources used - by the server and client ORBs. The resources managed by this - factory include creation of acceptor and connector - registries, choice of data flushing strategy, limits for - connection resource management, types of CDR buffers used - for marshalling and demarshalling data, and different IOR - parsers. - </TD></TR> - <TR> - <TD><CODE><A - href="#TARF">Advanced Resource Factory</A></CODE></TD> - <TD>This factory provides more advanced configuration options in the - addition to all the features of the default resource factory.<BR><BR>The - advanced resource factory gives more control than the default resource - factory over the type of resources used and how those resources are - accessed. In addition to the options provided by the default resource - factory, the advanced resource factory provides options that allow - selecting different reactors, choosing different transport - mechanisms and selecting the right connection purging strategy - to maintain limits on resources used. The advanced resource - factory was created to allow more advanced options while - keeping the footprint of the default resource factory - small.<BR><BR>The advanced resource factory inherits from the - default resource factory and accepts all of its options in - addition to its own. </TD></TR> - - <TR> - <TD><CODE>Qt Resource Factory</CODE></TD> - <TD>This is a specialized resource factory providing the means for - integrating with the Qt GUI toolkit from Trolltech. </TD></TR> - <TR> - <TD><CODE>Xt Resource Factory</CODE></TD> - <TD>This is a specialized resource factory providing the means for - integrating with the X Window System's Xt Intrinsics toolkit. - </TD></TR></TBODY></TABLE></P></BLOCKQUOTE> -<P></P> - -<h4><A name="TDRF">1.1. Resource_Factory</A></h4> - +<blockquote> + <p> + <table border="2" cellpadding="0" cellspacing="2"> + <tbody> + <tr> + <th>Resource Factory</th> + <th>Description</th> + </tr> + <tr> + <td><code><a href="#TDRF">Resource Factory</a></code></td> + <td>Unless configured otherwise, this is the default resource +factory used by the ORB.The resource factory is responsible for +creating and providing access to various resources used by the server +and client ORBs. The resources managed by this factory include creation +of acceptor and connector registries, choice of data flushing strategy, +limits for connection resource management, types of CDR buffers used +for marshalling and demarshalling data, and different IOR parsers. </td> + </tr> + <tr> + <td><code><a href="#TARF">Advanced Resource Factory</a></code></td> + <td>This factory provides more advanced configuration options +in the addition to all the features of the default resource factory.<br> + <br> +The advanced resource factory gives more control than the default +resource factory over the type of resources used and how those +resources are accessed. In addition to the options provided by the +default resource factory, the advanced resource factory provides +options that allow selecting different reactors, choosing different +transport mechanisms and selecting the right connection purging +strategy to maintain limits on resources used. The advanced resource +factory was created to allow more advanced options while keeping the +footprint of the default resource factory small.<br> + <br> +The advanced resource factory inherits from the default resource +factory and accepts all of its options in addition to its own. </td> + </tr> + <tr> + <td><code>Qt Resource Factory</code></td> + <td>This is a specialized resource factory providing the means +for integrating with the Qt GUI toolkit from Trolltech. </td> + </tr> + <tr> + <td><code>Xt Resource Factory</code></td> + <td>This is a specialized resource factory providing the means +for integrating with the X Window System's Xt Intrinsics toolkit. </td> + </tr> + </tbody> + </table> + </p> +</blockquote> +<p></p> +<h4><a name="TDRF">1.1. Resource_Factory</a></h4> Typically, the above options are exercised via the service configurator (svc.conf) file. The following line in the -<CODE>svc.conf</CODE> file (all in one line) <P> <CODE>static -Resource_Factory "[list of options]"</CODE><P>will load the default +<code>svc.conf</code> file (all in one line) +<p> <code>static +Resource_Factory "[list of options]"</code></p> +<p>will load the default resource factory with the options listed within the double quotes. The following table shows the list of possible options that can be -specified within the double quotes in the above directive. There is an - <A -href="http://cvs.doc.wustl.edu/viewcvs.cgi/TAO/tests/LongUpcalls/svc.conf?rev=HEAD"> -online</A> example of how this is used in TAO.<P> - -<BLOCKQUOTE> - <P> -<TABLE cellSpacing=2 cellPadding=0 border=2> - <TBODY> - <TR> - <TH>Option</TH> - <TH>Description</TH></TR> - <TR> - <TD><CODE>-ORBReactorMaskSignals</CODE> <EM>0/1</EM></TD> - <TD>ACE select reactors mask signals during upcalls to the event handlers. - This is only useful if the application is going to trap those signals and - handle them in any special way. Disabling the mask can improve performance by - reducing the number of kernel level locks. </TD></TR> - <TR> - <TD><CODE>-ORBProtocolFactory</CODE> <EM>factory</EM></TD> - <TD><A name=-ORBProtocolFactory></A>Specify which pluggable protocol - factory to load. By default, only the factory for the IIOP protocol - (<CODE>IIOP_Factory</CODE> is loaded. - <P>For example, if some protocol called <EM><CODE>Foo</CODE></EM> whose - factory was called <EM><CODE>Foo_Factory</CODE></EM> was available, then - it could be loaded into TAO by specifying <CODE>-ORBProtocolFactory - Foo_Factory</CODE> in the service configurator file. The - <EM><CODE>Foo</CODE></EM> pluggable protocol would then be available for - use. </P></TD></TR> - <TR> - <TD><CODE>-ORBIORParser</CODE> <EM>parser</EM></TD> - <TD><A name=-ORBIORParser></A>Name an IOR Parser to load. IOR Parsers are - used to interpret strings passed to <CODE>ORB::string_to_object()</CODE>. - By default the ORB can handle multiple string formats, including - <CODE>IOR:</CODE>, <CODE>corbaloc:</CODE>, <CODE>corbaname:</CODE>, and - <CODE>file:</CODE>. The application developer can <A - href="http://cvs.doc.wustl.edu/viewcvs.cgi/*checkout*/TAO/docs/ior_parsing.html?rev=HEAD">add - new IOR formats </A>using this option. </TD></TR> - <TR> - <TD><CODE>-ORBConnectionPurgingStrategy</CODE> <EM>type</EM></TD> - <TD><A name=-ORBConnectionPurgingStrategy></A>Opened connections are added - to the transport cache so they can be reused. However, if a process - continues to run and these connections are not reused, the cache will - continue to grow. Therefore, before each new connection, the cache is - checked and purged if it has reached the limit specified by the - -ORBConnectionCacheMax option or the system default if that option was not - used. The possible values for type are lru, lfu, fifo and null. The - default is LRU (Least Recently Used). The others LFU (Least Frequently - Used), FIFO (First In First Out), and null (No connections are purged) are - contained within the TAO Strategies library. </TD></TR> - <TR> - <TD><CODE>-ORBConnectionCacheMax</CODE> <EM>limit</EM></TD> - <TD><A name=-ORBConnectionCacheMax></A>The transport cache will grow to a - maximum of the specified limit. The default is system dependent, but can - be overridden at compile-time by defining the preprocessor macro - TAO_CONNECTION_CACHE_MAXIMUM. </TD></TR> - <TR> - <TD><CODE>-ORBMuxedConnectionMax</CODE> <EM>number</EM></TD> - <TD><A name=-ORBMuxedConnectionMax></A>The transport cache allows only - specified number of connections-per-QoS property to be added to connection - cache. Threads not getting the connections will wait for the connections - to be released. This option is more useful for transports using a muxed - connection strategy and want control over the number of connections that are - created by the active threads. </TD></TR> - <TR> - <TD><CODE>-ORBConnectionCachePurgePercentage</CODE> <EM>percent</EM></TD> - <TD><A name=-ORBConnectionCachePurgePercentage></A>If the transport cache - is purged, the specified percentage (20 by default) of the total number of - connections cached will be closed. </TD></TR> - <TR> - <TD><CODE>-ORBConnectionCacheLock</CODE> <EM>locktype</EM></TD> - <TD><A name=-ORBConnectionCacheLock></A>Specify the type of lock to be - used by the Connection Cache. Possible values for lock type are - <CODE>thread</CODE>, which specifies that an inter-thread mutex is used to - guarantee exclusive access, and <CODE>null</CODE>, which specifies that no - locking be performed. The default is thread. </TD></TR> -<TR> - <TD><CODE>-ORBCorbaObjectLock</CODE> <EM>locktype</EM></TD> - <TD><a name="-ORBCorbaObjectLock"></a> - Specify the type of lock to be used by CORBA::Object. The lock - is needed within the CORBA object to synchronize the state - when the same object is shared by multiple threads. Possible - values for lock type are <code>thread</code>, which specifies - that an inter-thread mutex is used to guarantee exclusive - access, and <code>null</code>, which specifies that no locking - be performed. The default is thread. - - The <code>null</code> lock option is useful when there is only - one thread in the system. This option can be used to minimize - the amount of memory consumed by the locks in applications where - locks are not needed. The memory growth problem gets - particularly exacerbated for applications dealing with hundreds - and thousands of objects. - </TD> -</TR> -<TR> - <TD><CODE>-ORBObjectKeyTableLock</CODE> <EM>locktype</EM></TD> - <TD><a name="-ORBObjectKeyTableLock"></a> - Specify the type of lock to be used by the ObjectKey - table. ObjectKey table keeps track of the ObjectKeys that are - generated and made available through IORs. The table manages the - life time of the object keys within the ORB through a reference - counting mechanism. Possible values for lock type are - <code>thread</code>, which specifies that an inter-thread mutex - is used to guarantee exclusive access, and <code>null</code>, - which specifies that no locking be performed. The default is - thread. - </TD> -</TR> - - <TR> - <TD><CODE>-ORBFlushingStrategy</CODE> <EM>type</EM></TD> - <TD><A name=-ORBFlushingStrategy></A>By default TAO provides three - strategies to flush queued messages. The <CODE>leader_follower</CODE> - strategy uses the Reactor and non-blocking I/O to send the outgoing - messages, this strategy participates in the Leader/Followers protocol to - synchronize access to the Reactor. The <CODE>reactive</CODE> strategy uses - the Reactor but does not take part in the Leader/Followers protocol, thus - it is better used only in single threaded applications. Finally, the - <CODE>blocking</CODE> strategy flushes the queue as soon as it becomes - "full", and blocks the thread until all the data is sent. -</TD></TR></TBODY></TABLE></P> -</BLOCKQUOTE> - -<h4><A name="TARF">1.2. Advanced_Resource_Factory</A></h4> - -This factory is located in the <CODE>TAO_Strategies</CODE> library. It +specified within the double quotes in the above directive. There is an <a + href="http://cvs.doc.wustl.edu/viewcvs.cgi/TAO/tests/LongUpcalls/svc.conf?rev=HEAD"> +online</a> example of how this is used in TAO.</p> +<p></p> +<blockquote> + <p> + <table border="2" cellpadding="0" cellspacing="2"> + <tbody> + <tr> + <th>Option</th> + <th>Description</th> + </tr> + <tr> + <td><code>-ORBReactorMaskSignals</code> <em>0/1</em></td> + <td>ACE select reactors mask signals during upcalls to the +event handlers. This is only useful if the application is going to trap +those signals and handle them in any special way. Disabling the mask +can improve performance by reducing the number of kernel level locks. </td> + </tr> + <tr> + <td><code>-ORBProtocolFactory</code> <em>factory</em></td> + <td><a name="-ORBProtocolFactory"></a>Specify which pluggable +protocol factory to load. By default, only the factory for the IIOP +protocol (<code>IIOP_Factory</code> is loaded. + <p>For example, if some protocol called <em><code>Foo</code></em> +whose factory was called <em><code>Foo_Factory</code></em> was +available, then it could be loaded into TAO by specifying <code>-ORBProtocolFactory +Foo_Factory</code> in the service configurator file. The <em><code>Foo</code></em> +pluggable protocol would then be available for use. </p> + </td> + </tr> + <tr> + <td><code>-ORBIORParser</code> <em>parser</em></td> + <td><a name="-ORBIORParser"></a>Name an IOR Parser to load. IOR +Parsers are used to interpret strings passed to <code>ORB::string_to_object()</code>. +By default the ORB can handle multiple string formats, including <code>IOR:</code>, + <code>corbaloc:</code>, <code>corbaname:</code>, and <code>file:</code>. +The application developer can <a + href="http://cvs.doc.wustl.edu/viewcvs.cgi/*checkout*/TAO/docs/ior_parsing.html?rev=HEAD">add +new IOR formats </a>using this option. </td> + </tr> + <tr> + <td><code>-ORBConnectionPurgingStrategy</code> <em>type</em></td> + <td><a name="-ORBConnectionPurgingStrategy"></a>Opened +connections are added to the transport cache so they can be reused. +However, if a process continues to run and these connections are not +reused, the cache will continue to grow. Therefore, before each new +connection, the cache is checked and purged if it has reached the limit +specified by the -ORBConnectionCacheMax option or the system default if +that option was not used. The possible values for type are lru, lfu, +fifo and null. The default is LRU (Least Recently Used). The others LFU +(Least Frequently Used), FIFO (First In First Out), and null (No +connections are purged) are contained within the TAO Strategies +library. </td> + </tr> + <tr> + <td><code>-ORBConnectionCacheMax</code> <em>limit</em></td> + <td><a name="-ORBConnectionCacheMax"></a>The transport cache +will grow to a maximum of the specified limit. The default is system +dependent, but can be overridden at compile-time by defining the +preprocessor macro TAO_CONNECTION_CACHE_MAXIMUM. </td> + </tr> + <tr> + <td><code>-ORBMuxedConnectionMax</code> <em>number</em></td> + <td><a name="-ORBMuxedConnectionMax"></a>The transport cache +allows only specified number of connections-per-QoS property to be +added to connection cache. Threads not getting the connections will +wait for the connections to be released. This option is more useful for +transports using a muxed connection strategy and want control over the +number of connections that are created by the active threads. </td> + </tr> + <tr> + <td><code>-ORBConnectionCachePurgePercentage</code> <em>percent</em></td> + <td><a name="-ORBConnectionCachePurgePercentage"></a>If the +transport cache is purged, the specified percentage (20 by default) of +the total number of connections cached will be closed. </td> + </tr> + <tr> + <td><code>-ORBConnectionCacheLock</code> <em>locktype</em></td> + <td><a name="-ORBConnectionCacheLock"></a>Specify the type of +lock to be used by the Connection Cache. Possible values for lock type +are <code>thread</code>, which specifies that an inter-thread mutex is +used to guarantee exclusive access, and <code>null</code>, which +specifies that no locking be performed. The default is thread. </td> + </tr> + <tr> + <td><code>-ORBCorbaObjectLock</code> <em>locktype</em></td> + <td><a name="-ORBCorbaObjectLock"></a> Specify the type of lock +to be used by CORBA::Object. The lock is needed within the CORBA object +to synchronize the state when the same object is shared by multiple +threads. Possible values for lock type are <code>thread</code>, which +specifies that an inter-thread mutex is used to guarantee exclusive +access, and <code>null</code>, which specifies that no locking be +performed. The default is thread. The <code>null</code> lock option is +useful when there is only one thread in the system. This option can be +used to minimize the amount of memory consumed by the locks in +applications where locks are not needed. The memory growth problem gets +particularly exacerbated for applications dealing with hundreds and +thousands of objects. </td> + </tr> + <tr> + <td><code>-ORBObjectKeyTableLock</code> <em>locktype</em></td> + <td><a name="-ORBObjectKeyTableLock"></a> Specify the type of +lock to be used by the ObjectKey table. ObjectKey table keeps track of +the ObjectKeys that are generated and made available through IORs. The +table manages the life time of the object keys within the ORB through a +reference counting mechanism. Possible values for lock type are <code>thread</code>, +which specifies that an inter-thread mutex is used to guarantee +exclusive access, and <code>null</code>, which specifies that no +locking be performed. The default is thread. </td> + </tr> + <tr> + <td><code>-ORBFlushingStrategy</code> <em>type</em></td> + <td><a name="-ORBFlushingStrategy"></a>By default TAO provides +three strategies to flush queued messages. The <code>leader_follower</code> +strategy uses the Reactor and non-blocking I/O to send the outgoing +messages, this strategy participates in the Leader/Followers protocol +to synchronize access to the Reactor. The <code>reactive</code> +strategy uses the Reactor but does not take part in the +Leader/Followers protocol, thus it is better used only in single +threaded applications. Finally, the <code>blocking</code> strategy +flushes the queue as soon as it becomes "full", and blocks the thread +until all the data is sent. + </td> + </tr> + </tbody> + </table> + </p> +</blockquote> +<h4><a name="TARF">1.2. Advanced_Resource_Factory</a></h4> +This factory is located in the <code>TAO_Strategies</code> library. It accepts the options below as well as those described above in the -<CODE>Resource_Factory</CODE>. This factory can be loaded dynamically +<code>Resource_Factory</code>. This factory can be loaded dynamically using a service configurator directive of the form (all on one line): -<P> - -<CODE>dynamic Advanced_Resource_Factory Service_Object -*</CODE><BR><CODE>TAO_Strategies:_make_TAO_Advanced_Resource_Factory -() "-ORBReactorType select_st" </CODE><P> - -It can also be loaded statically by doing the following:<P> - -<UL> - <LI>Add <CODE>#include "tao/Strategies/advanced_resource.h"</CODE> to the file - containing <CODE>main()</CODE>. - <LI>Link the TAO_Strategies library into the executable. - <LI>Specify a service configurator directive of the form: <CODE>static - Advanced_Resource_Factory "-ORBReactorType select_st"</CODE> </LI></UL>You can -omit the <CODE>#include</CODE> if you always use dynamic libraries.<P> - -Loading the <CODE>Advanced_Resource_Factory</CODE> disables the -<CODE>Resource_Factory</CODE>. Any directives for the -<CODE>Resource_Factory</CODE> will have no effect (and generate +<p><code>dynamic Advanced_Resource_Factory Service_Object +*</code><br> +<code>TAO_Strategies:_make_TAO_Advanced_Resource_Factory +() "-ORBReactorType select_st" </code></p> +<p>It can also be loaded statically by doing the following:</p> +<p></p> +<ul> + <li>Add <code>#include "tao/Strategies/advanced_resource.h"</code> +to the file containing <code>main()</code>. </li> + <li>Link the TAO_Strategies library into the executable. </li> + <li>Specify a service configurator directive of the form: <code>static +Advanced_Resource_Factory "-ORBReactorType select_st"</code> </li> +</ul> +You can +omit the <code>#include</code> if you always use dynamic libraries. +<p>Loading the <code>Advanced_Resource_Factory</code> disables the +<code>Resource_Factory</code>. Any directives for the +<code>Resource_Factory</code> will have no effect (and generate warnings telling you so). The following table lists the options that -can be provided in double quotes. An example is available <A -href="http://cvs.doc.wustl.edu/viewcvs.cgi/TAO/performance-tests/Latency/Single_Threaded/svc.conf?rev=HEAD">online -</A> that shows how to specify this option in the svc.conf file.<P> - -<BLOCKQUOTE> - <P> - <TABLE cellSpacing=2 cellPadding=0 border=2> - <TBODY> - <TR> - <TH>Option</TH> - <TH>Description</TH></TR> - <TR> - <TD><CODE>-ORBReactorType</CODE> <EM>which</EM></TD> - <TD><A name=-ORBReactorType></A>Specify what kind of reactor the ORB - uses. The default reactor is the ACE_TP_Reactor. - <TABLE cellSpacing=2 cellPadding=0 border=1> - <TBODY> - <TR> - <TH><EM>which</EM></TH> - <TH>Reactor</TH></TR> - <TR> - <TD><CODE>select_mt</CODE></TD> - <TD>Use the multi-thread select-based reactor.</TD></TR> - <TR> - <TD><CODE>select_st</CODE></TD> - <TD>Use the single-thread select-based reactor.</TD></TR> - <TR> - <TD><CODE>fl</CODE></TD> - <TD>Use the FLReactor (FLTK-based).</TD></TR> - <TR> - <TD><CODE>wfmo</CODE></TD> - <TD>Use the WFMO reactor (Win32 only).</TD></TR> - <TR> - <TD><CODE>msg_wfmo</CODE></TD> - <TD>Use the MsgWFMO reactor (Win32 only).</TD></TR> - <TR> - <TD><CODE>tp</CODE></TD> - <TD>Use the <CODE>ACE_TP_Reactor</CODE>, a select based - thread-pool reactor which is the -default.</TD></TR></TBODY></TABLE></TD></TR> - <TR> - <TD><CODE>-ORBReactorThreadQueue</CODE> <EM>which</EM></TD> - <TD><A name=-ORBReactorThreadQueue></A>Applies only to the - ACE_TP_Reactor, i.e., when <CODE>-ORBReactorType</CODE> = - <CODE>tp</CODE>, and specifies the order, last-in-first-out - (<EM>which</EM> = <CODE>LIFO</CODE>), the default, or first-in-first-out - (<EM>which</EM> = <CODE>FIFO</CODE>), in which waiting threads are - selected to run by the ACE_Select_Reactor_Token. </TD></TR> - <TR> - <TD><CODE>-ORBInputCDRAllocator</CODE> <EM>which</EM></TD> - <TD><A name=-ORBInputCDRAllocator></A>Specify whether the ORB uses - locked (<EM>which</EM> = <CODE>thread</CODE>) or lock-free - (<EM>which</EM> = <CODE>null</CODE>) allocators for the incoming CDR - buffers. Though <CODE>null</CODE> should give the optimal performance; - we made the default <CODE>thread</CODE>. TAO optimizations for octet - sequences will not work in all cases when the allocator does not have - locks (for example if the octet sequences are part of a return value). - Using locked allocators also allows the users to take advantage of the - TAO octet sequence extensions to preserve the buffer after the upcall. - </TD></TR> - <TR> - <TD><CODE>-ORBReactorRegistry</CODE> <EM>registry_type</EM></TD> - <TD><A name=-ORBReactorRegistry></A>This option is no longer supported. - The Advanced Resource Factory will emit an error if you attempt its use. - </TD></TR></TBODY></TABLE></P></BLOCKQUOTE> - -<h4><A name=TSSF>2. Server_Strategy_Factory</A></h4> - +can be provided in double quotes. An example is available <a + href="http://cvs.doc.wustl.edu/viewcvs.cgi/TAO/performance-tests/Latency/Single_Threaded/svc.conf?rev=HEAD">online +</a> that shows how to specify this option in the svc.conf file.</p> +<p></p> +<blockquote> + <p> + <table border="2" cellpadding="0" cellspacing="2"> + <tbody> + <tr> + <th>Option</th> + <th>Description</th> + </tr> + <tr> + <td><code>-ORBReactorType</code> <em>which</em></td> + <td><a name="-ORBReactorType"></a>Specify what kind of reactor +the ORB uses. The default reactor is the ACE_TP_Reactor. + <table border="1" cellpadding="0" cellspacing="2"> + <tbody> + <tr> + <th><em>which</em></th> + <th>Reactor</th> + </tr> + <tr> + <td><code>select_mt</code></td> + <td>Use the multi-thread select-based reactor.</td> + </tr> + <tr> + <td><code>select_st</code></td> + <td>Use the single-thread select-based reactor.</td> + </tr> + <tr> + <td><code>fl</code></td> + <td>Use the FLReactor (FLTK-based).</td> + </tr> + <tr> + <td><code>wfmo</code></td> + <td>Use the WFMO reactor (Win32 only).</td> + </tr> + <tr> + <td><code>msg_wfmo</code></td> + <td>Use the MsgWFMO reactor (Win32 only).</td> + </tr> + <tr> + <td><code>tp</code></td> + <td>Use the <code>ACE_TP_Reactor</code>, a select based +thread-pool reactor which is the +default.</td> + </tr> + </tbody> + </table> + </td> + </tr> + <tr> + <td><code>-ORBReactorThreadQueue</code> <em>which</em></td> + <td><a name="-ORBReactorThreadQueue"></a>Applies only to the +ACE_TP_Reactor, i.e., when <code>-ORBReactorType</code> = <code>tp</code>, +and specifies the order, last-in-first-out (<em>which</em> = <code>LIFO</code>), +the default, or first-in-first-out (<em>which</em> = <code>FIFO</code>), +in which waiting threads are selected to run by the +ACE_Select_Reactor_Token. </td> + </tr> + <tr> + <td><code>-ORBInputCDRAllocator</code> <em>which</em></td> + <td><a name="-ORBInputCDRAllocator"></a>Specify whether the ORB +uses locked (<em>which</em> = <code>thread</code>) or lock-free (<em>which</em> += <code>null</code>) allocators for the incoming CDR buffers. Though <code>null</code> +should give the optimal performance; we made the default <code>thread</code>. +TAO optimizations for octet sequences will not work in all cases when +the allocator does not have locks (for example if the octet sequences +are part of a return value). Using locked allocators also allows the +users to take advantage of the TAO octet sequence extensions to +preserve the buffer after the upcall. </td> + </tr> + <tr> + <td><code>-ORBReactorRegistry</code> <em>registry_type</em></td> + <td><a name="-ORBReactorRegistry"></a>This option is no longer +supported. The Advanced Resource Factory will emit an error if you +attempt its use. </td> + </tr> + </tbody> + </table> + </p> +</blockquote> +<h4><a name="TSSF">2. Server_Strategy_Factory</a></h4> Certain elements of the ORB relate only to a TAO server. In this context, the server is any application that passively accepts connection from other processes and receives requests from those other connections. The server strategy factory is responsible for supporting features of TAO that are specific to servers. In particular, these include the following strategies: -<UL> -<LI> The <EM>concurrency strategies</EM> control the thread creation - flags and other concurrency related behaviors. <P> -<LI> The <EM>demuliplexing strategies</EM> are used +<ul> + <li> The <em>concurrency strategies</em> control the thread creation +flags and other concurrency related behaviors. + <p></p> + </li> + <li> The <em>demuliplexing strategies</em> are used to locate servants inside the POA that are responsible for handling -requests.<P> -</UL> +requests. + <p></p> + </li> +</ul> TAO provides a default server strategy factory called -<CODE>Server_Strategy_Factory</CODE> <p> - -Typically, the following options are set via the service configurator +<code>Server_Strategy_Factory</code> +<p>Typically, the following options are set via the service +configurator (svc.conf) file. The following line in the svc.conf file (all in one -line)<P><CODE>static Server_Strategy_Factory "[list of -options]"</CODE><P>would load all the options listed within "". An -example is available <A -href="http://cvs.doc.wustl.edu/viewcvs.cgi/TAO/performance-tests/Latency/Single_Threaded/svc.conf?rev=HEAD">online</A> -that shows how to specify this option in the <code>svc.conf</code> file. <p> - -<BLOCKQUOTE><P> -<TABLE cellSpacing=2 cellPadding=0 border=2> - <TBODY> - <TR> - <TH>Option</TH> - <TH>Description</TH></TR> - <TR> - <TD><A name=orb_concurrency><CODE>-ORBConcurrency</CODE></A> - <EM>which</EM></TD> - <TD>Specify which concurrency strategy to use. Range of values is - <CODE>reactive</CODE> for a purely Reactor-driven concurrency strategy or - <CODE>thread-per-connection</CODE> for creating a new thread to service - each connection. The default is reactive. </TD></TR> - <TR> - <TD><A name=server_timeout><CODE>-ORBThreadPerConnectionTimeout</CODE></A> - <EM>milliseconds</EM></TD> - <TD>In many platforms it is impossible to interrupt the server threads - created by the <CODE>thread-per-connection</CODE> model. This is because - these threads are blocked in <CODE>read()</CODE> operations (and not in - <CODE>select()</CODE>). As a workaround, the server threads periodically - poll the ORB to find out if they should shutdown. This option controls the - period of the polling, expressed in milliseconds. Applications that do not - shutdown, or that can otherwise ensure that no server threads will be - running at shutdown (for example if all the clients terminate before the - server) can disable the polling using the magic value - <CODE>INFINITE</CODE>. - <P>If the option is not provided then the ORB uses the compile-time flag - <CODE>TAO_DEFAULT_THREAD_PER_CONNECTION_TIMEOUT</CODE>, this flag also - expresses the time in milliseconds (as a string constant) and the magic - value <CODE>"INFINITE"</CODE> can be used to disable polling entirely. - This yields a slight performance improvement (around 1%). </P></TD></TR> - <TR> - <TD><CODE>-ORBActiveObjectMapSize</CODE> <EM>active object map -size</EM></TD> - <TD>Specify the size of the active object map. If not specified, the - default value is 64.</TD></TR> - <TR> - <TD><CODE>-ORBUseridPolicyDemuxStrategy</CODE> <EM>user id policy based - demultiplexing strategy</EM></TD> - <TD>Specify the demultiplexing lookup strategy to be used with the user id - policy. The <EM>demultiplexing strategy</EM> can be one of - <CODE>dynamic</CODE> or <CODE>linear</CODE>. This option defaults to using - the <CODE>dynamic</CODE> strategy. </TD></TR> - <TR> - <TD><CODE>-ORBSystemidPolicyDemuxStrategy</CODE> <EM>system id policy - based demultiplexing strategy</EM></TD> - <TD>Specify the demultiplexing lookup strategy to be used with the system - id policy. The <EM>demultiplexing strategy</EM> can be one of - <CODE>dynamic</CODE>, <CODE>linear</CODE>, or <CODE>active</CODE>. This - option defaults to use the <CODE>dynamic</CODE> strategy when - <CODE>-ORBAllowReactivationOfSystemids</CODE> is true, and to - <CODE>active</CODE> strategy when - <CODE>-ORBAllowReactivationOfSystemids</CODE> is false. </TD></TR> - <TR> - <TD><CODE>-ORBUniqueidPolicyReverseDemuxStrategy</CODE> <EM>unique id - policy based reverse demultiplexing strategy</EM></TD> - <TD>Specify the reverse demultiplexing lookup strategy to be used with the - unique id policy. The <EM>reverse demultiplexing strategy</EM> can be one - of <CODE>dynamic</CODE> or <CODE>linear</CODE>. This option defaults to - using the <CODE>dynamic</CODE> strategy. </TD></TR> - <TR> - <TD><CODE>-ORBAllowReactivationOfSystemids</CODE> <EM>allows reactivation - of system ids</EM></TD> - <TD>Specify whether system ids can be reactivated, i.e., once an id that - was generated by the system has been deactivated, will the user reactivate a - new servant using the old id. If the user is not going to use this - feature, the IORs can be shortened, an extra comparison in the critical - upcall path removed, and some memory on the server side can be saved. The - <CODE>ORBAllowReactivationOfSystemids</CODE> can be <CODE>0</CODE> or - <CODE>1</CODE>. This option defaults to <CODE>1</CODE>. </TD></TR> - <TR> - <TD><CODE>-ORBActiveHintInIds</CODE> <EM>adds an active hint in -ids</EM></TD> - <TD>Specify whether an active hint should be added to ids. With active - hints, ids can be found quickly. However, they lead to larger IORs. Note - that this option is disregarded - <CODE>if -ORBAllowReactivationOfSystemids</CODE> is set to <CODE>0</CODE>. - The <EM>-ORBActiveHintInIds</EM> can be <CODE>0</CODE> or <CODE>1</CODE>. - This option defaults to <CODE>1</CODE>. </TD></TR> - <TR> - <TD><CODE>-ORBPoaMapSize</CODE> <EM>poa map size</EM></TD> - <TD>Specify the size of the POA map. If not specified, the default value - is 24.</TD></TR> - <TR> - <TD><CODE>-ORBPersistentidPolicyDemuxStrategy</CODE> <EM>persistent id - policy based demultiplexing strategy</EM></TD> - <TD>Specify the demultiplexing lookup strategy to be used with the - persistent id policy. The <EM>demultiplexing strategy</EM> can be one of - <CODE>dynamic</CODE> or <CODE>linear</CODE>. This option defaults to using - the <CODE>dynamic</CODE> strategy. </TD></TR> - <TR> - <TD><CODE>-ORBTransientidPolicyDemuxStrategy</CODE> <EM>transient id - policy based demultiplexing strategy</EM></TD> - <TD>Specify the demultiplexing lookup strategy to be used with the - transient id policy. The <EM>demultiplexing strategy</EM> can be one of - <CODE>dynamic</CODE>, <CODE>linear</CODE>, or <CODE>active</CODE>. This - option defaults to using the <CODE>active</CODE> strategy. </TD></TR> - <TR> - <TD><CODE>-ORBActiveHintInPOANames</CODE> <EM>adds an active hint in poa - names</EM></TD> - <TD>Specify whether an active hint should be added to POA names. With - active hints, POA names can be found quickly. However, they lead to larger - IORs. The <CODE>-ORBActiveHintInPOANames</CODE> can be <CODE>0</CODE> or - <CODE>1</CODE>. This option defaults to <CODE>1</CODE>. </TD></TR> - <TR> - <TD><CODE>-ORBThreadFlags</CODE> <EM>thread flags</EM></TD> - <TD>Specify the flags used for thread creation. Flags can be any - logical-OR combination of <CODE>THR_DETACHED</CODE>, - <CODE>THR_BOUND</CODE>, <CODE>THR_NEW_LWP</CODE>, - <CODE>THE_SUSPENDED</CODE>. The default is <CODE>THR_BOUND | - THR_DETACHED</CODE> . </TD></TR> - <TR> - <TD><CODE>-ORBPOALock</CODE> <EM>lock type</EM></TD> - <TD><A name=-ORBPOALock></A>Specify the type of lock to be used for POA - accesses. Possible values for <EM>lock type</EM> are <CODE>thread</CODE>, - which specifies that an inter-thread mutex is used to guarantee exclusive - access, and <CODE>null</CODE>, which specifies that no locking be - performed. The default is <CODE>thread</CODE>.</TD></TR></TBODY></TABLE></P> -</BLOCKQUOTE> - -<h4><A name=TCSF>3. Client_Strategy_Factory</A></h4> Similar to the +line)</p> +<p><code>static Server_Strategy_Factory "[list of +options]"</code></p> +<p>would load all the options listed within "". An +example is available <a + href="http://cvs.doc.wustl.edu/viewcvs.cgi/TAO/performance-tests/Latency/Single_Threaded/svc.conf?rev=HEAD">online</a> +that shows how to specify this option in the <code>svc.conf</code> +file. </p> +<p></p> +<blockquote> + <p> + <table border="2" cellpadding="0" cellspacing="2"> + <tbody> + <tr> + <th>Option</th> + <th>Description</th> + </tr> + <tr> + <td><a name="orb_concurrency"><code>-ORBConcurrency</code></a> <em>which</em></td> + <td>Specify which concurrency strategy to use. Range of values +is <code>reactive</code> for a purely Reactor-driven concurrency +strategy or <code>thread-per-connection</code> for creating a new +thread to service each connection. The default is reactive. </td> + </tr> + <tr> + <td><a name="server_timeout"><code>-ORBThreadPerConnectionTimeout</code></a> + <em>milliseconds</em></td> + <td>In many platforms it is impossible to interrupt the server +threads created by the <code>thread-per-connection</code> model. This +is because these threads are blocked in <code>read()</code> operations +(and not in <code>select()</code>). As a workaround, the server +threads periodically poll the ORB to find out if they should shutdown. +This option controls the period of the polling, expressed in +milliseconds. Applications that do not shutdown, or that can otherwise +ensure that no server threads will be running at shutdown (for example +if all the clients terminate before the server) can disable the polling +using the magic value <code>INFINITE</code>. + <p>If the option is not provided then the ORB uses the +compile-time flag <code>TAO_DEFAULT_THREAD_PER_CONNECTION_TIMEOUT</code>, +this flag also expresses the time in milliseconds (as a string +constant) and the magic value <code>"INFINITE"</code> can be used to +disable polling entirely. This yields a slight performance improvement +(around 1%). </p> + </td> + </tr> + <tr> + <td><code>-ORBActiveObjectMapSize</code> <em>active object map +size</em></td> + <td>Specify the size of the active object map. If not +specified, the default value is 64.</td> + </tr> + <tr> + <td><code>-ORBUseridPolicyDemuxStrategy</code> <em>user id +policy based demultiplexing strategy</em></td> + <td>Specify the demultiplexing lookup strategy to be used with +the user id policy. The <em>demultiplexing strategy</em> can be one of + <code>dynamic</code> or <code>linear</code>. This option +defaults to using the <code>dynamic</code> strategy. </td> + </tr> + <tr> + <td><code>-ORBSystemidPolicyDemuxStrategy</code> <em>system id +policy based demultiplexing strategy</em></td> + <td>Specify the demultiplexing lookup strategy to be used with +the system id policy. The <em>demultiplexing strategy</em> can be one +of <code>dynamic</code>, <code>linear</code>, or <code>active</code>. +This option defaults to use the <code>dynamic</code> strategy when <code>-ORBAllowReactivationOfSystemids</code> +is true, and to <code>active</code> strategy when <code>-ORBAllowReactivationOfSystemids</code> +is false. </td> + </tr> + <tr> + <td><code>-ORBUniqueidPolicyReverseDemuxStrategy</code> <em>unique +id policy based reverse demultiplexing strategy</em></td> + <td>Specify the reverse demultiplexing lookup strategy to be +used with the unique id policy. The <em>reverse demultiplexing strategy</em> +can be one of <code>dynamic</code> or <code>linear</code>. This +option defaults to using the <code>dynamic</code> strategy. </td> + </tr> + <tr> + <td><code>-ORBAllowReactivationOfSystemids</code> <em>allows +reactivation of system ids</em></td> + <td>Specify whether system ids can be reactivated, i.e., once +an id that was generated by the system has been deactivated, will the +user reactivate a new servant using the old id. If the user is not +going to use this feature, the IORs can be shortened, an extra +comparison in the critical upcall path removed, and some memory on the +server side can be saved. The <code>ORBAllowReactivationOfSystemids</code> +can be <code>0</code> or <code>1</code>. This option defaults to <code>1</code>. + </td> + </tr> + <tr> + <td><code>-ORBActiveHintInIds</code> <em>adds an active hint +in +ids</em></td> + <td>Specify whether an active hint should be added to ids. With +active hints, ids can be found quickly. However, they lead to larger +IORs. Note that this option is disregarded <code>if +-ORBAllowReactivationOfSystemids</code> is set to <code>0</code>. The <em>-ORBActiveHintInIds</em> +can be <code>0</code> or <code>1</code>. This option defaults to <code>1</code>. + </td> + </tr> + <tr> + <td><code>-ORBPoaMapSize</code> <em>poa map size</em></td> + <td>Specify the size of the POA map. If not specified, the +default value is 24.</td> + </tr> + <tr> + <td><code>-ORBPersistentidPolicyDemuxStrategy</code> <em>persistent +id policy based demultiplexing strategy</em></td> + <td>Specify the demultiplexing lookup strategy to be used with +the persistent id policy. The <em>demultiplexing strategy</em> can be +one of <code>dynamic</code> or <code>linear</code>. This option +defaults to using the <code>dynamic</code> strategy. </td> + </tr> + <tr> + <td><code>-ORBTransientidPolicyDemuxStrategy</code> <em>transient +id policy based demultiplexing strategy</em></td> + <td>Specify the demultiplexing lookup strategy to be used with +the transient id policy. The <em>demultiplexing strategy</em> can be +one of <code>dynamic</code>, <code>linear</code>, or <code>active</code>. +This option defaults to using the <code>active</code> strategy. </td> + </tr> + <tr> + <td><code>-ORBActiveHintInPOANames</code> <em>adds an active +hint in poa names</em></td> + <td>Specify whether an active hint should be added to POA +names. With active hints, POA names can be found quickly. However, they +lead to larger IORs. The <code>-ORBActiveHintInPOANames</code> can be <code>0</code> +or <code>1</code>. This option defaults to <code>1</code>. </td> + </tr> + <tr> + <td><code>-ORBThreadFlags</code> <em>thread flags</em></td> + <td>Specify the flags used for thread creation. Flags can be +any logical-OR combination of <code>THR_DETACHED</code>, <code>THR_BOUND</code>, + <code>THR_NEW_LWP</code>, <code>THE_SUSPENDED</code>. The +default is <code>THR_BOUND | THR_DETACHED</code> . </td> + </tr> + <tr> + <td><code>-ORBPOALock</code> <em>lock type</em></td> + <td><a name="-ORBPOALock"></a>Specify the type of lock to be +used for POA accesses. Possible values for <em>lock type</em> are <code>thread</code>, +which specifies that an inter-thread mutex is used to guarantee +exclusive access, and <code>null</code>, which specifies that no +locking be performed. The default is <code>thread</code>.</td> + </tr> + </tbody> + </table> + </p> +</blockquote> +<h4><a name="TCSF">3. Client_Strategy_Factory</a></h4> +Similar to the server strategy factory, the client strategy factory supports those elements of TAO that are specific to the behavior of clients, which are any CORBA applications that actively establish connections, submit requests, and perhap receive responses. The client strategy factory -provides control over several resources used by clients. TAO provides +provides control over several resources used by clients. TAO provides a default client strategy factory called -<CODE>Client_Strategy_Factory</CODE>.<p> - -Typically, the following options are set via the service configurator +<code>Client_Strategy_Factory</code>. +<p>Typically, the following options are set via the service +configurator (<code>svc.conf</code>) file. The following line in the -<code>svc.conf</code> file (all in one line)<P><CODE>static -Client_Strategy_Factory "[list of options]"</CODE><P> would load all -the options listed within "". An example is available <A -href="http://cvs.doc.wustl.edu/viewcvs.cgi/TAO/performance-tests/Latency/Single_Threaded/svc.conf?rev=HEAD">online</A> -that shows how to specify this option in the <code>svc.conf</code> file.<P> - -<BLOCKQUOTE><P> -<TABLE cellSpacing=2 cellPadding=0 border=2> - <TBODY> - <TR> - <TH>Option</TH> - <TH>Description</TH></TR> - <TR> - <TD><CODE><A name=#-ORBProfileLock>-ORBProfileLock</A></CODE> - <EM>which</EM></TD> - <TD>Specify the kind of synchronization primitive for the Profiles. - Default is <EM>thread</EM>, which means that a regular thread mutex is - used. The second option is <EM>null</EM>, which means a null lock is - used. This makes sense in case of optimizations and is allowed when no - forwarding is used or only a single threaded client. </TD></TR> - <TR> - <TD><CODE>-ORBClientConnectionHandler</CODE> <EM>MT | ST | RW</EM></TD> - <TD><A name=-ORBClientConnectionHandler></A><EM>ST</EM> means use the - single-threaded client connection handler, i.e., the leader follower model - will not be used. However, <EM>ST</EM> does support nested upcalls and handling of - new requests while waiting for the reply from a server. - <P><EM>MT</EM> means use the multi-threaded client connection handler which uses - the leader follower model. This model allows the use of multiple threads - with a single Reactor. - <P><EM>RW</EM> selects a strategy that simply blocks in <CODE>recv()</CODE> when waiting for a - response from the server instead of waiting in the Reactor. The <EM>RW</EM> - strategy only works when the application does not have to worry about new - request showing up when waiting for a response. Further, this strategy - cannot be used with Asynchronous Method Invocation (AMI) - calls. Therefore, this strategy is appropriate - only for "pure" synchronous clients. Note that applications with nested - upcalls are not "pure" synchronous clients. Also note that this strategy - will only effect two way calls, since there is no waiting for one way - calls. This strategy can also be used in an application that is both a - client and a server if the server side is handled by a separate thread and - the client threads are "pure" clients. - <P>Default for this option is <EM>MT</EM>. </P></TD></TR> - <TR> - <TD><CODE>-ORBTransportMuxStrategy</CODE> <EM>EXCLUSIVE | MUXED</EM></TD> - <TD><A name=-ORBTransportMuxStrategy></A><EM>EXCLUSIVE</EM> means that the - Transport does not multiplex requests on a connection. At a time, there - can be only one request pending on a connection. - <P><EM>MUXED</EM> means that Transport multiplexes more than one request at the - same time on a connection. This option is often used in conjunction with - AMI, because multiple requests can be sent "in - bulk." - <P>Default for this option is <EM>MUXED</EM>. </P></TD></TR> - <TR> - <TD><CODE>-ORBConnectStrategy</CODE> <EM>type</EM></TD> - <TD><A name=-ORBConnectStrategy></A>TAO provides three strategies to - connect to remote servers. The default <EM>leader_follower</EM> - strategy uses the Reactor and non-blocking connects to connect and this - strategy participates in the Leader/Followers protocol to synchronize - access to the Reactor. The <EM>reactive</EM> strategy uses the Reactor - for non-blocking connects but does not take part in the Leader/Followers - protocol, thus it is better used only in single threaded applications. - Finally, the <EM>blocked</EM> strategy as the name implies, blocks the - thread until connection is complete. Some of the protocols in - TAO (such as SHMIOP and SSLIOP) can only use the <EM>blocked</EM> strategy. -</TD></TR></TBODY></TABLE></P></BLOCKQUOTE></BODY></HTML> +<code>svc.conf</code> file (all in one line)</p> +<p><code>static +Client_Strategy_Factory "[list of options]"</code></p> +<p> would load all +the options listed within "". An example is available <a + href="http://cvs.doc.wustl.edu/viewcvs.cgi/TAO/performance-tests/Latency/Single_Threaded/svc.conf?rev=HEAD">online</a> +that shows how to specify this option in the <code>svc.conf</code> +file.</p> +<p></p> +<blockquote> + <p> + <table border="2" cellpadding="0" cellspacing="2"> + <tbody> + <tr> + <th>Option</th> + <th>Description</th> + </tr> + <tr> + <td><code><a name="#-ORBProfileLock">-ORBProfileLock</a></code> + <em>which</em></td> + <td>Specify the kind of synchronization primitive for the +Profiles. Default is <em>thread</em>, which means that a regular +thread mutex is used. The second option is <em>null</em>, which means +a null lock is used. This makes sense in case of optimizations and is +allowed when no forwarding is used or only a single threaded client. </td> + </tr> + <tr> + <td><code>-ORBClientConnectionHandler</code> <em>MT | ST | RW</em></td> + <td><a name="-ORBClientConnectionHandler"></a><em>ST</em> means +use the single-threaded client connection handler, i.e., the leader +follower model will not be used. However, <em>ST</em> does support +nested upcalls and handling of new requests while waiting for the reply +from a server. + <p><em>MT</em> means use the multi-threaded client connection +handler which uses the leader follower model. This model allows the use +of multiple threads with a single Reactor. </p> + <p><em>RW</em> selects a strategy that simply blocks in <code>recv()</code> +when waiting for a response from the server instead of waiting in the +Reactor. The <em>RW</em> strategy only works when the application does +not have to worry about new request showing up when waiting for a +response. Further, this strategy cannot be used with Asynchronous +Method Invocation (AMI) calls. Therefore, this strategy is appropriate +only for "pure" synchronous clients. Note that applications with nested +upcalls are not "pure" synchronous clients. Also note that this +strategy will only effect two way calls, since there is no waiting for +one way calls. This strategy can also be used in an application that is +both a client and a server if the server side is handled by a separate +thread and the client threads are "pure" clients. </p> + <p>Default for this option is <em>MT</em>. </p> + </td> + </tr> + <tr> + <td><code>-ORBTransportMuxStrategy</code> <em>EXCLUSIVE | MUXED</em></td> + <td><a name="-ORBTransportMuxStrategy"></a><em>EXCLUSIVE</em> +means that the Transport does not multiplex requests on a connection. +At a time, there can be only one request pending on a connection. + <p><em>MUXED</em> means that Transport multiplexes more than +one request at the same time on a connection. This option is often used +in conjunction with AMI, because multiple requests can be sent "in +bulk." </p> + <p>Default for this option is <em>MUXED</em>. </p> + </td> + </tr> + <tr> + <td><code>-ORBConnectStrategy</code> <em>type</em></td> + <td><a name="-ORBConnectStrategy"></a>TAO provides three +strategies to connect to remote servers. The default <em>leader_follower</em> +strategy uses the Reactor and non-blocking connects to connect and this +strategy participates in the Leader/Followers protocol to synchronize +access to the Reactor. The <em>reactive</em> strategy uses the Reactor +for non-blocking connects but does not take part in the +Leader/Followers protocol, thus it is better used only in single +threaded applications. Finally, the <em>blocked</em> strategy as the +name implies, blocks the thread until connection is complete. Some of +the protocols in TAO (such as SHMIOP and SSLIOP) can only use the <em>blocked</em> +strategy. + </td> + </tr> + </tbody> + </table> + </p> +</blockquote> +</body> +</html> diff --git a/TAO/orbsvcs/IFR_Service/ifr_removing_visitor.cpp b/TAO/orbsvcs/IFR_Service/ifr_removing_visitor.cpp index 755d0f15a14..467dd213950 100644 --- a/TAO/orbsvcs/IFR_Service/ifr_removing_visitor.cpp +++ b/TAO/orbsvcs/IFR_Service/ifr_removing_visitor.cpp @@ -3,6 +3,7 @@ #include "ifr_removing_visitor.h" #include "utl_scope.h" +#include "ast_root.h" ACE_RCSID (IFR_Service, ifr_removing_visitor, @@ -85,3 +86,62 @@ ifr_removing_visitor::visit_scope (UTL_Scope *node) return 0; } + +int +ifr_removing_visitor::visit_root (AST_Root *node) +{ + ACE_DECLARE_NEW_CORBA_ENV; + ACE_TRY + { + CORBA::Container_var new_scope = + CORBA::Container::_narrow (be_global->repository () + ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + if (be_global->ifr_scopes ().push (new_scope.in ()) != 0) + { + ACE_ERROR_RETURN (( + LM_ERROR, + ACE_TEXT ("(%N:%l) ifr_removing_visitor::visit_root -") + ACE_TEXT (" scope push failed\n") + ), + -1 + ); + } + + if (this->visit_scope (node) == -1) + { + ACE_ERROR_RETURN (( + LM_ERROR, + ACE_TEXT ("(%N:%l) ifr_removing_visitor::visit_root -") + ACE_TEXT (" visit_scope failed\n") + ), + -1 + ); + } + + CORBA::Container_ptr tmp = CORBA::Container::_nil (); + + if (be_global->ifr_scopes ().pop (tmp) != 0) + { + ACE_ERROR_RETURN (( + LM_ERROR, + ACE_TEXT ("(%N:%l) ifr_removing_visitor::visit_root -") + ACE_TEXT (" scope pop failed\n") + ), + -1 + ); + } + } + ACE_CATCHANY + { + ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, + ACE_TEXT ("visit_root")); + + return -1; + } + ACE_ENDTRY; + + return 0; +} + diff --git a/TAO/orbsvcs/IFR_Service/ifr_removing_visitor.h b/TAO/orbsvcs/IFR_Service/ifr_removing_visitor.h index 8d885823bea..4b6f82fa44e 100644 --- a/TAO/orbsvcs/IFR_Service/ifr_removing_visitor.h +++ b/TAO/orbsvcs/IFR_Service/ifr_removing_visitor.h @@ -45,6 +45,9 @@ public: virtual int visit_scope (UTL_Scope *node); // Visit the scope. + + virtual int visit_root (AST_Root *node); + // Visit the root. }; #endif /* TAO_IFR_REMOVING_VISITOR_H */ diff --git a/TAO/orbsvcs/Naming_Service/README b/TAO/orbsvcs/Naming_Service/README index a4551b3c034..1bfc7602f4e 100644 --- a/TAO/orbsvcs/Naming_Service/README +++ b/TAO/orbsvcs/Naming_Service/README @@ -20,6 +20,7 @@ The following describes how to run the TAO Naming Service. [-f persitence_file_name] [-b base_address] [-m (1=enable multicast responses,0=disable(default)] + [-z time] 2. Optional Command-line Arguments @@ -69,6 +70,13 @@ The following describes how to run the TAO Naming Service. such multicast queries (use the Interoperable Naming Service bootstrap options instead). + -z time + A relative round trip timeout value (in seconds) that + the service should wait for when trying to progress an + operation through a federated naming context before + timing out and throwing a 'Cannot proceed' exception + to the client. If no value is set this will never occur. + 3. Environment Variables NameServicePort diff --git a/TAO/orbsvcs/orbsvcs/CosNaming.bor b/TAO/orbsvcs/orbsvcs/CosNaming.bor index 06d914defd0..490e36f49d2 100644 --- a/TAO/orbsvcs/orbsvcs/CosNaming.bor +++ b/TAO/orbsvcs/orbsvcs/CosNaming.bor @@ -52,6 +52,7 @@ LIBFILES = \ $(TAO_LIB) \ $(TAO_PORTABLESERVER_LIB) \ $(TAO_IORTABLE_LIB) \ + $(TAO_MESSAGING_LIB) \ $(TAO_SVC_UTILS_LIB) all: idl_src_files diff --git a/TAO/orbsvcs/orbsvcs/CosNaming.dsp b/TAO/orbsvcs/orbsvcs/CosNaming.dsp index 841bdd1e30a..75334a88efa 100644 --- a/TAO/orbsvcs/orbsvcs/CosNaming.dsp +++ b/TAO/orbsvcs/orbsvcs/CosNaming.dsp @@ -56,7 +56,7 @@ BSC32=bscmake.exe # ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 TAO_Svc_Utils.lib TAO_IORTable.lib TAO_PortableServer.lib TAO.lib ace.lib /nologo /dll /machine:I386 /out:"..\..\..\bin\TAO_CosNaming.dll" /libpath:"..\..\tao\IORTable" /libpath:"..\..\tao\PortableServer" /libpath:"..\..\tao" /libpath:"..\..\..\ace"
+# ADD LINK32 TAO_Svc_Utils.lib TAO_IORTable.lib TAO_PortableServer.lib TAO.lib ace.lib TAO_Messaging.lib TAO_Valuetype.lib /nologo /dll /machine:I386 /out:"..\..\..\bin\TAO_CosNaming.dll" /libpath:"..\..\tao\IORTable" /libpath:"..\..\tao\PortableServer" /libpath:"..\..\tao" /libpath:"..\..\..\ace" /libpath:"..\..\tao\Messaging" /libpath:"..\..\tao\Valuetype"
!ELSEIF "$(CFG)" == "CosNaming - Win32 Debug"
@@ -83,7 +83,7 @@ BSC32=bscmake.exe # ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 TAO_Svc_Utilsd.lib TAO_IORTabled.lib TAO_PortableServerd.lib TAOd.lib aced.lib /nologo /dll /debug /machine:I386 /out:"..\..\..\bin\TAO_CosNamingd.dll" /pdbtype:sept /libpath:"..\..\tao\IORTable" /libpath:"..\..\tao\PortableServer" /libpath:"..\..\tao" /libpath:"..\..\..\ace"
+# ADD LINK32 TAO_Svc_Utilsd.lib TAO_IORTabled.lib TAO_PortableServerd.lib TAOd.lib aced.lib TAO_Messagingd.lib TAO_Valuetyped.lib /nologo /dll /debug /machine:I386 /out:"..\..\..\bin\TAO_CosNamingd.dll" /pdbtype:sept /libpath:"..\..\tao\IORTable" /libpath:"..\..\tao\PortableServer" /libpath:"..\..\tao" /libpath:"..\..\..\ace" /libpath:"..\..\tao\Messaging" /libpath:"..\..\tao\Valuetype"
# SUBTRACT LINK32 /profile
!ELSEIF "$(CFG)" == "CosNaming - Win32 mfc Release"
@@ -113,7 +113,7 @@ BSC32=bscmake.exe # ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 ace.lib TAO.lib TAO_Svc_Utils.lib /nologo /dll /machine:I386 /out:"..\..\..\bin\TAO_CosNaming.dll" /libpath:"..\..\tao" /libpath:"..\..\..\ace"
-# ADD LINK32 acemfc.lib TAOmfc.lib TAO_Svc_Utilsmfc.lib TAO_PortableServermfc.lib /nologo /dll /machine:I386 /out:"..\..\..\bin\TAO_CosNamingmfc.dll" /libpath:"..\..\tao\PortableServer" /libpath:"..\..\tao" /libpath:"..\..\..\ace"
+# ADD LINK32 acemfc.lib TAOmfc.lib TAO_Svc_Utilsmfc.lib TAO_PortableServermfc.lib TAO_Messagingmfc.lib TAO_Valuetypemfc.lib /nologo /dll /machine:I386 /out:"..\..\..\bin\TAO_CosNamingmfc.dll" /libpath:"..\..\tao\PortableServer" /libpath:"..\..\tao" /libpath:"..\..\..\ace" /libpath:"..\..\tao\Messaging" /libpath:"..\..\tao\Valuetype"
!ELSEIF "$(CFG)" == "CosNaming - Win32 mfc Debug"
@@ -143,7 +143,7 @@ BSC32=bscmake.exe LINK32=link.exe
# ADD BASE LINK32 TAOd.lib aced.lib TAO_Svc_Utilsd.lib /nologo /dll /debug /machine:I386 /out:"..\..\..\bin\TAO_CosNamingd.dll" /pdbtype:sept /libpath:"..\..\tao" /libpath:"..\..\..\ace"
# SUBTRACT BASE LINK32 /profile
-# ADD LINK32 TAOmfcd.lib acemfcd.lib TAO_Svc_Utilsmfcd.lib TAO_PortableServermfcd.lib /nologo /dll /debug /machine:I386 /out:"..\..\..\bin\TAO_CosNamingmfcd.dll" /pdbtype:sept /libpath:"..\..\tao\PortableServer" /libpath:"..\..\tao" /libpath:"..\..\..\ace"
+# ADD LINK32 TAOmfcd.lib acemfcd.lib TAO_Svc_Utilsmfcd.lib TAO_PortableServermfcd.lib TAO_Messagingmfcd.lib TAO_Valuetypemfcd.lib /nologo /dll /debug /machine:I386 /out:"..\..\..\bin\TAO_CosNamingmfcd.dll" /pdbtype:sept /libpath:"..\..\tao\PortableServer" /libpath:"..\..\tao" /libpath:"..\..\..\ace" /libpath:"..\..\tao\Messaging" /libpath:"..\..\tao\Valuetype"
# SUBTRACT LINK32 /profile
!ENDIF
diff --git a/TAO/orbsvcs/orbsvcs/CosNaming.mpc b/TAO/orbsvcs/orbsvcs/CosNaming.mpc index c2cb1eeb4a5..568f025acc2 100644 --- a/TAO/orbsvcs/orbsvcs/CosNaming.mpc +++ b/TAO/orbsvcs/orbsvcs/CosNaming.mpc @@ -5,6 +5,8 @@ project(CosNaming) : orbsvcslib, core, svc_utils, iortable { tagchecks += Naming // Add this include path for precompiled headers includes += $(TAO_ROOT)/orbsvcs/orbsvcs + libs += TAO_Messaging + after += Messaging IDL_Files { CosNaming.idl diff --git a/TAO/orbsvcs/orbsvcs/Makefile.CosNaming b/TAO/orbsvcs/orbsvcs/Makefile.CosNaming index bed89c89161..b8f37636061 100644 --- a/TAO/orbsvcs/orbsvcs/Makefile.CosNaming +++ b/TAO/orbsvcs/orbsvcs/Makefile.CosNaming @@ -14,7 +14,7 @@ SHLIB = $(LIBNAME).$(SOEXT) VPATH=.:Naming -ACE_SHLIBS = -lTAO_Svc_Utils -lTAO_IORTable -lTAO_PortableServer -lTAO -lACE +ACE_SHLIBS = -lTAO_Svc_Utils -lTAO_IORTable -lTAO_PortableServer -lTAO_Messaging -lTAO -lACE #---------------------------------------------------------------------------- # Include macros and targets diff --git a/TAO/orbsvcs/orbsvcs/Naming/Hash_Naming_Context.cpp b/TAO/orbsvcs/orbsvcs/Naming/Hash_Naming_Context.cpp index 5dc2ffbecc6..199eeb15d4a 100644 --- a/TAO/orbsvcs/orbsvcs/Naming/Hash_Naming_Context.cpp +++ b/TAO/orbsvcs/orbsvcs/Naming/Hash_Naming_Context.cpp @@ -149,8 +149,20 @@ TAO_Hash_Naming_Context::bind (const CosNaming::Name& n, CosNaming::Name simple_name; simple_name.length (1); simple_name[0] = n[name_len - 1]; - context->bind (simple_name, obj ACE_ENV_ARG_PARAMETER); - ACE_CHECK; + ACE_TRY + { + context->bind (simple_name, obj ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + } + ACE_CATCH (CORBA::TIMEOUT, timeoutEx) + { + ACE_PRINT_EXCEPTION (timeoutEx, "Hash_Naming_Context::bind(), Caught CORBA::TIMEOUT exception"); + // throw a CannotProceed exception back to the client + // + ACE_TRY_THROW (CosNaming::NamingContext::CannotProceed + (context.in (), simple_name)); + } + ACE_ENDTRY; } // If we received a simple name, we need to bind it in this context. else @@ -203,8 +215,20 @@ TAO_Hash_Naming_Context::rebind (const CosNaming::Name& n, CosNaming::Name simple_name; simple_name.length (1); simple_name[0] = n[name_len - 1]; - context->rebind (simple_name, obj ACE_ENV_ARG_PARAMETER); - ACE_CHECK; + ACE_TRY + { + context->rebind (simple_name, obj ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + } + ACE_CATCH (CORBA::TIMEOUT, timeoutEx) + { + ACE_PRINT_EXCEPTION (timeoutEx, "Hash_Naming_Context::rebind(), Caught CORBA::TIMEOUT exception"); + // throw a CannotProceed exception back to the client + // + ACE_TRY_THROW (CosNaming::NamingContext::CannotProceed + (context.in (), simple_name)); + } + ACE_ENDTRY; } else // If we received a simple name, we need to rebind it in this @@ -263,8 +287,18 @@ TAO_Hash_Naming_Context::bind_context (const CosNaming::Name &n, CosNaming::Name simple_name; simple_name.length (1); simple_name[0] = n[name_len - 1]; - context->bind_context (simple_name, nc ACE_ENV_ARG_PARAMETER); - ACE_CHECK; + ACE_TRY + { + context->bind_context (simple_name, nc ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + } + ACE_CATCH (CORBA::TIMEOUT, timeoutEx) + { + ACE_PRINT_EXCEPTION (timeoutEx, "Hash_Naming_Context::bind_context (), Caught CORBA::TIMEOUT exception"); + ACE_TRY_THROW (CosNaming::NamingContext::CannotProceed + (context.in (), simple_name)); + } + ACE_ENDTRY; } // If we received a simple name, we need to bind it in this context. else @@ -317,8 +351,18 @@ TAO_Hash_Naming_Context::rebind_context (const CosNaming::Name &n, CosNaming::Name simple_name; simple_name.length (1); simple_name[0] = n[name_len - 1]; - context->rebind_context (simple_name, nc ACE_ENV_ARG_PARAMETER); - ACE_CHECK; + ACE_TRY + { + context->rebind_context (simple_name, nc ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + } + ACE_CATCH (CORBA::TIMEOUT, timeoutEx) + { + ACE_PRINT_EXCEPTION (timeoutEx, "Hash_Naming_Context::rebind_context (), Caught CORBA::TIMEOUT exception"); + ACE_TRY_THROW (CosNaming::NamingContext::CannotProceed + (context.in (), simple_name)); + } + ACE_ENDTRY; } else // If we received a simple name, we need to rebind it in this @@ -422,8 +466,23 @@ TAO_Hash_Naming_Context::resolve (const CosNaming::Name& n + 1); // If there are any exceptions, they will propagate up. - return context->resolve (rest_of_name - ACE_ENV_ARG_PARAMETER); + ACE_TRY + { + CORBA::Object_ptr resolved_ref; + resolved_ref = context->resolve (rest_of_name + ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + return resolved_ref; + } + ACE_CATCH (CORBA::TIMEOUT, timeoutEx) + { + ACE_PRINT_EXCEPTION (timeoutEx, "Hash_Naming_Context::resolve (), Caught CORBA::TIMEOUT exception"); + // throw a CannotProceed exception back to the client + // + ACE_TRY_THROW (CosNaming::NamingContext::CannotProceed + (context.in (), rest_of_name)); + } + ACE_ENDTRY; } } // If the name we had to resolve was simple, we just need to return @@ -464,8 +523,18 @@ TAO_Hash_Naming_Context::unbind (const CosNaming::Name& n CosNaming::Name simple_name; simple_name.length (1); simple_name[0] = n[name_len - 1]; - context->unbind (simple_name ACE_ENV_ARG_PARAMETER); - ACE_CHECK; + ACE_TRY + { + context->unbind (simple_name ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + } + ACE_CATCH (CORBA::TIMEOUT, timeoutEx) + { + ACE_PRINT_EXCEPTION (timeoutEx, "Hash_Naming_Context::unbind (), Caught CORBA::TIMEOUT exception"); + ACE_TRY_THROW (CosNaming::NamingContext::CannotProceed + (context.in (), simple_name)); + } + ACE_ENDTRY; } // If we received a simple name, we need to unbind it in this // context. diff --git a/TAO/orbsvcs/orbsvcs/Naming/Naming_Utils.cpp b/TAO/orbsvcs/orbsvcs/Naming/Naming_Utils.cpp index 613eefb399e..bee23df8996 100644 --- a/TAO/orbsvcs/orbsvcs/Naming/Naming_Utils.cpp +++ b/TAO/orbsvcs/orbsvcs/Naming/Naming_Utils.cpp @@ -13,6 +13,7 @@ #include "tao/ORB_Core.h" #include "tao/IORTable/IORTable.h" +#include "tao/Messaging/Messaging.h" #include "ace/Arg_Shifter.h" #include "ace/Auto_Ptr.h" @@ -35,7 +36,9 @@ TAO_Naming_Server::TAO_Naming_Server (void) multicast_ (0), use_storable_context_ (0), use_servant_activator_ (0), - use_redundancy_(0) + use_redundancy_(0), + round_trip_timeout_ (0), + use_round_trip_timeout_ (0) { } @@ -47,7 +50,9 @@ TAO_Naming_Server::TAO_Naming_Server (CORBA::ORB_ptr orb, const ACE_TCHAR *persistence_location, void *base_addr, int enable_multicast, - int use_storable_context) + int use_storable_context, + int round_trip_timeout, + int use_round_trip_timeout) : naming_context_ (), ior_multicast_ (0), naming_service_ior_ (), @@ -60,7 +65,9 @@ TAO_Naming_Server::TAO_Naming_Server (CORBA::ORB_ptr orb, multicast_ (0), use_storable_context_ (use_storable_context), use_servant_activator_ (0), - use_redundancy_(0) + use_redundancy_(0), + round_trip_timeout_ (0), + use_round_trip_timeout_ (0) { if (this->init (orb, poa, @@ -70,7 +77,9 @@ TAO_Naming_Server::TAO_Naming_Server (CORBA::ORB_ptr orb, persistence_location, base_addr, enable_multicast, - use_storable_context) == -1) + use_storable_context, + round_trip_timeout, + use_round_trip_timeout) == -1) ACE_ERROR ((LM_ERROR, "(%P|%t) %p\n", "TAO_Naming_Server::init")); @@ -86,7 +95,9 @@ TAO_Naming_Server::init (CORBA::ORB_ptr orb, const ACE_TCHAR *persistence_location, void *base_addr, int enable_multicast, - int use_storable_context) + int use_storable_context, + int round_trip_timeout, + int use_round_trip_timeout) { if (resolve_for_existing_naming_service) { @@ -141,14 +152,16 @@ TAO_Naming_Server::init (CORBA::ORB_ptr orb, base_addr, context_size, enable_multicast, - use_storable_context); + use_storable_context, + round_trip_timeout, + use_round_trip_timeout); } int TAO_Naming_Server::parse_args (int argc, ACE_TCHAR *argv[]) { - ACE_Get_Opt get_opts (argc, argv, ACE_LIB_TEXT("b:do:p:s:f:m:u:r:")); + ACE_Get_Opt get_opts (argc, argv, ACE_LIB_TEXT("b:do:p:s:f:m:u:r:z:")); int c; int size, result; @@ -176,7 +189,7 @@ TAO_Naming_Server::parse_args (int argc, case 'o': // outputs the naming service ior to a file. this->ior_output_file_ = ACE_OS::fopen (get_opts.opt_arg (), ACE_LIB_TEXT("w")); - + if (this->ior_output_file_ == 0) ACE_ERROR_RETURN ((LM_ERROR, ACE_LIB_TEXT("Unable to open %s for writing:(%u) %p\n"), @@ -222,6 +235,10 @@ TAO_Naming_Server::parse_args (int argc, this->persistence_file_name_ = get_opts.opt_arg (); u_opt_used = 1; break; + case 'z': + this->use_round_trip_timeout_ = 1; + this->round_trip_timeout_ = (int)1.0e7 * ACE_OS::atoi (get_opts.opt_arg ()); + break; case '?': default: ACE_ERROR_RETURN ((LM_ERROR, @@ -235,6 +252,7 @@ TAO_Naming_Server::parse_args (int argc, ACE_LIB_TEXT ("-f <persistence_file_name> ") ACE_LIB_TEXT ("-u <storable_persistence_directory (not used with -f)> ") ACE_LIB_TEXT ("-r <redundant_persistence_directory> ") + ACE_LIB_TEXT ("-z <relative round trip timeout> ") ACE_LIB_TEXT ("\n"), argv [0]), -1); @@ -365,7 +383,9 @@ TAO_Naming_Server::init_with_orb (int argc, this->persistence_file_name_, this->base_address_, this->multicast_, - this->use_storable_context_); + this->use_storable_context_, + this->round_trip_timeout_, + this->use_round_trip_timeout_); if (result == -1) return result; } @@ -408,7 +428,9 @@ TAO_Naming_Server::init_new_naming (CORBA::ORB_ptr orb, void *base_addr, size_t context_size, int enable_multicast, - int use_storable_context) + int use_storable_context, + int round_trip_timeout, + int use_round_trip_timeout) { ACE_DECLARE_NEW_CORBA_ENV; ACE_TRY @@ -603,6 +625,30 @@ TAO_Naming_Server::init_new_naming (CORBA::ORB_ptr orb, #else ACE_UNUSED_ARG (enable_multicast); #endif /* ACE_HAS_IP_MULTICAST */ + + if (use_round_trip_timeout == 1) + { + TimeBase::TimeT roundTripTimeoutVal = round_trip_timeout; + CORBA::Any anyObjectVal; + anyObjectVal <<= roundTripTimeoutVal; + CORBA::PolicyList polList (1); + polList.length (1); + polList[0] = orb->create_policy (Messaging::RELATIVE_RT_TIMEOUT_POLICY_TYPE, + anyObjectVal); + ACE_TRY_CHECK; + + // set a timeout on the orb + // + CORBA::Object_var orbPolicyManagerObj = orb->resolve_initial_references ("ORBPolicyManager"); + CORBA::PolicyManager_var orbPolicyManager = + CORBA::PolicyManager::_narrow (orbPolicyManagerObj.in ()); + ACE_TRY_CHECK; + orbPolicyManager->set_policy_overrides (polList, CORBA::SET_OVERRIDE); + + polList[0]->destroy (); + ACE_TRY_CHECK; + polList[0] = CORBA::Policy::_nil (); + } } ACE_CATCHANY { diff --git a/TAO/orbsvcs/orbsvcs/Naming/Naming_Utils.h b/TAO/orbsvcs/orbsvcs/Naming/Naming_Utils.h index b3ce47826c1..ff2daa322c5 100644 --- a/TAO/orbsvcs/orbsvcs/Naming/Naming_Utils.h +++ b/TAO/orbsvcs/orbsvcs/Naming/Naming_Utils.h @@ -85,7 +85,9 @@ public: const ACE_TCHAR *persistence_location = 0, void *base_addr = TAO_NAMING_BASE_ADDR, int enable_multicast = 1, - int use_storable_context = 0); + int use_storable_context = 0, + int round_trip_timeout = 0, + int use_round_trip_timeout = 0); /** * Initializer. Attempts to find an existing Naming Service if @@ -109,7 +111,9 @@ public: const ACE_TCHAR *persistence_location = 0, void *base_addr = TAO_NAMING_BASE_ADDR, int enable_multicast = 1, - int use_storable_context = 0); + int use_storable_context = 0, + int round_trip_timeout = 0, + int use_round_trip_timeout = 0); /// Initialize the Naming Service with the command line arguments and /// the ORB. @@ -146,7 +150,9 @@ protected: void *base_addr, size_t context_size, int enable_multicast, - int use_storable_context); + int use_storable_context, + int round_trip_timeout = 0, + int use_round_trip_timeout = 0); /// parses the arguments. int parse_args (int argc, ACE_TCHAR *argv[]); @@ -223,7 +229,10 @@ protected: * If not zero support redundant naming servers. */ int use_redundancy_; - + + // If not zero use round trip timeout policy set to value specified + int round_trip_timeout_; + int use_round_trip_timeout_; }; /** diff --git a/TAO/orbsvcs/tests/Bug_1334_Regression/Bug_1334_Regression.dsw b/TAO/orbsvcs/tests/Bug_1334_Regression/Bug_1334_Regression.dsw new file mode 100644 index 00000000000..0e4310b7089 --- /dev/null +++ b/TAO/orbsvcs/tests/Bug_1334_Regression/Bug_1334_Regression.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "Bug_1334_client"=Bug_1334_client.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/TAO/orbsvcs/tests/Bug_1334_Regression/Bug_1334_client.dsp b/TAO/orbsvcs/tests/Bug_1334_Regression/Bug_1334_client.dsp new file mode 100644 index 00000000000..bf2a0647d22 --- /dev/null +++ b/TAO/orbsvcs/tests/Bug_1334_Regression/Bug_1334_client.dsp @@ -0,0 +1,77 @@ +# Microsoft Developer Studio Project File - Name="Bug_1334_client" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=Bug_1334_client - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE run the tool that generated this project file and specify the
+!MESSAGE nmake output type. You can then use the following command:
+!MESSAGE
+!MESSAGE NMAKE /f "Bug_1334_client.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "Bug_1334_client.mak" CFG="Bug_1334_client - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "Bug_1334_client - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "Bug_1334_client - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "Bug_1334_client - Win32 Release"
+
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release\Bug_1334_client"
+# PROP Target_Dir ""
+# ADD CPP /nologo /O2 /W3 /GX /MD /GR /I "..\..\..\orbsvcs" /I "..\..\.." /I "..\..\..\tao" /I "..\..\..\.." /D NDEBUG /D WIN32 /D _CONSOLE /FD /c
+# SUBTRACT CPP /YX
+# ADD RSC /l 0x409 /d NDEBUG /i "..\..\..\orbsvcs" /i "..\..\.." /i "..\..\..\tao" /i "..\..\..\.."
+BSC32=bscmake.exe
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD LINK32 advapi32.lib user32.lib /INCREMENTAL:NO TAO_CosNaming.lib TAO_Svc_Utils.lib TAO_IORTable.lib TAO_PortableServer.lib TAO_IORInterceptor.lib TAO_Valuetype.lib TAO_ObjRefTemplate.lib TAO.lib ACE.lib /libpath:"..\..\..\orbsvcs\orbsvcs" /libpath:"..\..\..\tao\IORTable" /libpath:"..\..\..\tao\PortableServer" /libpath:"..\..\..\tao\IORInterceptor" /libpath:"..\..\..\tao\Valuetype" /libpath:"..\..\..\tao\ObjRefTemplate" /libpath:"..\..\..\..\ace" /libpath:"..\..\..\tao" /libpath:"..\..\..\..\lib" /nologo /version:1.3.5 /subsystem:console /pdb:"Release\client.pdb" /machine:I386 /out:"Release\client.exe"
+
+!ELSEIF "$(CFG)" == "Bug_1334_client - Win32 Debug"
+
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "."
+# PROP Intermediate_Dir "Debug\Bug_1334_client"
+# PROP Target_Dir ""
+# ADD CPP /nologo /Ob0 /W3 /Gm /GX /Zi /MDd /GR /Gy /I "..\..\..\orbsvcs" /I "..\..\.." /I "..\..\..\tao" /I "..\..\..\.." /D _DEBUG /D WIN32 /D _CONSOLE /FD /c
+# SUBTRACT CPP /YX
+# ADD RSC /l 0x409 /d _DEBUG /i "..\..\..\orbsvcs" /i "..\..\.." /i "..\..\..\tao" /i "..\..\..\.."
+BSC32=bscmake.exe
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD LINK32 advapi32.lib user32.lib /INCREMENTAL:NO TAO_CosNamingd.lib TAO_Svc_Utilsd.lib TAO_IORTabled.lib TAO_PortableServerd.lib TAO_IORInterceptord.lib TAO_Valuetyped.lib TAO_ObjRefTemplated.lib TAOd.lib ACEd.lib /libpath:"..\..\..\orbsvcs\orbsvcs" /libpath:"..\..\..\tao\IORTable" /libpath:"..\..\..\tao\PortableServer" /libpath:"..\..\..\tao\IORInterceptor" /libpath:"..\..\..\tao\Valuetype" /libpath:"..\..\..\tao\ObjRefTemplate" /libpath:"..\..\..\..\ace" /libpath:"..\..\..\tao" /libpath:"..\..\..\..\lib" /nologo /version:1.3.5 /subsystem:console /pdb:".\client.pdb" /debug /machine:I386 /out:".\client.exe"
+
+!ENDIF
+
+# Begin Target
+
+# Name "Bug_1334_client - Win32 Release"
+# Name "Bug_1334_client - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;cxx;c"
+# Begin Source File
+
+SOURCE=".\client.cpp"
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/TAO/orbsvcs/tests/Bug_1334_Regression/Bug_1334_client.dsw b/TAO/orbsvcs/tests/Bug_1334_Regression/Bug_1334_client.dsw new file mode 100644 index 00000000000..cafb3bbbb0a --- /dev/null +++ b/TAO/orbsvcs/tests/Bug_1334_Regression/Bug_1334_client.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "Bug_1334_client"=.\Bug_1334_client.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/TAO/orbsvcs/tests/Bug_1334_Regression/Makefile b/TAO/orbsvcs/tests/Bug_1334_Regression/Makefile new file mode 100644 index 00000000000..5a6834faab6 --- /dev/null +++ b/TAO/orbsvcs/tests/Bug_1334_Regression/Makefile @@ -0,0 +1,19 @@ +#---------------------------------------------------------------------------- +# GNU ACE Workspace +# +# @file Makefile +# +# $Id$ +# +# This file was automatically generated by MPC. Any changes made directly to +# this file will be lost the next time it is generated. +# +#---------------------------------------------------------------------------- + +TARGETS_NESTED = all debug profile optimize install deinstall clean realclean clobber depend rcs_info idl_stubs + +$(TARGETS_NESTED): + @$(MAKE) -f Makefile.Bug_1334_client $(@); + +reverseclean: + @$(MAKE) -f Makefile.Bug_1334_client realclean diff --git a/TAO/orbsvcs/tests/Bug_1334_Regression/Makefile.Bug_1334_client b/TAO/orbsvcs/tests/Bug_1334_Regression/Makefile.Bug_1334_client new file mode 100644 index 00000000000..849cb65606d --- /dev/null +++ b/TAO/orbsvcs/tests/Bug_1334_Regression/Makefile.Bug_1334_client @@ -0,0 +1,98 @@ +#---------------------------------------------------------------------------- +# GNU Makefile +# +# @file Makefile.Bug_1334_client +# +# $Id$ +# +# This file was automatically generated by MPC. Any changes made directly to +# this file will be lost the next time it is generated. +# +#---------------------------------------------------------------------------- +MAKEFILE = Makefile.Bug_1334_client +DEPENDENCY_FILE = .depend.Makefile.Bug_1334_client +BIN_UNCHECKED = client + +ifndef TAO_ROOT + TAO_ROOT = $(ACE_ROOT)/TAO +endif +ifndef CIAO_ROOT + CIAO_ROOT = $(TAO_ROOT)/CIAO +endif + +FILES = \ + client + +#---------------------------------------------------------------------------- +# Include macros and targets +#---------------------------------------------------------------------------- +LDLIBS = -lTAO_CosNaming -lTAO_Svc_Utils -lTAO_IORTable -lTAO_PortableServer -lTAO_IORInterceptor -lTAO_Valuetype -lTAO_ObjRefTemplate -lTAO -lACE +include $(ACE_ROOT)/include/makeinclude/wrapper_macros.GNU +## We don't need the ACELIB setting from wrapper_macros.GNU +ACELIB = +include $(TAO_ROOT)/rules.tao.GNU + +# To build multiple executables in the same directory on AIX, it works +# best to have a template directory per project. +# The compiler/linker isn't too smart about instantiating templates... +ifdef TEMPINCDIR +TEMPINCDIR := $(TEMPINCDIR)/Bug_1334_client + +all: $(TEMPINCDIR) + +$(TEMPINCDIR): + @-test -d $(TEMPINCDIR) || mkdir -p $(TEMPINCDIR) $(ACE_NUL_STDERR) + +endif + +CURRENT_COMPONENTS := $(shell sh $(ACE_ROOT)/bin/ace_components --orbsvcs) +ifeq (Naming, $(findstring Naming, $(CURRENT_COMPONENTS))) +BIN = $(BIN_UNCHECKED) +else + all: comp_warning +endif + +OBJS = $(addsuffix .o, $(notdir $(FILES))) +SRC = $(addsuffix .cpp, $(FILES)) + +include $(ACE_ROOT)/include/makeinclude/macros.GNU +include $(ACE_ROOT)/include/makeinclude/rules.common.GNU +include $(ACE_ROOT)/include/makeinclude/rules.nonested.GNU + +include $(ACE_ROOT)/include/makeinclude/rules.local.GNU +include $(TAO_ROOT)/taoconfig.mk + +CPPFLAGS += -I../../../orbsvcs -I../../.. -I../../../tao -I../../../.. +ifeq ($(static_libs),1) + ifneq ($(LIB),) + CPPFLAGS += -DTAO_AS_STATIC_LIBS -DTAO_AS_STATIC_LIBS -DACE_AS_STATIC_LIBS + endif +endif + + +LDFLAGS += -L../../../orbsvcs/orbsvcs -L../../../tao/IORTable -L../../../tao/PortableServer -L../../../tao/IORInterceptor -L../../../tao/Valuetype -L../../../tao/ObjRefTemplate -L../../../../ace -L../../../tao -L../../../../lib + +#---------------------------------------------------------------------------- +# Local targets +#---------------------------------------------------------------------------- +comp_warning: + @echo This project will not be built due to one of the following missing components: + @echo Naming + +../../../../lib: + -@mkdir -p "../../../../lib" + + +ifndef kylix +$(BIN): $(addprefix $(VDIR), $(OBJS)) + $(LINK.cc) $(LDFLAGS) $(CC_OUTPUT_FLAG) $@ $^ $(VLDLIBS) $(POSTLINK) +else +$(BIN): $(addprefix $(VDIR), $(OBJS)) + $(LINK.cc) $(LDFLAGS) $(CC_OUTPUT_FLAG) $(VLDLIBS) $(BORINITEXEOBJ) $(POSTLINK) $^, $@,, +endif + +realclean: clean +ifneq ($(GENERATED_DIRTY),) + -$(RM) -r $(GENERATED_DIRTY) +endif + diff --git a/TAO/orbsvcs/tests/Bug_1334_Regression/README b/TAO/orbsvcs/tests/Bug_1334_Regression/README new file mode 100644 index 00000000000..8a0897a9fce --- /dev/null +++ b/TAO/orbsvcs/tests/Bug_1334_Regression/README @@ -0,0 +1,5 @@ +This test provides regression for Bug 1334. + +It tests that a service initial ref IOR can be specified as an environment property in the form <ServiceName>IOR (in this case it is the NameService) and that the value set has correct precedence vis a vis -ORBInitRef values. + +See Bug #1334 for more.
\ No newline at end of file diff --git a/TAO/orbsvcs/tests/Bug_1334_Regression/client.cpp b/TAO/orbsvcs/tests/Bug_1334_Regression/client.cpp new file mode 100644 index 00000000000..e56504d678d --- /dev/null +++ b/TAO/orbsvcs/tests/Bug_1334_Regression/client.cpp @@ -0,0 +1,38 @@ +// +// $Id$ +// +#include "tao/corba.h" + +// Attempts to resolve the NameService. +// Returns: +// 0 if the NameService was resolved +// 1 if the NameService could not be resolved +// 2 if something else went wrong +// +int main( int argc, char *argv[] ) +{ + try + { + CORBA::ORB_var orb = CORBA::ORB_init( argc, argv ) ; + + try + { + CORBA::Object_var naming = + orb->resolve_initial_references( "NameService" ) ; + if( CORBA::is_nil( naming.in() ) ) + { + return 1 ; + } + } + catch( CORBA::Exception& e ) + { + return 1 ; + } + } + catch( CORBA::Exception& e ) + { + return 2 ; + } + + return 0 ; +} diff --git a/TAO/orbsvcs/tests/Bug_1334_Regression/run_test.pl b/TAO/orbsvcs/tests/Bug_1334_Regression/run_test.pl new file mode 100755 index 00000000000..7c0ccf966d7 --- /dev/null +++ b/TAO/orbsvcs/tests/Bug_1334_Regression/run_test.pl @@ -0,0 +1,101 @@ + +# $Id$ + +eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' + & eval 'exec perl -S $0 $argv:q' + if 0; + +# -*- perl -*- + +use lib '../../../../bin'; +use PerlACE::Run_Test; + +# The NameService IOR file +# +$nsiorfile = PerlACE::LocalFile("ns.ior"); +unlink $nsiorfile; + +# The client process +# +$CLIENT = new PerlACE::Process(PerlACE::LocalFile("client")); + +# Fire up the Name Service +# +$NS = new PerlACE::Process ("../../Naming_Service/Naming_Service", "-o $nsiorfile"); +$NS->Spawn (); + +if (PerlACE::waitforfile_timed ($nsiorfile, 10) == -1) +{ + print STDERR "ERROR: cannot find Name Service IOR file <$nsiorfile>\n"; + $NS->Kill (); $NS->TimedWait (1); + exit 1; +} + + +# Try the client with the name service ior in an environment variable of +# the form <service name>IOR. +# Expect it to succeed. +# +$ENV {'NameServiceIOR'} = "file://$nsiorfile"; +$CLIENT->Arguments(""); +if ($CLIENT->SpawnWaitKill (30) != 0) +{ + print STDERR "ERROR: Name Service not resolved by environment variable\n"; + $server = $NS->TerminateWaitKill (5); + if ($server != 0) + { + print STDERR "ERROR: Closing Name Service returned $server\n"; + $status = 1; + } + unlink $nsiorfile; + exit 1; +} + +# Now try it with a duff ior in the environment variable. +# Expect it to fail. +# +$ENV {'NameServiceIOR'} = "Banana"; +$CLIENT->Arguments(""); +if ($CLIENT->SpawnWaitKill (30) != 1) +{ + print STDERR "ERROR: Name Service resolved with duff environment\n"; + $server = $NS->TerminateWaitKill (5); + if ($server != 0) + { + print STDERR "ERROR: Closing Name Service returned $server\n"; + $status = 1; + } + unlink $nsiorfile; + exit 1; +} + +# Now try with a duff ior in the environment variable but overridden by +# a command line parameter. +# Expect it to succeed. +# +$ENV {'NameServiceIOR'} = "Custard"; +$CLIENT->Arguments("-ORBInitRef NameService=file://$nsiorfile"); +if ($CLIENT->SpawnWaitKill (30) != 0) +{ + print STDERR "ERROR: Name Service not resolved by command line override\n"; + $server = $NS->TerminateWaitKill (5); + if ($server != 0) + { + print STDERR "ERROR: Closing Name Service returned $server\n"; + $status = 1; + } + unlink $nsiorfile; + exit 1; +} + +# Clean up and return +# +$server = $NS->TerminateWaitKill (5); +if ($server != 0) +{ + print STDERR "ERROR: Closing Name Service returned $server\n"; + $status = 1; +} +unlink $nsiorfile; + +exit 0; diff --git a/TAO/orbsvcs/tests/Bug_1334_Regression/test.mpc b/TAO/orbsvcs/tests/Bug_1334_Regression/test.mpc new file mode 100644 index 00000000000..e98c8448162 --- /dev/null +++ b/TAO/orbsvcs/tests/Bug_1334_Regression/test.mpc @@ -0,0 +1,7 @@ +project(Bug_1334_client) : namingexe { + exename = client + libpaths += $(TAO_ROOT)/orbsvcs/orbsvcs $(TAO_ROOT)/tao/IORTable $(TAO_ROOT)/tao/PortableServer $(TAO_ROOT)/tao/IORInterceptor $(TAO_ROOT)/tao/Valuetype $(TAO_ROOT)/tao/ObjRefTemplate $(ACE_ROOT)/ace $(TAO_ROOT)/tao + Source_Files { + client.cpp + } +}
\ No newline at end of file diff --git a/TAO/orbsvcs/tests/Bug_1630_Regression/Bug_1630_Regression.dsw b/TAO/orbsvcs/tests/Bug_1630_Regression/Bug_1630_Regression.dsw new file mode 100644 index 00000000000..832bbf304e6 --- /dev/null +++ b/TAO/orbsvcs/tests/Bug_1630_Regression/Bug_1630_Regression.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "Bug_1630_testclient"=Bug_1630_testclient.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/TAO/orbsvcs/tests/Bug_1630_Regression/Bug_1630_testclient.dsp b/TAO/orbsvcs/tests/Bug_1630_Regression/Bug_1630_testclient.dsp new file mode 100644 index 00000000000..44d8782865e --- /dev/null +++ b/TAO/orbsvcs/tests/Bug_1630_Regression/Bug_1630_testclient.dsp @@ -0,0 +1,77 @@ +# Microsoft Developer Studio Project File - Name="Bug_1630_testclient" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=Bug_1630_testclient - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE run the tool that generated this project file and specify the
+!MESSAGE nmake output type. You can then use the following command:
+!MESSAGE
+!MESSAGE NMAKE /f "Bug_1630_testclient.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "Bug_1630_testclient.mak" CFG="Bug_1630_testclient - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "Bug_1630_testclient - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "Bug_1630_testclient - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "Bug_1630_testclient - Win32 Release"
+
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release\Bug_1630_testclient"
+# PROP Target_Dir ""
+# ADD CPP /nologo /O2 /W3 /GX /MD /GR /I "..\..\.." /I "..\..\..\tao" /I "..\..\..\.." /D NDEBUG /D WIN32 /D _CONSOLE /FD /c
+# SUBTRACT CPP /YX
+# ADD RSC /l 0x409 /d NDEBUG /i "..\..\.." /i "..\..\..\tao" /i "..\..\..\.."
+BSC32=bscmake.exe
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD LINK32 advapi32.lib user32.lib /INCREMENTAL:NO TAO_IFR_Client.lib TAO.lib ACE.lib /libpath:"..\..\..\tao\IFR_Client" /libpath:"..\..\..\tao" /libpath:"..\..\..\..\ace" /libpath:"..\..\..\..\lib" /nologo /version:1.3.5 /subsystem:console /pdb:"Release\testclient.pdb" /machine:I386 /out:"Release\testclient.exe"
+
+!ELSEIF "$(CFG)" == "Bug_1630_testclient - Win32 Debug"
+
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "."
+# PROP Intermediate_Dir "Debug\Bug_1630_testclient"
+# PROP Target_Dir ""
+# ADD CPP /nologo /Ob0 /W3 /Gm /GX /Zi /MDd /GR /Gy /I "..\..\.." /I "..\..\..\tao" /I "..\..\..\.." /D _DEBUG /D WIN32 /D _CONSOLE /FD /c
+# SUBTRACT CPP /YX
+# ADD RSC /l 0x409 /d _DEBUG /i "..\..\.." /i "..\..\..\tao" /i "..\..\..\.."
+BSC32=bscmake.exe
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD LINK32 advapi32.lib user32.lib /INCREMENTAL:NO TAO_IFR_Clientd.lib TAOd.lib ACEd.lib /libpath:"..\..\..\tao\IFR_Client" /libpath:"..\..\..\tao" /libpath:"..\..\..\..\ace" /libpath:"..\..\..\..\lib" /nologo /version:1.3.5 /subsystem:console /pdb:".\testclient.pdb" /debug /machine:I386 /out:".\testclient.exe"
+
+!ENDIF
+
+# Begin Target
+
+# Name "Bug_1630_testclient - Win32 Release"
+# Name "Bug_1630_testclient - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;cxx;c"
+# Begin Source File
+
+SOURCE=".\testclient.cpp"
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/TAO/orbsvcs/tests/Bug_1630_Regression/Makefile b/TAO/orbsvcs/tests/Bug_1630_Regression/Makefile new file mode 100644 index 00000000000..d8de22d43c7 --- /dev/null +++ b/TAO/orbsvcs/tests/Bug_1630_Regression/Makefile @@ -0,0 +1,19 @@ +#---------------------------------------------------------------------------- +# GNU ACE Workspace +# +# @file Makefile +# +# $Id$ +# +# This file was automatically generated by MPC. Any changes made directly to +# this file will be lost the next time it is generated. +# +#---------------------------------------------------------------------------- + +TARGETS_NESTED = all debug profile optimize install deinstall clean realclean clobber depend rcs_info idl_stubs + +$(TARGETS_NESTED): + @$(MAKE) -f Makefile.Bug_1630_testclient $(@); + +reverseclean: + @$(MAKE) -f Makefile.Bug_1630_testclient realclean diff --git a/TAO/orbsvcs/tests/Bug_1630_Regression/Makefile.Bug_1630_testclient b/TAO/orbsvcs/tests/Bug_1630_Regression/Makefile.Bug_1630_testclient new file mode 100644 index 00000000000..4b307df5855 --- /dev/null +++ b/TAO/orbsvcs/tests/Bug_1630_Regression/Makefile.Bug_1630_testclient @@ -0,0 +1,89 @@ +#---------------------------------------------------------------------------- +# GNU Makefile +# +# @file Makefile.Bug_1630_testclient +# +# $Id$ +# +# This file was automatically generated by MPC. Any changes made directly to +# this file will be lost the next time it is generated. +# +#---------------------------------------------------------------------------- +MAKEFILE = Makefile.Bug_1630_testclient +DEPENDENCY_FILE = .depend.Makefile.Bug_1630_testclient +BIN_UNCHECKED = testclient + +ifndef TAO_ROOT + TAO_ROOT = $(ACE_ROOT)/TAO +endif +ifndef CIAO_ROOT + CIAO_ROOT = $(TAO_ROOT)/CIAO +endif + +FILES = \ + testclient + +#---------------------------------------------------------------------------- +# Include macros and targets +#---------------------------------------------------------------------------- +LDLIBS = -lTAO_IFR_Client -lTAO -lACE +include $(ACE_ROOT)/include/makeinclude/wrapper_macros.GNU +## We don't need the ACELIB setting from wrapper_macros.GNU +ACELIB = +include $(TAO_ROOT)/rules.tao.GNU + +# To build multiple executables in the same directory on AIX, it works +# best to have a template directory per project. +# The compiler/linker isn't too smart about instantiating templates... +ifdef TEMPINCDIR +TEMPINCDIR := $(TEMPINCDIR)/Bug_1630_testclient + +all: $(TEMPINCDIR) + +$(TEMPINCDIR): + @-test -d $(TEMPINCDIR) || mkdir -p $(TEMPINCDIR) $(ACE_NUL_STDERR) + +endif + +BIN = $(BIN_UNCHECKED) + +OBJS = $(addsuffix .o, $(notdir $(FILES))) +SRC = $(addsuffix .cpp, $(FILES)) + +include $(ACE_ROOT)/include/makeinclude/macros.GNU +include $(ACE_ROOT)/include/makeinclude/rules.common.GNU +include $(ACE_ROOT)/include/makeinclude/rules.nonested.GNU + +include $(ACE_ROOT)/include/makeinclude/rules.local.GNU +include $(TAO_ROOT)/taoconfig.mk + +CPPFLAGS += -I../../.. -I../../../tao -I../../../.. +ifeq ($(static_libs),1) + ifneq ($(LIB),) + CPPFLAGS += -DTAO_AS_STATIC_LIBS -DACE_AS_STATIC_LIBS + endif +endif + + +LDFLAGS += -L../../../tao/IFR_Client -L../../../tao -L../../../../ace -L../../../../lib + +#---------------------------------------------------------------------------- +# Local targets +#---------------------------------------------------------------------------- +.: + -@mkdir -p "." + + +ifndef kylix +$(BIN): $(addprefix $(VDIR), $(OBJS)) + $(LINK.cc) $(LDFLAGS) $(CC_OUTPUT_FLAG) $@ $^ $(VLDLIBS) $(POSTLINK) +else +$(BIN): $(addprefix $(VDIR), $(OBJS)) + $(LINK.cc) $(LDFLAGS) $(CC_OUTPUT_FLAG) $(VLDLIBS) $(BORINITEXEOBJ) $(POSTLINK) $^, $@,, +endif + +realclean: clean +ifneq ($(GENERATED_DIRTY),) + -$(RM) -r $(GENERATED_DIRTY) +endif + diff --git a/TAO/orbsvcs/tests/Bug_1630_Regression/run_test.pl b/TAO/orbsvcs/tests/Bug_1630_Regression/run_test.pl new file mode 100755 index 00000000000..0fa33437ade --- /dev/null +++ b/TAO/orbsvcs/tests/Bug_1630_Regression/run_test.pl @@ -0,0 +1,60 @@ + +# $Id$ + +eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' + & eval 'exec perl -S $0 $argv:q' + if 0; + +# -*- perl -*- + +use lib '../../../../bin'; +use PerlACE::Run_Test; + +# The IFRService IOR file +# +$ifriorfile = PerlACE::LocalFile("ifr.ior"); +unlink $ifriorfile; + +# The client process +# +$CLIENT = new PerlACE::Process(PerlACE::LocalFile("testclient")); + +# Fire up the IFR Service +# +$IFR = new PerlACE::Process ("../../IFR_Service/IFR_Service", "-o $ifriorfile"); +$IFR->Spawn (); + +if (PerlACE::waitforfile_timed ($ifriorfile, 10) == -1) +{ + print STDERR "ERROR: cannot find IFR Service IOR file <$ifriorfile>\n"; + $IFR->Kill (); $IFR->TimedWait (1); + exit 1; +} + + +# Run the client, it should return 0 for success. +$CLIENT->Arguments("-ORBInitRef InterfaceRepository=file://$ifriorfile"); +if ($CLIENT->SpawnWaitKill (30) != 0) +{ + print STDERR "ERROR: test failed\n"; + $server = $IFR->TerminateWaitKill (5); + if ($server != 0) + { + print STDERR "ERROR: Closing IFR Service returned $server\n"; + $status = 1; + } + unlink $ifriorfile; + exit 1; +} + +# Clean up and return +# +$server = $IFR->TerminateWaitKill (5); +if ($server != 0) +{ + print STDERR "ERROR: Closing IFR Service returned $server\n"; + $status = 1; +} +unlink $ifriorfile; + +exit 0; diff --git a/TAO/orbsvcs/tests/Bug_1630_Regression/test.mpc b/TAO/orbsvcs/tests/Bug_1630_Regression/test.mpc new file mode 100644 index 00000000000..7db8c9d00e4 --- /dev/null +++ b/TAO/orbsvcs/tests/Bug_1630_Regression/test.mpc @@ -0,0 +1,11 @@ +project(Bug_1630_testclient ) : client { + exename = testclient + libs += TAO_IFR_Client + libpaths += $(TAO_ROOT)/tao/IFR_Client $(TAO_ROOT)/tao $(ACE_ROOT)/ace + + IDL_Files { + } + Source_Files { + testclient.cpp + } +}
\ No newline at end of file diff --git a/TAO/orbsvcs/tests/Bug_1630_Regression/testclient.cpp b/TAO/orbsvcs/tests/Bug_1630_Regression/testclient.cpp new file mode 100644 index 00000000000..fd02d290d1b --- /dev/null +++ b/TAO/orbsvcs/tests/Bug_1630_Regression/testclient.cpp @@ -0,0 +1,218 @@ +// +// $Id$ +// + +#include <tao/corba.h> +#include "IFR_Client/IFR_BasicC.h" + +int main( int argc, char* argv[] ) +{ + + ACE_TRY_NEW_ENV + { + int failed = 0 ; + + // Initialise ORB. + // + CORBA::ORB_var orb = CORBA::ORB_init( argc, argv ACE_ENV_ARG_PARAMETER) ; + ACE_TRY_CHECK; + + // Find the Interface Repository. + // + CORBA::Object_var ifr_obj = orb->resolve_initial_references( "InterfaceRepository" ACE_ENV_ARG_PARAMETER) ; + ACE_TRY_CHECK; + + CORBA::Repository_var ifr = CORBA::Repository::_narrow( ifr_obj.in() ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + if( CORBA::is_nil( ifr.in() ) ) + { + ACE_DEBUG((LM_DEBUG, "Nil IFR reference\n")); + return 1; + } + + // Add an interface to the repository. + // + CORBA::InterfaceDefSeq baseInterfaces(1) ; + baseInterfaces.length(0) ; + CORBA::InterfaceDef_var interface = + ifr->create_interface( "IDL:interface865:1.0", + "interface865", + "1.0", + baseInterfaces ACE_ENV_ARG_PARAMETER) ; + ACE_TRY_CHECK; + + // Add an operation to the interface. + // First get some useful things. + // + CORBA::PrimitiveDef_var voidPrimitive = + ifr->get_primitive( CORBA::pk_void ACE_ENV_ARG_PARAMETER) ; + ACE_TRY_CHECK; + CORBA::PrimitiveDef_var charPrimitive = + ifr->get_primitive( CORBA::pk_char ACE_ENV_ARG_PARAMETER) ; + ACE_TRY_CHECK; + CORBA::PrimitiveDef_var longPrimitive = + ifr->get_primitive( CORBA::pk_long ACE_ENV_ARG_PARAMETER) ; + ACE_TRY_CHECK; + CORBA::PrimitiveDef_var shortPrimitive = + ifr->get_primitive( CORBA::pk_short ACE_ENV_ARG_PARAMETER) ; + ACE_TRY_CHECK; + + // The operation has three parameters... + // + CORBA::ULong numParams = 3 ; + CORBA::ParDescriptionSeq parameters( numParams ) ; + parameters.length( numParams ) ; + + // ... which are: in char p1... + // + parameters[0].name = CORBA::string_dup("p1") ; + parameters[0].type_def = + CORBA::PrimitiveDef::_duplicate( charPrimitive.in() ) ; + parameters[0].type = charPrimitive->type() ; + parameters[0].mode = CORBA::PARAM_IN ; + + // ...out long p2... + // + parameters[1].name = CORBA::string_dup("p2") ; + parameters[1].type_def = + CORBA::PrimitiveDef::_duplicate( longPrimitive.in() ) ; + parameters[1].type = longPrimitive->type() ; + parameters[1].mode = CORBA::PARAM_OUT ; + + // ...and inout short p3 + // + parameters[2].name = CORBA::string_dup("p3") ; + parameters[2].type_def = + CORBA::PrimitiveDef::_duplicate( shortPrimitive.in() ) ; + parameters[2].type = shortPrimitive->type() ; + parameters[2].mode = CORBA::PARAM_INOUT ; + + // ...and no exceptions... + // + CORBA::ExceptionDefSeq exceptions( 1 ) ; + exceptions.length( 0 ) ; + + // ...and no context ids + // + CORBA::ContextIdSeq contextIds( 1 ) ; + contextIds.length( 0 ) ; + + // Create the operation, called "f". + // + CORBA::OperationDef_var operation = + interface->create_operation( "IDL:interface865/f:1.0", + "f", + "1.0", + voidPrimitive.in(), + CORBA::OP_NORMAL, + parameters, + exceptions, + contextIds ACE_ENV_ARG_PARAMETER) ; + ACE_TRY_CHECK; + + + + // Create operation list. + // + CORBA::NVList_var opList ; + + ACE_DEBUG((LM_DEBUG, "About to call create_operation_list\n")); + + orb->create_operation_list( operation.in(), opList.out() ACE_ENV_ARG_PARAMETER) ; + ACE_TRY_CHECK; + + ACE_DEBUG((LM_DEBUG, "Call to create_operation_list succeeded\n")); + + CORBA::ULong count = opList->count() ; + ACE_TRY_CHECK; + + if( count != numParams ) + { + ACE_DEBUG((LM_DEBUG, "Test failed - wrong number of elements n list\n")) ; + failed = 1 ; + } + + CORBA::NamedValue_ptr nv = opList->item( 0 ) ; + if( strcmp( nv->name(), "p1") != 0 ) + { + ACE_DEBUG((LM_DEBUG, "Test failed: param 1 wrong name\n")); + failed = 1 ; + }; + + if( ! nv->value()->type()->equal( CORBA::_tc_char ) ) + { + ACE_DEBUG((LM_DEBUG, "Test failed: param 1 wrong type\n")); + failed = 1 ; + }; + if( nv->flags() != CORBA::ARG_IN ) + { + ACE_DEBUG((LM_DEBUG, "Test failed: param 1 wrong mode\n")); + failed = 1 ; + }; + + nv = opList->item( 1 ) ; + if( strcmp( nv->name(), "p2") != 0 ) + { + ACE_DEBUG((LM_DEBUG, "Test failed: param 2 wrong name\n")); + failed = 1 ; + }; + if( ! nv->value()->type()->equal( CORBA::_tc_long ) ) + { + ACE_DEBUG((LM_DEBUG, "Test failed: param 2 wrong type\n")); + failed = 1 ; + }; + if( nv->flags() != CORBA::ARG_OUT ) + { + ACE_DEBUG((LM_DEBUG, "Test failed: param 2 wrong mode\n")); + failed = 1 ; + }; + + nv = opList->item( 2 ) ; + if( strcmp( nv->name(), "p3") != 0 ) + { + ACE_DEBUG((LM_DEBUG, "Test failed: param 3 wrong name\n")); + failed = 1 ; + }; + if( ! nv->value()->type()->equal( CORBA::_tc_short ) ) + { + ACE_DEBUG((LM_DEBUG, "Test failed: param 3 wrong type\n")); + failed = 1 ; + }; + if( nv->flags() != CORBA::ARG_INOUT ) + { + ACE_DEBUG((LM_DEBUG, "Test failed: param 3 wrong mode\n")); + failed = 1 ; + }; + + + // opList->free(); + //operation->destroy(); + + // Finally destroy the interface. + // + interface->destroy(ACE_ENV_SINGLE_ARG_PARAMETER) ; + + //orb->destroy(); + + if( failed == 1 ) + { + return 1 ; + } + } + ACE_CATCHANY + { + ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "Exception - test failed:\n"); + return 1; + } + ACE_CATCHALL + { + ACE_DEBUG((LM_DEBUG, "An unknown exception occured - test failed\n")); + return 1; + } + ACE_ENDTRY; + + ACE_CHECK_RETURN(1); + + return 0 ; +} diff --git a/TAO/tao/Acceptor_Registry.cpp b/TAO/tao/Acceptor_Registry.cpp index f8a35ff990f..03635885b6e 100644 --- a/TAO/tao/Acceptor_Registry.cpp +++ b/TAO/tao/Acceptor_Registry.cpp @@ -122,6 +122,14 @@ TAO_Acceptor_Registry::open (TAO_ORB_Core *orb_core, // protocol_factories is in the following form // IOP1://addr1,addr2,...,addrN/;IOP2://addr1,...addrM/;... TAO_EndpointSet endpoint_set = orb_core->orb_params ()->endpoints (); + + // Check to see if there is an additional endpoint value defined + // as an environment property. + ACE_CString env_endpoint = ACE_OS::getenv ("TAO_ORBENDPOINT"); + if (ACE_OS::strcmp (env_endpoint.c_str(), "") != 0) + { + endpoint_set.enqueue_tail (env_endpoint); + } if (endpoint_set.is_empty ()) { diff --git a/TAO/tao/CORBA_methods.h b/TAO/tao/CORBA_methods.h index a6ac2f6e7c5..df252c7cba5 100644 --- a/TAO/tao/CORBA_methods.h +++ b/TAO/tao/CORBA_methods.h @@ -53,6 +53,9 @@ namespace CORBA class TypeCode; typedef TypeCode *TypeCode_ptr; + class OperationDef; + typedef OperationDef *OperationDef_ptr; + /** * @name ORB Initialization * diff --git a/TAO/tao/DynamicAny/DynUnion_i.cpp b/TAO/tao/DynamicAny/DynUnion_i.cpp index 990c0b65030..6b7fab49b68 100644 --- a/TAO/tao/DynamicAny/DynUnion_i.cpp +++ b/TAO/tao/DynamicAny/DynUnion_i.cpp @@ -129,6 +129,14 @@ TAO_DynUnion_i::set_from_any (const CORBA::Any & any, DynamicAny::DynAnyFactory::InconsistentTypeCode )) { + // discriminator_type () does not work with aliased type codes, + // only on unions, so strip the alias out of the type code + // + CORBA::TypeCode_var tc = + TAO_DynAnyFactory::strip_alias (any.type () + ACE_ENV_ARG_PARAMETER); + ACE_CHECK; + // Get the CDR stream of the argument. ACE_Message_Block* mb = any._tao_get_cdr (); @@ -144,9 +152,7 @@ TAO_DynUnion_i::set_from_any (const CORBA::Any & any, TAO_InputCDR cdr (mb, any._tao_byte_order ()); - CORBA::TypeCode_var tc = any.type (); - - CORBA::TypeCode_var disc_tc = + CORBA::TypeCode_var disc_tc = tc->discriminator_type (ACE_ENV_SINGLE_ARG_PARAMETER); ACE_CHECK; @@ -779,37 +785,37 @@ TAO_DynUnion_i::to_any (ACE_ENV_SINGLE_ARG_DECL) ACE_ENV_ARG_PARAMETER); ACE_CHECK_RETURN (0); - // Add the member to the CDR stream. - - CORBA::TypeCode_var member_tc = - this->member_->type (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_CHECK_RETURN (0); - - CORBA::Any_var member_any = - this->member_->to_any (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_CHECK_RETURN (0); - - ACE_Message_Block *member_mb = member_any->_tao_get_cdr (); - - if (member_mb == 0) - { - ACE_NEW_RETURN (member_mb, - ACE_Message_Block, - 0); - TAO_OutputCDR out; - member_any->impl ()->marshal_value (out); - ACE_CDR::consolidate (member_mb, out.begin ()); - } - - TAO_InputCDR member_cdr (member_mb, - member_any->_tao_byte_order ()); - - (void) TAO_Marshal_Object::perform_append (member_tc.in (), - &member_cdr, - &out_cdr - ACE_ENV_ARG_PARAMETER); - ACE_CHECK_RETURN (0); - + // Add the member to the CDR stream unless it has no active member. + if (this->has_no_active_member () == 0) + { + CORBA::TypeCode_var member_tc = this->member_->type (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK_RETURN (0); + + CORBA::Any_var member_any = this->member_->to_any (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK_RETURN (0); + + ACE_Message_Block *member_mb = member_any->_tao_get_cdr (); + + if (member_mb == 0) + { + ACE_NEW_RETURN (member_mb, + ACE_Message_Block, + 0); + TAO_OutputCDR out; + member_any->impl ()->marshal_value (out); + ACE_CDR::consolidate (member_mb, out.begin ()); + } + + TAO_InputCDR member_cdr (member_mb, + member_any->_tao_byte_order ()); + + (void) TAO_Marshal_Object::perform_append (member_tc.in (), + &member_cdr, + &out_cdr + ACE_ENV_ARG_PARAMETER); + ACE_CHECK_RETURN (0); + } + // Make the Any. TAO_InputCDR in_cdr (out_cdr); diff --git a/TAO/tao/IFR_Client/IFR_Client_Adapter_Impl.cpp b/TAO/tao/IFR_Client/IFR_Client_Adapter_Impl.cpp index 7bbbdc5c792..4c4336104d0 100644 --- a/TAO/tao/IFR_Client/IFR_Client_Adapter_Impl.cpp +++ b/TAO/tao/IFR_Client/IFR_Client_Adapter_Impl.cpp @@ -5,6 +5,7 @@ #include "tao/ORB_Core.h" #include "tao/Invocation_Adapter.h" #include "tao/Stub.h" +#include "tao/NVList.h" ACE_RCSID (IFR_Client, IFR_Client_Adapter_Impl, @@ -139,6 +140,77 @@ TAO_IFR_Client_Adapter_Impl::get_interface_remote ( return _tao_retval.retn (); } +void +TAO_IFR_Client_Adapter_Impl::create_operation_list ( + CORBA::ORB_ptr orb, + CORBA::OperationDef_ptr opDef, + CORBA::NVList_ptr& result + ACE_ENV_ARG_DECL + ) +{ + // Create an empty NVList. + // + orb->create_list (0, result); + + // Get the parameters (if any) from the OperationDef, and for each + // parameter add a corresponding entry to the result. + // + CORBA::ParDescriptionSeq* params = opDef->params(); + CORBA::ULong paramCount = params->length(); + if (paramCount > 0) + { + for (CORBA::ULong i = 0; i < paramCount; i++) + { + CORBA::ParameterDescription* param = &((*params)[i]); + + // Get name. + // + char* name = CORBA::string_dup (param->name); + + // Create an any using the parameter's TypeCode. + // + CORBA::Any* value; + ACE_NEW_THROW_EX (value, + CORBA::Any (), + CORBA::NO_MEMORY ( + CORBA::SystemException::_tao_minor_code ( + TAO_DEFAULT_MINOR_CODE, + ENOMEM), + CORBA::COMPLETED_NO)); + ACE_CHECK; + + value->_tao_set_typecode ((param->type).in()); + + // Get mode. + // + CORBA::Flags flags; + switch (param->mode) + { + case CORBA::PARAM_IN: + flags = CORBA::ARG_IN; + break; + case CORBA::PARAM_OUT: + flags = CORBA::ARG_OUT; + break; + case CORBA::PARAM_INOUT: + flags = CORBA::ARG_INOUT; + break; + default: + // Shouldn't happen. + // + ACE_THROW (CORBA::INTERNAL()); + break; + } + + // Add an argument to the result list. The list takes ownership + // of name and value. + // + result->add_value_consume (name, value, flags); + } + } + +} + // ********************************************************************* // Initialization and registration of dynamic service object. diff --git a/TAO/tao/IFR_Client/IFR_Client_Adapter_Impl.h b/TAO/tao/IFR_Client/IFR_Client_Adapter_Impl.h index 0b2c5ee841b..9265afab785 100644 --- a/TAO/tao/IFR_Client/IFR_Client_Adapter_Impl.h +++ b/TAO/tao/IFR_Client/IFR_Client_Adapter_Impl.h @@ -65,6 +65,13 @@ public: CORBA::Object_ptr target ACE_ENV_ARG_DECL ); + + virtual void create_operation_list ( + CORBA::ORB_ptr orb, + CORBA::OperationDef_ptr, + CORBA::NVList_ptr& + ACE_ENV_ARG_DECL_WITH_DEFAULTS + ); // Used to force the initialization of the ORB code. static int Initializer (void); diff --git a/TAO/tao/IFR_Client_Adapter.h b/TAO/tao/IFR_Client_Adapter.h index 6b8e1d0d161..ed827bc7493 100644 --- a/TAO/tao/IFR_Client_Adapter.h +++ b/TAO/tao/IFR_Client_Adapter.h @@ -41,6 +41,12 @@ namespace CORBA class Object; typedef Object *Object_ptr; + class OperationDef; + typedef OperationDef *OperationDef_ptr; + + class NVList; + typedef NVList *NVList_ptr; + class Environment; }; @@ -82,6 +88,13 @@ public: CORBA::Object_ptr target ACE_ENV_ARG_DECL ) = 0; + + virtual void create_operation_list ( + CORBA::ORB_ptr orb, + CORBA::OperationDef_ptr, + CORBA::NVList_ptr& + ACE_ENV_ARG_DECL_WITH_DEFAULTS + ) = 0; }; #include /**/ "ace/post.h" diff --git a/TAO/tao/ORB.cpp b/TAO/tao/ORB.cpp index 6a119ce8fa5..e138ca7e274 100644 --- a/TAO/tao/ORB.cpp +++ b/TAO/tao/ORB.cpp @@ -22,6 +22,7 @@ ACE_RCSID (tao, #include "TAO_Singleton_Manager.h" #include "Policy_Manager.h" #include "Valuetype_Adapter.h" +#include "IFR_Client_Adapter.h" #include "CodecFactory_ORBInitializer.h" #include "TypeCodeFactory_Adapter.h" #include "debug.h" @@ -325,6 +326,29 @@ CORBA::ORB::create_exception_list (CORBA::ExceptionList_ptr &list } void +CORBA::ORB::create_operation_list( CORBA::OperationDef_ptr opDef, + CORBA::NVList_ptr& result + ACE_ENV_ARG_DECL ) +{ + TAO_IFR_Client_Adapter *adapter = + ACE_Dynamic_Service<TAO_IFR_Client_Adapter>::instance ( + TAO_ORB_Core::ifr_client_adapter_name () + ); + + if (adapter == 0) + { + ACE_THROW (CORBA::NO_IMPLEMENT ( + CORBA::SystemException::_tao_minor_code ( + TAO_DEFAULT_MINOR_CODE, + ENOTSUP), + CORBA::COMPLETED_NO)); + } + + adapter->create_operation_list(this, opDef, result ACE_ENV_ARG_PARAMETER); +} + + +void CORBA::ORB::create_environment (CORBA::Environment_ptr &environment ACE_ENV_ARG_DECL) { @@ -993,14 +1017,6 @@ CORBA::Object_ptr CORBA::ORB::resolve_service (TAO_MCAST_SERVICEID mcast_service_id ACE_ENV_ARG_DECL) { - const char *env_service_ior [] = - { - "NameServiceIOR", - "TradingServiceIOR", - "ImplRepoServiceIOR", - "InterfaceRepoServiceIOR" - }; - const char * env_service_port [] = { "NameServicePort", @@ -1008,7 +1024,7 @@ CORBA::ORB::resolve_service (TAO_MCAST_SERVICEID mcast_service_id "ImplRepoServicePort", "InterfaceRepoServicePort" }; - + u_short default_service_port [] = { TAO_DEFAULT_NAME_SERVER_REQUEST_PORT, @@ -1016,83 +1032,68 @@ CORBA::ORB::resolve_service (TAO_MCAST_SERVICEID mcast_service_id TAO_DEFAULT_IMPLREPO_SERVER_REQUEST_PORT, TAO_DEFAULT_INTERFACEREPO_SERVER_REQUEST_PORT }; - - CORBA::Object_var return_value = CORBA::Object::_nil (); - - // By now, the table filled in with -ORBInitRef arguments has been - // checked. We only get here if the table didn't contain an initial - // reference for the requested Service. - - // Check to see if the user has an environment variable. - ACE_CString service_ior = ACE_OS::getenv (env_service_ior[mcast_service_id]); - - if (ACE_OS::strcmp (service_ior.c_str (), "") != 0) - { - return_value = - this->string_to_object (service_ior.c_str () ACE_ENV_ARG_PARAMETER); - ACE_CHECK_RETURN (CORBA::Object::_nil ()); - - // Return ior. - return return_value._retn (); - } - else - { - // First, determine if the port was supplied on the command line - u_short port = - this->orb_core_->orb_params ()->service_port (mcast_service_id); - - if (port == 0) - { - // Look for the port among our environment variables. - const char *port_number = - ACE_OS::getenv (env_service_port[mcast_service_id]); - - if (port_number != 0) - port = (u_short) ACE_OS::atoi (port_number); - else - port = default_service_port[mcast_service_id]; - } - - // Set the port value in ORB_Params: modify the default mcast - // value. - const char prefix[] = "mcast://:"; - - char port_char[256]; - - ACE_OS::itoa (port, - port_char, - 10); - - CORBA::String_var port_ptr = - CORBA::string_alloc (ACE_static_cast (CORBA::ULong, - ACE_OS::strlen ((const char *) port_char))); - - port_ptr = (const char *) port_char; - - CORBA::String_var def_init_ref = - CORBA::string_alloc (sizeof (prefix) + - ACE_static_cast (CORBA::ULong, - ACE_OS::strlen (port_ptr.in ())) + - 2); - - ACE_OS::strcpy (def_init_ref.inout (), prefix); - ACE_OS::strcat (def_init_ref.inout (), port_ptr.in ()); - ACE_OS::strcat (def_init_ref.inout (), "::"); - - CORBA::String_var default_init_ref = - this->orb_core_->orb_params ()->default_init_ref (); - - static const char mcast_prefix[] = "mcast://:::"; - - if ((ACE_OS::strncmp (default_init_ref.in (), - mcast_prefix, - sizeof mcast_prefix - 1) == 0)) - { - this->orb_core_->orb_params ()->default_init_ref (def_init_ref.in ()); - } - - return CORBA::Object::_nil (); - } + + CORBA::Object_var return_value = CORBA::Object::_nil (); + + // By now, the table filled in with -ORBInitRef arguments has been + // checked. We only get here if the table didn't contain an initial + // reference for the requested Service. + + // First, determine if the port was supplied on the command line + u_short port = + this->orb_core_->orb_params ()->service_port (mcast_service_id); + + if (port == 0) + { + // Look for the port among our environment variables. + const char *port_number = + ACE_OS::getenv (env_service_port[mcast_service_id]); + + if (port_number != 0) + port = (u_short) ACE_OS::atoi (port_number); + else + port = default_service_port[mcast_service_id]; + } + + // Set the port value in ORB_Params: modify the default mcast + // value. + const char prefix[] = "mcast://:"; + + char port_char[256]; + + ACE_OS::itoa (port, + port_char, + 10); + + CORBA::String_var port_ptr = + CORBA::string_alloc (ACE_static_cast (CORBA::ULong, + ACE_OS::strlen ((const char *) port_char))); + + port_ptr = (const char *) port_char; + + CORBA::String_var def_init_ref = + CORBA::string_alloc (sizeof (prefix) + + ACE_static_cast (CORBA::ULong, + ACE_OS::strlen (port_ptr.in ())) + + 2); + + ACE_OS::strcpy (def_init_ref.inout (), prefix); + ACE_OS::strcat (def_init_ref.inout (), port_ptr.in ()); + ACE_OS::strcat (def_init_ref.inout (), "::"); + + CORBA::String_var default_init_ref = + this->orb_core_->orb_params ()->default_init_ref (); + + static const char mcast_prefix[] = "mcast://:::"; + + if ((ACE_OS::strncmp (default_init_ref.in (), + mcast_prefix, + sizeof mcast_prefix - 1) == 0)) + { + this->orb_core_->orb_params ()->default_init_ref (def_init_ref.in ()); + } + + return CORBA::Object::_nil (); } CORBA::Object_ptr @@ -1161,6 +1162,24 @@ CORBA::ORB::resolve_initial_references (const char *name, if (this->orb_core_->init_ref_map ()->find (object_id, ior) == 0) return this->string_to_object (ior.c_str () ACE_ENV_ARG_PARAMETER); + + // Look for an environment variable called "<name>IOR". + // + CORBA::String_var ior_env_var_name = + CORBA::string_alloc( ACE_OS::strlen( name ) + 3 ) ; + ACE_OS::strcpy( ior_env_var_name, name ) ; + ACE_OS::strcat( ior_env_var_name, "IOR" ) ; + + ACE_CString service_ior = ACE_OS::getenv( ior_env_var_name ) ; + + if( ACE_OS::strcmp( service_ior.c_str (), "" ) != 0 ) + { + result = + this->string_to_object( service_ior.c_str() ACE_ENV_ARG_PARAMETER ) ; + ACE_CHECK_RETURN( CORBA_Object::_nil() ) ; + + return result._retn() ; + } // May be trying the explicitly specified services and the well // known services should be tried first before falling on to default diff --git a/TAO/tao/ORB.h b/TAO/tao/ORB.h index b1c1b832936..8e586968e86 100644 --- a/TAO/tao/ORB.h +++ b/TAO/tao/ORB.h @@ -247,6 +247,10 @@ namespace CORBA void create_list (CORBA::Long count, CORBA::NVList_ptr &new_list ACE_ENV_ARG_DECL_WITH_DEFAULTS); + + void create_operation_list(CORBA::OperationDef_ptr, + CORBA::NVList_ptr& + ACE_ENV_ARG_DECL_WITH_DEFAULTS); void create_named_value (CORBA::NamedValue_ptr &nmval ACE_ENV_ARG_DECL_WITH_DEFAULTS); diff --git a/TAO/tao/Object.h b/TAO/tao/Object.h index 9a91bc2148d..aaf1b5771af 100644 --- a/TAO/tao/Object.h +++ b/TAO/tao/Object.h @@ -57,7 +57,7 @@ namespace CORBA class ImplementationDef; typedef ImplementationDef *ImplementationDef_ptr; - + class Context; typedef Context *Context_ptr; diff --git a/TAO/tao/Valuetype/ValueBase.cpp b/TAO/tao/Valuetype/ValueBase.cpp index 705b82bb450..a1fdaa5b9c5 100644 --- a/TAO/tao/Valuetype/ValueBase.cpp +++ b/TAO/tao/Valuetype/ValueBase.cpp @@ -216,7 +216,7 @@ CORBA::Boolean CORBA::ValueBase::_tao_unmarshal_pre (TAO_InputCDR &strm, CORBA::ValueFactory &factory, CORBA::ValueBase *&valuetype, - const char * const /* repo_id */) + const char * const repo_id) { // %! dont leak on error case ! // %! postconditions CORBA::Boolean retval = 1; @@ -264,14 +264,6 @@ CORBA::ValueBase::_tao_unmarshal_pre (TAO_InputCDR &strm, // from the <value-tag>, then use the repository id parameter // (it _must_ be right). - CORBA::String_var repo_id_stream; - - // It would be more efficient not to copy the string %!) - if (strm.read_string (repo_id_stream.inout ()) == 0) - { - return 0; - } - TAO_ORB_Core *orb_core = strm.orb_core (); if (orb_core == 0) @@ -286,7 +278,22 @@ CORBA::ValueBase::_tao_unmarshal_pre (TAO_InputCDR &strm, } } - factory = orb_core->orb ()->lookup_value_factory (repo_id_stream.in ()); + if (TAO_OBV_GIOP_Flags::has_no_type_info (value_tag)) + { + factory = orb_core->orb ()->lookup_value_factory (repo_id); + } + else + { + CORBA::String_var repo_id_stream; + + // It would be more efficient not to copy the string %!) + if (strm.read_string (repo_id_stream.inout ()) == 0) + { + return 0; + } + + factory = orb_core->orb ()->lookup_value_factory (repo_id_stream.in ()); + } if (factory == 0) // %! except.! { diff --git a/TAO/tests/Bug_1330_Regression/Bug_1330_Client.dsp b/TAO/tests/Bug_1330_Regression/Bug_1330_Client.dsp new file mode 100644 index 00000000000..96bfaefb52e --- /dev/null +++ b/TAO/tests/Bug_1330_Regression/Bug_1330_Client.dsp @@ -0,0 +1,180 @@ +# Microsoft Developer Studio Project File - Name="Bug 1330 Client EXE" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=Bug 1330 Client EXE - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE run the tool that generated this project file and specify the
+!MESSAGE nmake output type. You can then use the following command:
+!MESSAGE
+!MESSAGE NMAKE /f "Bug_1330_Client.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "Bug_1330_Client.mak" CFG="Bug 1330 Client EXE - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "Bug 1330 Client EXE - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "Bug 1330 Client EXE - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "Bug 1330 Client EXE - Win32 Release"
+
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Target_Dir ""
+# ADD CPP /nologo /W3 /GX /O2 /MD /GR /I "$(TAO_ROOT)" /I "$(TAO_ROOT)\tao" /I "..\..\.." /D NDEBUG=1 /D WIN32=1 /D _CONSOLE=1 /FD /c
+# SUBTRACT CPP /YX
+# ADD RSC /l 0x409 /d NDEBUG=1 /i "$(TAO_ROOT)" /i "$(TAO_ROOT)\tao" /i "..\..\.."
+BSC32=bscmake.exe
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD LINK32 advapi32.lib user32.lib /INCREMENTAL:NO TAO.lib ACE.lib /libpath:"$(TAO_ROOT)\tao" /libpath:"..\..\..\ace" /nologo /version:1.3.1 /subsystem:console /machine:I386 /out:"client.exe"
+
+!ELSEIF "$(CFG)" == "Bug 1330 Client EXE - Win32 Debug"
+
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir ""
+# PROP Intermediate_Dir "Debug"
+# PROP Target_Dir ""
+# ADD CPP /nologo /W3 /Gm /GX /Zi /Od /MDd /GR /Gy /I "$(TAO_ROOT)" /I "$(TAO_ROOT)\tao" /I "..\..\.." /D _DEBUG=1 /D WIN32=1 /D _CONSOLE=1 /FD /c
+# SUBTRACT CPP /YX
+# ADD RSC /l 0x409 /d _DEBUG=1 /i "$(TAO_ROOT)" /i "$(TAO_ROOT)\tao" /i "..\..\.."
+BSC32=bscmake.exe
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD LINK32 advapi32.lib user32.lib /INCREMENTAL:NO TAOd.lib ACEd.lib /libpath:"$(TAO_ROOT)\tao" /libpath:"..\..\..\ace" /nologo /version:1.3.1 /subsystem:console /debug /machine:I386 /out:"client.exe"
+
+!ENDIF
+
+# Begin Target
+
+# Name "Bug 1330 Client EXE - Win32 Release"
+# Name "Bug 1330 Client EXE - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;cxx;c"
+# Begin Source File
+
+SOURCE=.\client.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\TestC.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hh"
+# Begin Source File
+
+SOURCE=.\TestC.h
+# End Source File
+# End Group
+# Begin Group "Inline Files"
+
+# PROP Default_Filter "i;inl"
+# Begin Source File
+
+SOURCE=.\TestC.i
+# End Source File
+# End Group
+# Begin Group "Documentation"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\README
+# End Source File
+# End Group
+# Begin Group "IDL Files"
+
+# PROP Default_Filter "idl"
+# Begin Source File
+
+SOURCE=.\Test.idl
+
+!IF "$(CFG)" == "Bug 1330 Client EXE - Win32 Release"
+
+# PROP Ignore_Default_Tool 1
+# Begin Custom Build - Invoking TAO_IDL Compiler on $(InputPath)
+InputPath=.\Test.idl
+InputName=Test
+InputDir=.
+OutDir=.
+
+BuildCmds= \
+ ..\..\..\bin\tao_idl -o $(OutDir) -Ge 1 -Sc $(InputPath)
+
+"$(OutDir)\$(InputName)C.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(OutDir)\$(InputName)C.i" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(OutDir)\$(InputName)C.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(OutDir)\$(InputName)S.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(OutDir)\$(InputName)S.i" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(OutDir)\$(InputName)S.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+# End Custom Build
+
+!ELSEIF "$(CFG)" == "Bug 1330 Client EXE - Win32 Debug"
+
+# PROP Ignore_Default_Tool 1
+# Begin Custom Build - Invoking TAO_IDL Compiler on $(InputPath)
+InputPath=.\Test.idl
+InputName=Test
+InputDir=.
+OutDir=.
+
+BuildCmds= \
+ ..\..\..\bin\tao_idl -o $(OutDir) -Ge 1 -Sc $(InputPath)
+
+"$(OutDir)\$(InputName)C.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(OutDir)\$(InputName)C.i" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(OutDir)\$(InputName)C.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(OutDir)\$(InputName)S.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(OutDir)\$(InputName)S.i" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(OutDir)\$(InputName)S.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+# End Custom Build
+
+!ENDIF
+
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/TAO/tests/Bug_1330_Regression/Bug_1330_Regression.mpc b/TAO/tests/Bug_1330_Regression/Bug_1330_Regression.mpc new file mode 100644 index 00000000000..683bb522e1c --- /dev/null +++ b/TAO/tests/Bug_1330_Regression/Bug_1330_Regression.mpc @@ -0,0 +1,15 @@ +project(Bug 1330 Server): server { + libs += TAO_IORTable + libpaths += $(TAO_ROOT)/tao/IORTable + Source_Files { + Test_i.cpp + server.cpp + } +} + +project(Bug 1330 Client): client { + Source_Files { + TestC.cpp + client.cpp + } +}
\ No newline at end of file diff --git a/TAO/tests/Bug_1330_Regression/Bug_1330_Server.dsp b/TAO/tests/Bug_1330_Regression/Bug_1330_Server.dsp new file mode 100644 index 00000000000..f2f7450ff17 --- /dev/null +++ b/TAO/tests/Bug_1330_Regression/Bug_1330_Server.dsp @@ -0,0 +1,200 @@ +# Microsoft Developer Studio Project File - Name="Bug 1330 Server EXE" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=Bug 1330 Server EXE - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE run the tool that generated this project file and specify the
+!MESSAGE nmake output type. You can then use the following command:
+!MESSAGE
+!MESSAGE NMAKE /f "Bug_1330_Server.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "Bug_1330_Server.mak" CFG="Bug 1330 Server EXE - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "Bug 1330 Server EXE - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "Bug 1330 Server EXE - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "Bug 1330 Server EXE - Win32 Release"
+
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Target_Dir ""
+# ADD CPP /nologo /W3 /GX /O2 /MD /GR /I "$(TAO_ROOT)" /I "$(TAO_ROOT)\tao" /I "..\..\.." /D NDEBUG=1 /D WIN32=1 /D _CONSOLE=1 /FD /c
+# SUBTRACT CPP /YX
+# ADD RSC /l 0x409 /d NDEBUG=1 /i "$(TAO_ROOT)" /i "$(TAO_ROOT)\tao" /i "..\..\.."
+BSC32=bscmake.exe
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD LINK32 advapi32.lib user32.lib /INCREMENTAL:NO TAO_IORTable.lib TAO_PortableServer.lib TAO.lib ACE.lib /libpath:"$(TAO_ROOT)\tao\IORTable" /libpath:"$(TAO_ROOT)\tao\PortableServer" /libpath:"$(TAO_ROOT)\tao" /libpath:"..\..\..\ace" /nologo /version:1.3.1 /subsystem:console /machine:I386 /out:"server.exe"
+
+!ELSEIF "$(CFG)" == "Bug 1330 Server EXE - Win32 Debug"
+
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir ""
+# PROP Intermediate_Dir "Debug"
+# PROP Target_Dir ""
+# ADD CPP /nologo /W3 /Gm /GX /Zi /Od /MDd /GR /Gy /I "$(TAO_ROOT)" /I "$(TAO_ROOT)\tao" /I "..\..\.." /D _DEBUG=1 /D WIN32=1 /D _CONSOLE=1 /FD /c
+# SUBTRACT CPP /YX
+# ADD RSC /l 0x409 /d _DEBUG=1 /i "$(TAO_ROOT)" /i "$(TAO_ROOT)\tao" /i "..\..\.."
+BSC32=bscmake.exe
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD LINK32 advapi32.lib user32.lib /INCREMENTAL:NO TAO_IORTabled.lib TAO_PortableServerd.lib TAOd.lib ACEd.lib /libpath:"$(TAO_ROOT)\tao\IORTable" /libpath:"$(TAO_ROOT)\tao\PortableServer" /libpath:"$(TAO_ROOT)\tao" /libpath:"..\..\..\ace" /nologo /version:1.3.1 /subsystem:console /debug /machine:I386 /out:"server.exe"
+
+!ENDIF
+
+# Begin Target
+
+# Name "Bug 1330 Server EXE - Win32 Release"
+# Name "Bug 1330 Server EXE - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;cxx;c"
+# Begin Source File
+
+SOURCE=.\server.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\Test_i.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\TestC.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\TestS.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hh"
+# Begin Source File
+
+SOURCE=.\Test_i.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\TestC.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\TestS.h
+# End Source File
+# End Group
+# Begin Group "Inline Files"
+
+# PROP Default_Filter "i;inl"
+# Begin Source File
+
+SOURCE=.\TestC.i
+# End Source File
+# Begin Source File
+
+SOURCE=.\TestS.i
+# End Source File
+# End Group
+# Begin Group "Documentation"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\README
+# End Source File
+# End Group
+# Begin Group "IDL Files"
+
+# PROP Default_Filter "idl"
+# Begin Source File
+
+SOURCE=.\Test.idl
+
+!IF "$(CFG)" == "Bug 1330 Server EXE - Win32 Release"
+
+# PROP Ignore_Default_Tool 1
+# Begin Custom Build - Invoking TAO_IDL Compiler on $(InputPath)
+InputPath=.\Test.idl
+InputName=Test
+InputDir=.
+OutDir=.
+
+BuildCmds= \
+ ..\..\..\bin\tao_idl -o $(OutDir) -Ge 1 -Sc $(InputPath)
+
+"$(OutDir)\$(InputName)C.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(OutDir)\$(InputName)C.i" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(OutDir)\$(InputName)C.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(OutDir)\$(InputName)S.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(OutDir)\$(InputName)S.i" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(OutDir)\$(InputName)S.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+# End Custom Build
+
+!ELSEIF "$(CFG)" == "Bug 1330 Server EXE - Win32 Debug"
+
+# PROP Ignore_Default_Tool 1
+# Begin Custom Build - Invoking TAO_IDL Compiler on $(InputPath)
+InputPath=.\Test.idl
+InputName=Test
+InputDir=.
+OutDir=.
+
+BuildCmds= \
+ ..\..\..\bin\tao_idl -o $(OutDir) -Ge 1 -Sc $(InputPath)
+
+"$(OutDir)\$(InputName)C.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(OutDir)\$(InputName)C.i" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(OutDir)\$(InputName)C.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(OutDir)\$(InputName)S.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(OutDir)\$(InputName)S.i" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(OutDir)\$(InputName)S.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+# End Custom Build
+
+!ENDIF
+
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/TAO/tests/Bug_1330_Regression/Makefile b/TAO/tests/Bug_1330_Regression/Makefile new file mode 100644 index 00000000000..422514319c0 --- /dev/null +++ b/TAO/tests/Bug_1330_Regression/Makefile @@ -0,0 +1,21 @@ +# $Id$ + +#---------------------------------------------------------------------------- +# GNU Workspace +#---------------------------------------------------------------------------- + +include $(ACE_ROOT)/include/makeinclude/macros.GNU +TARGETS_NESTED := $(TARGETS_NESTED:.nested=) +MFILES = \ + Makefile.Bug_1330_Server \ + Makefile.Bug_1330_Client + +$(TARGETS_NESTED): +ifneq (Windows,$(findstring Windows,$(OS))) + @for file in $(MFILES); do \ + $(MAKE) -f `basename $$file` -C `dirname $$file` $(@); \ + done +else + -@cmd /c "$(MAKE) -f Makefile.Bug_1330_Server -C . $(@)" + -@cmd /c "$(MAKE) -f Makefile.Bug_1330_Client -C . $(@)" +endif diff --git a/TAO/tests/Bug_1330_Regression/Makefile.Bug_1330_Client b/TAO/tests/Bug_1330_Regression/Makefile.Bug_1330_Client new file mode 100644 index 00000000000..a51e772c6b2 --- /dev/null +++ b/TAO/tests/Bug_1330_Regression/Makefile.Bug_1330_Client @@ -0,0 +1,71 @@ +#---------------------------------------------------------------------------- +# GNU Makefile +#---------------------------------------------------------------------------- +MAKEFILE = Makefile.Bug_1330_Client +DEPENDENCY_FILE = .depend.Makefile.Bug_1330_Client +BIN_UNCHECKED = client + +ifndef TAO_ROOT + TAO_ROOT = $(ACE_ROOT)/TAO +endif + +IDL_FILES = Test +IDL_SRC = $(foreach ext, C.cpp S.cpp, $(foreach file, $(IDL_FILES), $(file)$(ext))) + + + +FILES = \ + TestC \ + client + +#---------------------------------------------------------------------------- +# Include macros and targets +#---------------------------------------------------------------------------- +include $(ACE_ROOT)/include/makeinclude/wrapper_macros.GNU +include $(TAO_ROOT)/rules.tao.GNU + +BIN = $(BIN_UNCHECKED) + +OBJS = $(addsuffix .o, $(notdir $(FILES))) +SRC = $(addsuffix .cpp, $(FILES)) +ACELIB = -lACE + +include $(ACE_ROOT)/include/makeinclude/macros.GNU +include $(ACE_ROOT)/include/makeinclude/rules.common.GNU +include $(ACE_ROOT)/include/makeinclude/rules.nonested.GNU +include $(ACE_ROOT)/include/makeinclude/rules.local.GNU +include $(TAO_ROOT)/taoconfig.mk + +CPPFLAGS += -I$(TAO_ROOT) -I$(TAO_ROOT)/tao -I../../.. +ifeq ($(static_libs),1) +ifneq ($(LIB),) +CPPFLAGS += -DTAO_AS_STATIC_LIBS -DACE_AS_STATIC_LIBS +endif +endif + + +LDFLAGS += -L$(TAO_ROOT)/tao -L../../../ace +TAO_IDLFLAGS += -Ge 1 -Sc + +LDLIBS = -lTAO + +#---------------------------------------------------------------------------- +# Local targets +#---------------------------------------------------------------------------- + +ADDITIONAL_IDL_TARGETS = + +# IDL File Directory: . + +idl_stubs: $(ADDITIONAL_IDL_TARGETS) + +all: idl_stubs + +.PRECIOUS: $(foreach ext, $(IDL_EXT), $(foreach file, $(IDL_FILES), $(file)$(ext))) + +$(BIN): $(addprefix $(VDIR), $(OBJS)) + $(LINK.cc) $(LDFLAGS) $(CC_OUTPUT_FLAG) $@ $^ $(VLDLIBS) $(POSTLINK) + +realclean: clean + -$(RM) $(foreach ext, $(IDL_EXT), $(foreach file, $(IDL_FILES), $(file)$(ext))) + diff --git a/TAO/tests/Bug_1330_Regression/Makefile.Bug_1330_Server b/TAO/tests/Bug_1330_Regression/Makefile.Bug_1330_Server new file mode 100644 index 00000000000..9456da46958 --- /dev/null +++ b/TAO/tests/Bug_1330_Regression/Makefile.Bug_1330_Server @@ -0,0 +1,73 @@ +#---------------------------------------------------------------------------- +# GNU Makefile +#---------------------------------------------------------------------------- +MAKEFILE = Makefile.Bug_1330_Server +DEPENDENCY_FILE = .depend.Makefile.Bug_1330_Server +BIN_UNCHECKED = server + +ifndef TAO_ROOT + TAO_ROOT = $(ACE_ROOT)/TAO +endif + +IDL_FILES = Test +IDL_SRC = $(foreach ext, C.cpp S.cpp, $(foreach file, $(IDL_FILES), $(file)$(ext))) + + + +FILES = \ + TestC \ + TestS \ + Test_i \ + server + +#---------------------------------------------------------------------------- +# Include macros and targets +#---------------------------------------------------------------------------- +include $(ACE_ROOT)/include/makeinclude/wrapper_macros.GNU +include $(TAO_ROOT)/rules.tao.GNU + +BIN = $(BIN_UNCHECKED) + +OBJS = $(addsuffix .o, $(notdir $(FILES))) +SRC = $(addsuffix .cpp, $(FILES)) +ACELIB = -lACE + +include $(ACE_ROOT)/include/makeinclude/macros.GNU +include $(ACE_ROOT)/include/makeinclude/rules.common.GNU +include $(ACE_ROOT)/include/makeinclude/rules.nonested.GNU +include $(ACE_ROOT)/include/makeinclude/rules.local.GNU +include $(TAO_ROOT)/taoconfig.mk + +CPPFLAGS += -I$(TAO_ROOT) -I$(TAO_ROOT)/tao -I../../.. +ifeq ($(static_libs),1) +ifneq ($(LIB),) +CPPFLAGS += -DTAO_AS_STATIC_LIBS -DACE_AS_STATIC_LIBS +endif +endif + + +LDFLAGS += -L$(TAO_ROOT)/tao/IORTable -L$(TAO_ROOT)/tao/PortableServer -L$(TAO_ROOT)/tao -L../../../ace +TAO_IDLFLAGS += -Ge 1 -Sc + +LDLIBS = -lTAO_IORTable -lTAO_PortableServer -lTAO + +#---------------------------------------------------------------------------- +# Local targets +#---------------------------------------------------------------------------- + +ADDITIONAL_IDL_TARGETS = + +# IDL File Directory: . + +idl_stubs: $(ADDITIONAL_IDL_TARGETS) + +all: idl_stubs + +.PRECIOUS: $(foreach ext, $(IDL_EXT), $(foreach file, $(IDL_FILES), $(file)$(ext))) + +$(BIN): $(addprefix $(VDIR), $(OBJS)) + $(LINK.cc) $(LDFLAGS) $(CC_OUTPUT_FLAG) $@ $^ $(VLDLIBS) $(POSTLINK) + +realclean: clean + -$(RM) $(foreach ext, $(IDL_EXT), $(foreach file, $(IDL_FILES), $(file)$(ext))) + diff --git a/TAO/tests/Bug_1330_Regression/README b/TAO/tests/Bug_1330_Regression/README new file mode 100644 index 00000000000..d1f531018e3 --- /dev/null +++ b/TAO/tests/Bug_1330_Regression/README @@ -0,0 +1,3 @@ +This test contains regression tests for fixes to bugs #1394 and #1395. + +See the bugzilla records for these bugs for details.
\ No newline at end of file diff --git a/TAO/tests/Bug_1330_Regression/Test.idl b/TAO/tests/Bug_1330_Regression/Test.idl new file mode 100644 index 00000000000..cf161d304ee --- /dev/null +++ b/TAO/tests/Bug_1330_Regression/Test.idl @@ -0,0 +1,8 @@ +// +// $Id$ +// + +interface Test +{ + void test_method(); +}; diff --git a/TAO/tests/Bug_1330_Regression/Test_i.cpp b/TAO/tests/Bug_1330_Regression/Test_i.cpp new file mode 100644 index 00000000000..c84e9f04dc2 --- /dev/null +++ b/TAO/tests/Bug_1330_Regression/Test_i.cpp @@ -0,0 +1,21 @@ +// +// $Id$ +// +#include "Test_i.h" + +Test_i::Test_i() +{ + // Noop +} + +Test_i::~Test_i() +{ + // Noop +} + +void +Test_i::test_method (ACE_ENV_SINGLE_ARG_DECL) + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + // Noop +} diff --git a/TAO/tests/Bug_1330_Regression/Test_i.h b/TAO/tests/Bug_1330_Regression/Test_i.h new file mode 100644 index 00000000000..acaff8a29b1 --- /dev/null +++ b/TAO/tests/Bug_1330_Regression/Test_i.h @@ -0,0 +1,26 @@ +// +// $Id$ +// +// -*- C++ -*- + +#if !defined BUG_1330_REGRESSION_TEST_I_H + #define BUG_1330_REGRESSION_TEST_I_H + +#include "TestS.h" + +class Test_i: public POA_Test +{ +public: + /// Constructor + Test_i (void); + + /// Destructor + ~Test_i (void); + + /// A method + void test_method(ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS) + ACE_THROW_SPEC ((CORBA::SystemException)); + +}; + +#endif /* ! BUG_1330_REGRESSION_TEST_I_H */ diff --git a/TAO/tests/Bug_1330_Regression/client.cpp b/TAO/tests/Bug_1330_Regression/client.cpp new file mode 100644 index 00000000000..f317731aeae --- /dev/null +++ b/TAO/tests/Bug_1330_Regression/client.cpp @@ -0,0 +1,83 @@ +// +// $Id$ +// +#include "TestC.h" +#include "ace/Get_Opt.h" + +const char *ior = "corbaloc:iiop:localhost:12345/Name\\2dwith\\2dhyphens"; +int shutdown_server = 0; + +int +parse_args (int argc, char *argv[]) +{ + ACE_Get_Opt get_opts (argc, argv, "k:"); + int c; + + while ((c = get_opts ()) != -1) + switch (c) + { + case 'k': + ior = get_opts.opt_arg (); + break; + case 's': + shutdown_server = 1; + break; + case '?': + default: + ACE_ERROR_RETURN ((LM_ERROR, + "usage: %s " + "-k <ior> " + "\n", + argv [0]), + -1); + } + // Indicates sucessful parsing of the command line + return 0; +} + +int +main (int argc, char *argv[]) +{ + int result = 0; + ACE_TRY_NEW_ENV + { + CORBA::ORB_var orb = + CORBA::ORB_init (argc, argv, "" ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + if (parse_args (argc, argv) != 0) + return 1; + + CORBA::Object_var tmp = + orb->string_to_object(ior ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + Test_var server = + Test::_narrow(tmp.in () ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + if (CORBA::is_nil (server.in ())) + { + ACE_ERROR_RETURN ((LM_DEBUG, + "Nil Test::Server reference <%s>\n", + ior), + 1); + } + + + server->test_method(ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_TRY_CHECK; + result =0; + + + orb->destroy (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_TRY_CHECK; + } + ACE_CATCHANY + { + result =1; + } + ACE_ENDTRY; + + return result; +} diff --git a/TAO/tests/Bug_1330_Regression/run_test.pl b/TAO/tests/Bug_1330_Regression/run_test.pl new file mode 100755 index 00000000000..4dfde222810 --- /dev/null +++ b/TAO/tests/Bug_1330_Regression/run_test.pl @@ -0,0 +1,58 @@ + +# $Id$ + +eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' + & eval 'exec perl -S $0 $argv:q' + if 0; + +# -*- perl -*- + +use lib '../../../bin'; +use PerlACE::Run_Test; + +# The server IOR file +$server_ior_file = PerlACE::LocalFile ("server.ior"); + +# The client and server processes +$SERVER = new PerlACE::Process(PerlACE::LocalFile("server")); +$CLIENT = new PerlACE::Process(PerlACE::LocalFile("client")); + +# We want the server to run on a fixed port +$port = PerlACE::uniqueid () + 10001; # This can't be 10000 for Chorus 4.0 +$SERVER->Arguments("-ORBEndpoint iiop://localhost:$port"); + +# Fire up the server +$SERVER->Spawn(); + +# We don't need the IOR file but we can wait on the file +if (PerlACE::waitforfile_timed ($server_ior_file, 10) == -1) +{ + print STDERR "ERROR: cannot find $server_ior_file\n"; + $SERVER->Kill(); + exit 1; +} + +# Try the corbaloc URL with incorrect '\' escaping of hex characters +# We expect this to 'fail' +$CLIENT->Arguments("-k corbaloc:iiop:localhost:$port/Name\\2dwith\\2dhyphens"); +if ($CLIENT->SpawnWaitKill (30) == 0) +{ + print STDERR "ERROR: Bug 1330 Regression failed. Incorrect escape characters accepted\n"; + $SERVER->Kill(); + exit 1; +} + +# Try the corbaloc URL with the correct '%' escaping of hex characters +# We expect success +$CLIENT->Arguments("-k corbaloc:iiop:localhost:$port/Name%2dwith%2dhyphens"); +if ($CLIENT->SpawnWaitKill (30) != 0) +{ + print STDERR "ERROR: Bug 1330 Regression failed. Correct escape characters rejected\n"; + $SERVER->Kill(); + exit 1; +} + +# Clean up and return +$SERVER->TerminateWaitKill (5); +unlink $server_ior_file; +exit 0; diff --git a/TAO/tests/Bug_1330_Regression/server.cpp b/TAO/tests/Bug_1330_Regression/server.cpp new file mode 100644 index 00000000000..8bea8ebb4fd --- /dev/null +++ b/TAO/tests/Bug_1330_Regression/server.cpp @@ -0,0 +1,124 @@ +// +// $Id$ +// +#include "ace/Get_Opt.h" +#include "Test_i.h" + +#include "tao/IORTable/IORTable.h" + +const char *object_key = 0; + +int +parse_args (int argc, char *argv[]) +{ + ACE_Get_Opt get_opts (argc, argv, "o:"); + int c; + + while ((c = get_opts ()) != -1) + switch (c) + { + case 'k': + object_key = get_opts.opt_arg (); + break; + case '?': + default: + ACE_ERROR_RETURN ((LM_ERROR, + "SERVER (%P): usage: %s " + "-k <object key>" + "\n", + argv [0]), + -1); + } + // Indicates sucessful parsing of the command line + return 0; +} + +int +main (int argc, char *argv[]) +{ + ACE_DECLARE_NEW_CORBA_ENV; + + ACE_TRY + { + CORBA::ORB_var orb = + CORBA::ORB_init (argc, argv, "" ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + CORBA::Object_var poa_object = + orb->resolve_initial_references ("RootPOA" ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + if (CORBA::is_nil (poa_object.in ())) + ACE_ERROR_RETURN ((LM_ERROR, + "SERVER (%P): Unable to initialize the POA.\n"), + 1); + + PortableServer::POA_var root_poa = + PortableServer::POA::_narrow (poa_object.in () ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + PortableServer::POAManager_var poa_manager = + root_poa->the_POAManager (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_TRY_CHECK; + + if (parse_args (argc, argv) != 0) + return 1; + + Test_i server_impl; + + + + root_poa->activate_object ( &server_impl + ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + CORBA::Object_var server = server_impl._this (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_TRY_CHECK; + + CORBA::String_var ior = + orb->object_to_string (server.in () ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + CORBA::Object_var table_object = + orb->resolve_initial_references ("IORTable" ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + IORTable::Table_var adapter = + IORTable::Table::_narrow (table_object.in () ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + adapter->bind("Name-with-hyphens", ior.in()); + + + FILE *output_file= ACE_OS::fopen ("server.ior", "w"); + if (output_file == 0) + ACE_ERROR_RETURN ((LM_ERROR, + "SERVER (%P): Cannot open output file " + "for writing IOR: %s", + "server.ior"), + 1); + ACE_OS::fprintf (output_file, "%s", ior.in ()); + ACE_OS::fclose (output_file); + + ACE_DEBUG ((LM_DEBUG, + "SERVER (%P): Activated as file://%s\n", + "server.ior")); + + poa_manager->activate(); + + orb->run (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_TRY_CHECK; + + root_poa->destroy (1, 1 ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + } + ACE_CATCHANY + { + ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, + "SERVER (%P): Caught exception:"); + return 1; + } + ACE_ENDTRY; + + return 0; +} diff --git a/TAO/tests/Bug_1627_Regression/Bug_1627_Client.dsp b/TAO/tests/Bug_1627_Regression/Bug_1627_Client.dsp new file mode 100644 index 00000000000..240468da8dc --- /dev/null +++ b/TAO/tests/Bug_1627_Regression/Bug_1627_Client.dsp @@ -0,0 +1,180 @@ +# Microsoft Developer Studio Project File - Name="Bug_1627_Client" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=Bug_1627_Client - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE run the tool that generated this project file and specify the
+!MESSAGE nmake output type. You can then use the following command:
+!MESSAGE
+!MESSAGE NMAKE /f "Bug_1627_Client.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "Bug_1627_Client.mak" CFG="Bug_1627_Client - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "Bug_1627_Client - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "Bug_1627_Client - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "Bug_1627_Client - Win32 Release"
+
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release\Bug_1627_Client"
+# PROP Target_Dir ""
+# ADD CPP /nologo /O2 /W3 /GX /MD /GR /I "..\.." /I "..\..\tao" /I "..\..\.." /D NDEBUG /D WIN32 /D _CONSOLE /FD /c
+# SUBTRACT CPP /YX
+# ADD RSC /l 0x409 /d NDEBUG /i "..\.." /i "..\..\tao" /i "..\..\.."
+BSC32=bscmake.exe
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD LINK32 advapi32.lib user32.lib /INCREMENTAL:NO TAO.lib ACE.lib /libpath:"..\..\..\ace" /libpath:"..\..\tao" /libpath:"..\..\..\lib" /nologo /version:1.3.5 /subsystem:console /pdb:"Release\client.pdb" /machine:I386 /out:"Release\client.exe"
+
+!ELSEIF "$(CFG)" == "Bug_1627_Client - Win32 Debug"
+
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "."
+# PROP Intermediate_Dir "Debug\Bug_1627_Client"
+# PROP Target_Dir ""
+# ADD CPP /nologo /Ob0 /W3 /Gm /GX /Zi /MDd /GR /Gy /I "..\.." /I "..\..\tao" /I "..\..\.." /D _DEBUG /D WIN32 /D _CONSOLE /FD /c
+# SUBTRACT CPP /YX
+# ADD RSC /l 0x409 /d _DEBUG /i "..\.." /i "..\..\tao" /i "..\..\.."
+BSC32=bscmake.exe
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD LINK32 advapi32.lib user32.lib /INCREMENTAL:NO TAOd.lib ACEd.lib /libpath:"..\..\..\ace" /libpath:"..\..\tao" /libpath:"..\..\..\lib" /nologo /version:1.3.5 /subsystem:console /pdb:".\client.pdb" /debug /machine:I386 /out:".\client.exe"
+
+!ENDIF
+
+# Begin Target
+
+# Name "Bug_1627_Client - Win32 Release"
+# Name "Bug_1627_Client - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;cxx;c"
+# Begin Source File
+
+SOURCE=".\client.cpp"
+# End Source File
+# Begin Source File
+
+SOURCE=".\TestC.cpp"
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hh"
+# Begin Source File
+
+SOURCE=".\TestC.h"
+# End Source File
+# End Group
+# Begin Group "Inline Files"
+
+# PROP Default_Filter "i;inl"
+# Begin Source File
+
+SOURCE=".\TestC.i"
+# End Source File
+# End Group
+# Begin Group "Documentation"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=".\README"
+# End Source File
+# End Group
+# Begin Group "IDL Files"
+
+# PROP Default_Filter "idl"
+# Begin Source File
+
+SOURCE=".\Test.idl"
+
+!IF "$(CFG)" == "Bug_1627_Client - Win32 Release"
+
+# PROP Ignore_Default_Tool 1
+# Begin Custom Build - Invoking IDL Compiler on $(InputPath)
+InputPath=.\Test.idl
+InputName=Test
+InputDir=.
+
+BuildCmds= \
+ PATH=%PATH%;..\..\..\lib \
+ ..\..\..\bin\tao_idl -o . -Ge 1 -Sc -Wb,pre_include=ace\pre.h -Wb,post_include=ace\post.h $(InputPath)
+
+".\$(InputName)C.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+".\$(InputName)C.i" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+".\$(InputName)C.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+".\$(InputName)S.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+".\$(InputName)S.i" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+".\$(InputName)S.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+# End Custom Build
+
+!ELSEIF "$(CFG)" == "Bug_1627_Client - Win32 Debug"
+
+# PROP Ignore_Default_Tool 1
+# Begin Custom Build - Invoking IDL Compiler on $(InputPath)
+InputPath=.\Test.idl
+InputName=Test
+InputDir=.
+
+BuildCmds= \
+ PATH=%PATH%;..\..\..\lib \
+ ..\..\..\bin\tao_idl -o . -Ge 1 -Sc -Wb,pre_include=ace\pre.h -Wb,post_include=ace\post.h $(InputPath)
+
+".\$(InputName)C.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+".\$(InputName)C.i" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+".\$(InputName)C.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+".\$(InputName)S.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+".\$(InputName)S.i" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+".\$(InputName)S.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+# End Custom Build
+
+!ENDIF
+
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/TAO/tests/Bug_1627_Regression/Bug_1627_Regression.dsw b/TAO/tests/Bug_1627_Regression/Bug_1627_Regression.dsw new file mode 100644 index 00000000000..3af4f5f9c1a --- /dev/null +++ b/TAO/tests/Bug_1627_Regression/Bug_1627_Regression.dsw @@ -0,0 +1,41 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "Bug_1627_Server"=Bug_1627_Server.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "Bug_1627_Client"=Bug_1627_Client.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/TAO/tests/Bug_1627_Regression/Bug_1627_Server.dsp b/TAO/tests/Bug_1627_Regression/Bug_1627_Server.dsp new file mode 100644 index 00000000000..a957706f4e5 --- /dev/null +++ b/TAO/tests/Bug_1627_Regression/Bug_1627_Server.dsp @@ -0,0 +1,200 @@ +# Microsoft Developer Studio Project File - Name="Bug_1627_Server" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=Bug_1627_Server - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE run the tool that generated this project file and specify the
+!MESSAGE nmake output type. You can then use the following command:
+!MESSAGE
+!MESSAGE NMAKE /f "Bug_1627_Server.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "Bug_1627_Server.mak" CFG="Bug_1627_Server - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "Bug_1627_Server - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "Bug_1627_Server - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "Bug_1627_Server - Win32 Release"
+
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release\Bug_1627_Server"
+# PROP Target_Dir ""
+# ADD CPP /nologo /O2 /W3 /GX /MD /GR /I "..\.." /I "..\..\tao" /I "..\..\.." /D NDEBUG /D WIN32 /D _CONSOLE /FD /c
+# SUBTRACT CPP /YX
+# ADD RSC /l 0x409 /d NDEBUG /i "..\.." /i "..\..\tao" /i "..\..\.."
+BSC32=bscmake.exe
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD LINK32 advapi32.lib user32.lib /INCREMENTAL:NO TAO_IORTable.lib TAO_PortableServer.lib TAO_IORInterceptor.lib TAO_Valuetype.lib TAO_ObjRefTemplate.lib TAO.lib ACE.lib /libpath:"..\..\tao\IORTable" /libpath:"..\..\tao\PortableServer" /libpath:"..\..\tao\IORInterceptor" /libpath:"..\..\tao\Valuetype" /libpath:"..\..\tao\ObjRefTemplate" /libpath:"..\..\..\ace" /libpath:"..\..\tao" /libpath:"..\..\..\lib" /nologo /version:1.3.5 /subsystem:console /pdb:"Release\server.pdb" /machine:I386 /out:"Release\server.exe"
+
+!ELSEIF "$(CFG)" == "Bug_1627_Server - Win32 Debug"
+
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "."
+# PROP Intermediate_Dir "Debug\Bug_1627_Server"
+# PROP Target_Dir ""
+# ADD CPP /nologo /Ob0 /W3 /Gm /GX /Zi /MDd /GR /Gy /I "..\.." /I "..\..\tao" /I "..\..\.." /D _DEBUG /D WIN32 /D _CONSOLE /FD /c
+# SUBTRACT CPP /YX
+# ADD RSC /l 0x409 /d _DEBUG /i "..\.." /i "..\..\tao" /i "..\..\.."
+BSC32=bscmake.exe
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD LINK32 advapi32.lib user32.lib /INCREMENTAL:NO TAO_IORTabled.lib TAO_PortableServerd.lib TAO_IORInterceptord.lib TAO_Valuetyped.lib TAO_ObjRefTemplated.lib TAOd.lib ACEd.lib /libpath:"..\..\tao\IORTable" /libpath:"..\..\tao\PortableServer" /libpath:"..\..\tao\IORInterceptor" /libpath:"..\..\tao\Valuetype" /libpath:"..\..\tao\ObjRefTemplate" /libpath:"..\..\..\ace" /libpath:"..\..\tao" /libpath:"..\..\..\lib" /nologo /version:1.3.5 /subsystem:console /pdb:".\server.pdb" /debug /machine:I386 /out:".\server.exe"
+
+!ENDIF
+
+# Begin Target
+
+# Name "Bug_1627_Server - Win32 Release"
+# Name "Bug_1627_Server - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;cxx;c"
+# Begin Source File
+
+SOURCE=".\server.cpp"
+# End Source File
+# Begin Source File
+
+SOURCE=".\Test_i.cpp"
+# End Source File
+# Begin Source File
+
+SOURCE=".\TestC.cpp"
+# End Source File
+# Begin Source File
+
+SOURCE=".\TestS.cpp"
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hh"
+# Begin Source File
+
+SOURCE=".\Test_i.h"
+# End Source File
+# Begin Source File
+
+SOURCE=".\TestC.h"
+# End Source File
+# Begin Source File
+
+SOURCE=".\TestS.h"
+# End Source File
+# End Group
+# Begin Group "Inline Files"
+
+# PROP Default_Filter "i;inl"
+# Begin Source File
+
+SOURCE=".\TestC.i"
+# End Source File
+# Begin Source File
+
+SOURCE=".\TestS.i"
+# End Source File
+# End Group
+# Begin Group "Documentation"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=".\README"
+# End Source File
+# End Group
+# Begin Group "IDL Files"
+
+# PROP Default_Filter "idl"
+# Begin Source File
+
+SOURCE=".\Test.idl"
+
+!IF "$(CFG)" == "Bug_1627_Server - Win32 Release"
+
+# PROP Ignore_Default_Tool 1
+# Begin Custom Build - Invoking IDL Compiler on $(InputPath)
+InputPath=.\Test.idl
+InputName=Test
+InputDir=.
+
+BuildCmds= \
+ PATH=%PATH%;..\..\..\lib \
+ ..\..\..\bin\tao_idl -o . -Gv -Ge 1 -Sc -Wb,pre_include=ace\pre.h -Wb,post_include=ace\post.h $(InputPath)
+
+".\$(InputName)C.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+".\$(InputName)C.i" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+".\$(InputName)C.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+".\$(InputName)S.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+".\$(InputName)S.i" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+".\$(InputName)S.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+# End Custom Build
+
+!ELSEIF "$(CFG)" == "Bug_1627_Server - Win32 Debug"
+
+# PROP Ignore_Default_Tool 1
+# Begin Custom Build - Invoking IDL Compiler on $(InputPath)
+InputPath=.\Test.idl
+InputName=Test
+InputDir=.
+
+BuildCmds= \
+ PATH=%PATH%;..\..\..\lib \
+ ..\..\..\bin\tao_idl -o . -Gv -Ge 1 -Sc -Wb,pre_include=ace\pre.h -Wb,post_include=ace\post.h $(InputPath)
+
+".\$(InputName)C.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+".\$(InputName)C.i" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+".\$(InputName)C.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+".\$(InputName)S.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+".\$(InputName)S.i" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+".\$(InputName)S.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+# End Custom Build
+
+!ENDIF
+
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/TAO/tests/Bug_1627_Regression/Makefile b/TAO/tests/Bug_1627_Regression/Makefile new file mode 100644 index 00000000000..16d467bd978 --- /dev/null +++ b/TAO/tests/Bug_1627_Regression/Makefile @@ -0,0 +1,59 @@ +#---------------------------------------------------------------------------- +# GNU ACE Workspace +# +# @file Makefile +# +# $Id$ +# +# This file was automatically generated by MPC. Any changes made directly to +# this file will be lost the next time it is generated. +# +#---------------------------------------------------------------------------- + + +MAKE_OPTIONS=$(shell echo $(MAKEFLAGS) | sed 's/--unix *//; s/ .*//') +ifeq ($(findstring k,$(MAKE_OPTIONS)),k) + KEEP_GOING = 1 +else + KEEP_GOING = 0 +endif + +%.tgt0: +ifeq ($(KEEP_GOING),1) + -@$(MAKE) -f Makefile.Bug_1627_Server -C . $(*); +else + @$(MAKE) -f Makefile.Bug_1627_Server -C . $(*); +endif +%.tgt1: %.tgt0 +ifeq ($(KEEP_GOING),1) + -@$(MAKE) -f Makefile.Bug_1627_Client -C . $(*); +else + @$(MAKE) -f Makefile.Bug_1627_Client -C . $(*); +endif + + +all: all.tgt0 all.tgt1 + +debug: debug.tgt0 debug.tgt1 + +profile: profile.tgt0 profile.tgt1 + +optimize: optimize.tgt0 optimize.tgt1 + +install: install.tgt0 install.tgt1 + +deinstall: deinstall.tgt0 deinstall.tgt1 + +clean: clean.tgt0 clean.tgt1 + +realclean: realclean.tgt0 realclean.tgt1 + +clobber: clobber.tgt0 clobber.tgt1 + +depend: depend.tgt0 depend.tgt1 + +rcs_info: rcs_info.tgt0 rcs_info.tgt1 + +idl_stubs: idl_stubs.tgt0 idl_stubs.tgt1 + +reverseclean: realclean.tgt1 realclean.tgt0 diff --git a/TAO/tests/Bug_1627_Regression/Makefile.Bug_1627_Client b/TAO/tests/Bug_1627_Regression/Makefile.Bug_1627_Client new file mode 100644 index 00000000000..548bc46653c --- /dev/null +++ b/TAO/tests/Bug_1627_Regression/Makefile.Bug_1627_Client @@ -0,0 +1,113 @@ +#---------------------------------------------------------------------------- +# GNU Makefile +# +# @file Makefile.Bug_1627_Client +# +# $Id$ +# +# This file was automatically generated by MPC. Any changes made directly to +# this file will be lost the next time it is generated. +# +#---------------------------------------------------------------------------- +MAKEFILE = Makefile.Bug_1627_Client +DEPENDENCY_FILE = .depend.Makefile.Bug_1627_Client +BIN_UNCHECKED = client + +ifndef TAO_ROOT + TAO_ROOT = $(ACE_ROOT)/TAO +endif +ifndef CIAO_ROOT + CIAO_ROOT = $(TAO_ROOT)/CIAO +endif + +TAO_IDL = ../../../bin/tao_idl +IDL_FILES = Test +IDL_SRC = $(foreach ext, C.cpp S.cpp, $(foreach file, $(IDL_FILES), $(file)$(ext))) + +FILES = \ + TestC \ + client + +#---------------------------------------------------------------------------- +# Include macros and targets +#---------------------------------------------------------------------------- +LDLIBS = -lTAO -lACE +include $(ACE_ROOT)/include/makeinclude/wrapper_macros.GNU +## We don't need the ACELIB setting from wrapper_macros.GNU +ACELIB = +include $(TAO_ROOT)/rules.tao.GNU + +# To build multiple executables in the same directory on AIX, it works +# best to have a template directory per project. +# The compiler/linker isn't too smart about instantiating templates... +ifdef TEMPINCDIR +TEMPINCDIR := $(TEMPINCDIR)/Bug_1627_Client + +all: $(TEMPINCDIR) + +$(TEMPINCDIR): + @-test -d $(TEMPINCDIR) || mkdir -p $(TEMPINCDIR) $(ACE_NUL_STDERR) + +endif + +BIN = $(BIN_UNCHECKED) + +OBJS = $(addsuffix .o, $(notdir $(FILES))) +SRC = $(addsuffix .cpp, $(FILES)) + +ifneq ($(BIN),) +all: idl_stubs + +# This rule forces make to run the idl_stubs +# target before building any of the source files. +TestC.cpp client.cpp: idl_stubs +endif + +include $(ACE_ROOT)/include/makeinclude/macros.GNU +include $(ACE_ROOT)/include/makeinclude/rules.common.GNU +include $(ACE_ROOT)/include/makeinclude/rules.nonested.GNU + +include $(ACE_ROOT)/include/makeinclude/rules.local.GNU +include $(TAO_ROOT)/taoconfig.mk + +CPPFLAGS += -I../.. -I../../tao -I../../.. +ifeq ($(static_libs),1) + ifneq ($(LIB),) + CPPFLAGS += -DTAO_AS_STATIC_LIBS -DACE_AS_STATIC_LIBS + endif +endif + + +LDFLAGS += -L../../../ace -L../../tao -L../../../lib + +TAO_IDLFLAGS += -Ge 1 -Sc -Wb,pre_include=ace/pre.h -Wb,post_include=ace/post.h +#---------------------------------------------------------------------------- +# Local targets +#---------------------------------------------------------------------------- +.: + -@mkdir -p "." + + +ADDITIONAL_IDL_TARGETS = +# IDL File Directory: . + +ifneq ($(ADDITIONAL_IDL_TARGETS),) +idl_stubs: $(ADDITIONAL_IDL_TARGETS) +endif + +.PRECIOUS: $(foreach ext, $(IDL_EXT), $(foreach file, $(IDL_FILES), $(file)$(ext))) + +ifndef kylix +$(BIN): $(addprefix $(VDIR), $(OBJS)) + $(LINK.cc) $(LDFLAGS) $(CC_OUTPUT_FLAG) $@ $^ $(VLDLIBS) $(POSTLINK) +else +$(BIN): $(addprefix $(VDIR), $(OBJS)) + $(LINK.cc) $(LDFLAGS) $(CC_OUTPUT_FLAG) $(VLDLIBS) $(BORINITEXEOBJ) $(POSTLINK) $^, $@,, +endif + +realclean: clean + -$(RM) $(foreach ext, $(IDL_EXT), $(foreach file, $(IDL_FILES), $(file)$(ext))) +ifneq ($(GENERATED_DIRTY),) + -$(RM) -r $(GENERATED_DIRTY) +endif + diff --git a/TAO/tests/Bug_1627_Regression/Makefile.Bug_1627_Server b/TAO/tests/Bug_1627_Regression/Makefile.Bug_1627_Server new file mode 100644 index 00000000000..418c79c299b --- /dev/null +++ b/TAO/tests/Bug_1627_Regression/Makefile.Bug_1627_Server @@ -0,0 +1,115 @@ +#---------------------------------------------------------------------------- +# GNU Makefile +# +# @file Makefile.Bug_1627_Server +# +# $Id$ +# +# This file was automatically generated by MPC. Any changes made directly to +# this file will be lost the next time it is generated. +# +#---------------------------------------------------------------------------- +MAKEFILE = Makefile.Bug_1627_Server +DEPENDENCY_FILE = .depend.Makefile.Bug_1627_Server +BIN_UNCHECKED = server + +ifndef TAO_ROOT + TAO_ROOT = $(ACE_ROOT)/TAO +endif +ifndef CIAO_ROOT + CIAO_ROOT = $(TAO_ROOT)/CIAO +endif + +TAO_IDL = ../../../bin/tao_idl +IDL_FILES = Test +IDL_SRC = $(foreach ext, C.cpp S.cpp, $(foreach file, $(IDL_FILES), $(file)$(ext))) + +FILES = \ + TestC \ + TestS \ + Test_i \ + server + +#---------------------------------------------------------------------------- +# Include macros and targets +#---------------------------------------------------------------------------- +LDLIBS = -lTAO_IORTable -lTAO_PortableServer -lTAO_IORInterceptor -lTAO_Valuetype -lTAO_ObjRefTemplate -lTAO -lACE +include $(ACE_ROOT)/include/makeinclude/wrapper_macros.GNU +## We don't need the ACELIB setting from wrapper_macros.GNU +ACELIB = +include $(TAO_ROOT)/rules.tao.GNU + +# To build multiple executables in the same directory on AIX, it works +# best to have a template directory per project. +# The compiler/linker isn't too smart about instantiating templates... +ifdef TEMPINCDIR +TEMPINCDIR := $(TEMPINCDIR)/Bug_1627_Server + +all: $(TEMPINCDIR) + +$(TEMPINCDIR): + @-test -d $(TEMPINCDIR) || mkdir -p $(TEMPINCDIR) $(ACE_NUL_STDERR) + +endif + +BIN = $(BIN_UNCHECKED) + +OBJS = $(addsuffix .o, $(notdir $(FILES))) +SRC = $(addsuffix .cpp, $(FILES)) + +ifneq ($(BIN),) +all: idl_stubs + +# This rule forces make to run the idl_stubs +# target before building any of the source files. +TestC.cpp TestS.cpp Test_i.cpp server.cpp: idl_stubs +endif + +include $(ACE_ROOT)/include/makeinclude/macros.GNU +include $(ACE_ROOT)/include/makeinclude/rules.common.GNU +include $(ACE_ROOT)/include/makeinclude/rules.nonested.GNU + +include $(ACE_ROOT)/include/makeinclude/rules.local.GNU +include $(TAO_ROOT)/taoconfig.mk + +CPPFLAGS += -I../.. -I../../tao -I../../.. +ifeq ($(static_libs),1) + ifneq ($(LIB),) + CPPFLAGS += -DTAO_AS_STATIC_LIBS -DTAO_AS_STATIC_LIBS -DACE_AS_STATIC_LIBS + endif +endif + + +LDFLAGS += -L../../tao/IORTable -L../../tao/PortableServer -L../../tao/IORInterceptor -L../../tao/Valuetype -L../../tao/ObjRefTemplate -L../../../ace -L../../tao -L../../../lib + +TAO_IDLFLAGS += -Gv -Ge 1 -Sc -Wb,pre_include=ace/pre.h -Wb,post_include=ace/post.h +#---------------------------------------------------------------------------- +# Local targets +#---------------------------------------------------------------------------- +../../../lib: + -@mkdir -p "../../../lib" + + +ADDITIONAL_IDL_TARGETS = +# IDL File Directory: . + +ifneq ($(ADDITIONAL_IDL_TARGETS),) +idl_stubs: $(ADDITIONAL_IDL_TARGETS) +endif + +.PRECIOUS: $(foreach ext, $(IDL_EXT), $(foreach file, $(IDL_FILES), $(file)$(ext))) + +ifndef kylix +$(BIN): $(addprefix $(VDIR), $(OBJS)) + $(LINK.cc) $(LDFLAGS) $(CC_OUTPUT_FLAG) $@ $^ $(VLDLIBS) $(POSTLINK) +else +$(BIN): $(addprefix $(VDIR), $(OBJS)) + $(LINK.cc) $(LDFLAGS) $(CC_OUTPUT_FLAG) $(VLDLIBS) $(BORINITEXEOBJ) $(POSTLINK) $^, $@,, +endif + +realclean: clean + -$(RM) $(foreach ext, $(IDL_EXT), $(foreach file, $(IDL_FILES), $(file)$(ext))) +ifneq ($(GENERATED_DIRTY),) + -$(RM) -r $(GENERATED_DIRTY) +endif + diff --git a/TAO/tests/Bug_1627_Regression/README b/TAO/tests/Bug_1627_Regression/README new file mode 100644 index 00000000000..ac9a014b526 --- /dev/null +++ b/TAO/tests/Bug_1627_Regression/README @@ -0,0 +1,4 @@ +This is an almost exact copy of the test for TAO Bug 1330 (Prism RT Bug 324). + +It is meant to provide regression for Prism RT Bug 596: +"ORBEndpoint QoS" (i.e. it tests that you can define endpoint values as an environment variable).
\ No newline at end of file diff --git a/TAO/tests/Bug_1627_Regression/Test.idl b/TAO/tests/Bug_1627_Regression/Test.idl new file mode 100644 index 00000000000..6844131c75f --- /dev/null +++ b/TAO/tests/Bug_1627_Regression/Test.idl @@ -0,0 +1,7 @@ +// +// $Id$ +// +interface Test +{ + void test_method(); +}; diff --git a/TAO/tests/Bug_1627_Regression/Test_i.cpp b/TAO/tests/Bug_1627_Regression/Test_i.cpp new file mode 100644 index 00000000000..c84e9f04dc2 --- /dev/null +++ b/TAO/tests/Bug_1627_Regression/Test_i.cpp @@ -0,0 +1,21 @@ +// +// $Id$ +// +#include "Test_i.h" + +Test_i::Test_i() +{ + // Noop +} + +Test_i::~Test_i() +{ + // Noop +} + +void +Test_i::test_method (ACE_ENV_SINGLE_ARG_DECL) + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + // Noop +} diff --git a/TAO/tests/Bug_1627_Regression/Test_i.h b/TAO/tests/Bug_1627_Regression/Test_i.h new file mode 100644 index 00000000000..43bcb9a548b --- /dev/null +++ b/TAO/tests/Bug_1627_Regression/Test_i.h @@ -0,0 +1,25 @@ +// +// $Id$ +// +// -*- C++ -*- + +#if !defined BUG_1330_REGRESSION_TEST_I_H + #define BUG_1330_REGRESSION_TEST_I_H + +#include "TestS.h" + +class Test_i: public POA_Test +{ +public: + /// Constructor + Test_i (void); + + /// Destructor + ~Test_i (void); + + /// A method + void test_method(ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS) + ACE_THROW_SPEC ((CORBA::SystemException)); +}; + +#endif /* ! BUG_1330_REGRESSION_TEST_I_H */ diff --git a/TAO/tests/Bug_1627_Regression/client.cpp b/TAO/tests/Bug_1627_Regression/client.cpp new file mode 100644 index 00000000000..f317731aeae --- /dev/null +++ b/TAO/tests/Bug_1627_Regression/client.cpp @@ -0,0 +1,83 @@ +// +// $Id$ +// +#include "TestC.h" +#include "ace/Get_Opt.h" + +const char *ior = "corbaloc:iiop:localhost:12345/Name\\2dwith\\2dhyphens"; +int shutdown_server = 0; + +int +parse_args (int argc, char *argv[]) +{ + ACE_Get_Opt get_opts (argc, argv, "k:"); + int c; + + while ((c = get_opts ()) != -1) + switch (c) + { + case 'k': + ior = get_opts.opt_arg (); + break; + case 's': + shutdown_server = 1; + break; + case '?': + default: + ACE_ERROR_RETURN ((LM_ERROR, + "usage: %s " + "-k <ior> " + "\n", + argv [0]), + -1); + } + // Indicates sucessful parsing of the command line + return 0; +} + +int +main (int argc, char *argv[]) +{ + int result = 0; + ACE_TRY_NEW_ENV + { + CORBA::ORB_var orb = + CORBA::ORB_init (argc, argv, "" ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + if (parse_args (argc, argv) != 0) + return 1; + + CORBA::Object_var tmp = + orb->string_to_object(ior ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + Test_var server = + Test::_narrow(tmp.in () ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + if (CORBA::is_nil (server.in ())) + { + ACE_ERROR_RETURN ((LM_DEBUG, + "Nil Test::Server reference <%s>\n", + ior), + 1); + } + + + server->test_method(ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_TRY_CHECK; + result =0; + + + orb->destroy (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_TRY_CHECK; + } + ACE_CATCHANY + { + result =1; + } + ACE_ENDTRY; + + return result; +} diff --git a/TAO/tests/Bug_1627_Regression/run_test.pl b/TAO/tests/Bug_1627_Regression/run_test.pl new file mode 100755 index 00000000000..2a542726cec --- /dev/null +++ b/TAO/tests/Bug_1627_Regression/run_test.pl @@ -0,0 +1,51 @@ + +# $Id$ + +eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' + & eval 'exec perl -S $0 $argv:q' + if 0; + +# -*- perl -*- + +use lib '../../../bin'; +use PerlACE::Run_Test; + +# The server IOR file +$server_ior_file = PerlACE::LocalFile ("server.ior"); + +# The client and server processes +$SERVER = new PerlACE::Process(PerlACE::LocalFile("server")); +$CLIENT = new PerlACE::Process(PerlACE::LocalFile("client")); + +# We want the server to run on a fixed port +$port = PerlACE::uniqueid () + 10001; # This can't be 10000 for Chorus 4.0 + +# We would normally have to specify the server port / host via -ORBEndpoint +# but we are testing the ability to define it as an environment property +$ENV {'TAO_ORBENDPOINT'} = "iiop://localhost:$port"; + +# Fire up the server +$SERVER->Spawn(); + +# We don't need the IOR file but we can wait on the file +if (PerlACE::waitforfile_timed ($server_ior_file, 10) == -1) +{ + print STDERR "ERROR: cannot find $server_ior_file\n"; + $SERVER->Kill(); + exit 1; +} + +# Try the corbaloc URL for the server. It's almost impossible that this will work +# if the endpoint hasn't been read from the environment so we call success a pass. +$CLIENT->Arguments("-k corbaloc:iiop:localhost:$port/Name-with-hyphens"); +if ($CLIENT->SpawnWaitKill (30) != 0) +{ + print STDERR "ERROR: Bug rt596 Regression failed. Endpoint was not read from environment\n"; + $SERVER->Kill(); + exit 1; +} + +# Clean up and return +$SERVER->TerminateWaitKill (5); +unlink $server_ior_file; +exit 0; diff --git a/TAO/tests/Bug_1627_Regression/server.cpp b/TAO/tests/Bug_1627_Regression/server.cpp new file mode 100644 index 00000000000..8bea8ebb4fd --- /dev/null +++ b/TAO/tests/Bug_1627_Regression/server.cpp @@ -0,0 +1,124 @@ +// +// $Id$ +// +#include "ace/Get_Opt.h" +#include "Test_i.h" + +#include "tao/IORTable/IORTable.h" + +const char *object_key = 0; + +int +parse_args (int argc, char *argv[]) +{ + ACE_Get_Opt get_opts (argc, argv, "o:"); + int c; + + while ((c = get_opts ()) != -1) + switch (c) + { + case 'k': + object_key = get_opts.opt_arg (); + break; + case '?': + default: + ACE_ERROR_RETURN ((LM_ERROR, + "SERVER (%P): usage: %s " + "-k <object key>" + "\n", + argv [0]), + -1); + } + // Indicates sucessful parsing of the command line + return 0; +} + +int +main (int argc, char *argv[]) +{ + ACE_DECLARE_NEW_CORBA_ENV; + + ACE_TRY + { + CORBA::ORB_var orb = + CORBA::ORB_init (argc, argv, "" ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + CORBA::Object_var poa_object = + orb->resolve_initial_references ("RootPOA" ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + if (CORBA::is_nil (poa_object.in ())) + ACE_ERROR_RETURN ((LM_ERROR, + "SERVER (%P): Unable to initialize the POA.\n"), + 1); + + PortableServer::POA_var root_poa = + PortableServer::POA::_narrow (poa_object.in () ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + PortableServer::POAManager_var poa_manager = + root_poa->the_POAManager (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_TRY_CHECK; + + if (parse_args (argc, argv) != 0) + return 1; + + Test_i server_impl; + + + + root_poa->activate_object ( &server_impl + ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + CORBA::Object_var server = server_impl._this (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_TRY_CHECK; + + CORBA::String_var ior = + orb->object_to_string (server.in () ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + CORBA::Object_var table_object = + orb->resolve_initial_references ("IORTable" ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + IORTable::Table_var adapter = + IORTable::Table::_narrow (table_object.in () ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + adapter->bind("Name-with-hyphens", ior.in()); + + + FILE *output_file= ACE_OS::fopen ("server.ior", "w"); + if (output_file == 0) + ACE_ERROR_RETURN ((LM_ERROR, + "SERVER (%P): Cannot open output file " + "for writing IOR: %s", + "server.ior"), + 1); + ACE_OS::fprintf (output_file, "%s", ior.in ()); + ACE_OS::fclose (output_file); + + ACE_DEBUG ((LM_DEBUG, + "SERVER (%P): Activated as file://%s\n", + "server.ior")); + + poa_manager->activate(); + + orb->run (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_TRY_CHECK; + + root_poa->destroy (1, 1 ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + } + ACE_CATCHANY + { + ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, + "SERVER (%P): Caught exception:"); + return 1; + } + ACE_ENDTRY; + + return 0; +} diff --git a/TAO/tests/Bug_1627_Regression/test.mpc b/TAO/tests/Bug_1627_Regression/test.mpc new file mode 100644 index 00000000000..a0152d0bb8f --- /dev/null +++ b/TAO/tests/Bug_1627_Regression/test.mpc @@ -0,0 +1,16 @@ +project(Bug_1627_Server): server { + libs += TAO_IORTable + libpaths += $(TAO_ROOT)/tao/IORTable $(TAO_ROOT)/tao/PortableServer $(TAO_ROOT)/tao/IORInterceptor $(TAO_ROOT)/tao/Valuetype $(TAO_ROOT)/tao/ObjRefTemplate $(ACE_ROOT)/ace $(TAO_ROOT)/tao + Source_Files { + Test_i.cpp + server.cpp + } +} + +project(Bug_1627_Client): client { + libpaths += $(ACE_ROOT)/ace $(TAO_ROOT)/tao + Source_Files { + TestC.cpp + client.cpp + } +}
\ No newline at end of file diff --git a/TAO/tests/Bug_1628_Regression/TestCase.idl b/TAO/tests/Bug_1628_Regression/TestCase.idl new file mode 100644 index 00000000000..1e95c85d444 --- /dev/null +++ b/TAO/tests/Bug_1628_Regression/TestCase.idl @@ -0,0 +1,16 @@ +// +// $Id$ +// + +#include "TestType.idl" + +//module Test { +//module Test2 { + + + + typedef HashedMD5SimpleSecret Body; + + +//}; +//}; diff --git a/TAO/tests/Bug_1628_Regression/TestType.idl b/TAO/tests/Bug_1628_Regression/TestType.idl new file mode 100644 index 00000000000..a7f1adde7b2 --- /dev/null +++ b/TAO/tests/Bug_1628_Regression/TestType.idl @@ -0,0 +1,16 @@ +// +// $Id$ +// + +//module Test { + + + // The size of the hash md5 + const unsigned long HASH_MD5_SIZEOF = 16; + + // The hash MD5 type + typedef octet HashedMD5SimpleSecret[HASH_MD5_SIZEOF] ; + + + +//}; diff --git a/TAO/tests/Bug_1628_Regression/run_test.pl b/TAO/tests/Bug_1628_Regression/run_test.pl new file mode 100755 index 00000000000..e2abf7ec7d8 --- /dev/null +++ b/TAO/tests/Bug_1628_Regression/run_test.pl @@ -0,0 +1,62 @@ + +# $Id$ + +eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' + & eval 'exec perl -S $0 $argv:q' + if 0; + +# -*- perl -*- + +use lib '../../../bin'; +use PerlACE::Run_Test; + +$status =0; + +# The location of the tao_idl utility - depends on O/S +if ($^O eq "MSWin32") +{ + $tao_idl = "../../../bin/tao_idl"; +} +else +{ + $tao_idl = "../../../TAO/TAO_IDL/tao_idl"; +} + +# Generated code file names +$TestCaseC_i = PerlACE::LocalFile("TestCaseC.i"); +unlink $TestCaseC_i; + + +# Compile the IDL +# +$TAO_IDL = new PerlACE::Process("$tao_idl"); +$TAO_IDL->Arguments( "-Ge 1 -Sc TestCase.idl" ) ; +if( $TAO_IDL->SpawnWaitKill(10) != 0 ) +{ + print STDERR "ERROR: can't compile IDL\n"; + $TAO_IDL->Kill (); + $status = 1; + exit $status; +} + +# Test for the presence of Body_dup etc. Crude test assumes that if +# Body_dup is there, then all the Body_* methods are also there. +# +$found = 0 ; +open (I_FILE, "$TestCaseC_i") ; +while( <I_FILE> ) +{ + chomp ; + if( $_ =~ /Body_dup/ ) + { + $found = 1 ; + last ; + } +} +if( $found != 1 ) +{ + print STDERR "ERROR: Body_* methods not found\n" ; + $status = 1 ; +} + +exit $status; diff --git a/TAO/tests/Bug_1635_Regression/Bug_1635_Client.dsp b/TAO/tests/Bug_1635_Regression/Bug_1635_Client.dsp new file mode 100644 index 00000000000..be8e948fdee --- /dev/null +++ b/TAO/tests/Bug_1635_Regression/Bug_1635_Client.dsp @@ -0,0 +1,85 @@ +# Microsoft Developer Studio Project File - Name="Bug_1635_Client" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=Bug_1635_Client - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE run the tool that generated this project file and specify the
+!MESSAGE nmake output type. You can then use the following command:
+!MESSAGE
+!MESSAGE NMAKE /f "Bug_1635_Client.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "Bug_1635_Client.mak" CFG="Bug_1635_Client - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "Bug_1635_Client - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "Bug_1635_Client - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "Bug_1635_Client - Win32 Release"
+
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release\Bug_1635_Client"
+# PROP Target_Dir ""
+# ADD CPP /nologo /O2 /W3 /GX /MD /GR /I "..\.." /I "..\..\tao" /I "..\..\.." /D NDEBUG /D WIN32 /D _CONSOLE /FD /c
+# SUBTRACT CPP /YX
+# ADD RSC /l 0x409 /d NDEBUG /i "..\.." /i "..\..\tao" /i "..\..\.."
+BSC32=bscmake.exe
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD LINK32 advapi32.lib user32.lib /INCREMENTAL:NO TAO.lib ACE.lib /libpath:"..\..\tao" /libpath:"..\..\..\ace" /libpath:"..\..\..\lib" /nologo /version:1.3.5 /subsystem:console /pdb:"Release\client.pdb" /machine:I386 /out:"Release\client.exe"
+
+!ELSEIF "$(CFG)" == "Bug_1635_Client - Win32 Debug"
+
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "."
+# PROP Intermediate_Dir "Debug\Bug_1635_Client"
+# PROP Target_Dir ""
+# ADD CPP /nologo /Ob0 /W3 /Gm /GX /Zi /MDd /GR /Gy /I "..\.." /I "..\..\tao" /I "..\..\.." /D _DEBUG /D WIN32 /D _CONSOLE /FD /c
+# SUBTRACT CPP /YX
+# ADD RSC /l 0x409 /d _DEBUG /i "..\.." /i "..\..\tao" /i "..\..\.."
+BSC32=bscmake.exe
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD LINK32 advapi32.lib user32.lib /INCREMENTAL:NO TAOd.lib ACEd.lib /libpath:"..\..\tao" /libpath:"..\..\..\ace" /libpath:"..\..\..\lib" /nologo /version:1.3.5 /subsystem:console /pdb:".\client.pdb" /debug /machine:I386 /out:".\client.exe"
+
+!ENDIF
+
+# Begin Target
+
+# Name "Bug_1635_Client - Win32 Release"
+# Name "Bug_1635_Client - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;cxx;c"
+# Begin Source File
+
+SOURCE=".\client.cpp"
+# End Source File
+# End Group
+# Begin Group "Documentation"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=".\README"
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/TAO/tests/Bug_1635_Regression/Bug_1635_Regression.dsw b/TAO/tests/Bug_1635_Regression/Bug_1635_Regression.dsw new file mode 100644 index 00000000000..08fa1bbc38d --- /dev/null +++ b/TAO/tests/Bug_1635_Regression/Bug_1635_Regression.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "Bug_1635_Client"=Bug_1635_Client.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/TAO/tests/Bug_1635_Regression/Bug_1635_Regression.mpc b/TAO/tests/Bug_1635_Regression/Bug_1635_Regression.mpc new file mode 100644 index 00000000000..1d29719a1b0 --- /dev/null +++ b/TAO/tests/Bug_1635_Regression/Bug_1635_Regression.mpc @@ -0,0 +1,7 @@ +project(Bug_1635_Client): client { + libpaths += $(TAO_ROOT)/tao $(ACE_ROOT)/ace + Source_Files { + client.cpp + } +} + diff --git a/TAO/tests/Bug_1635_Regression/Makefile b/TAO/tests/Bug_1635_Regression/Makefile new file mode 100644 index 00000000000..2055d8a7019 --- /dev/null +++ b/TAO/tests/Bug_1635_Regression/Makefile @@ -0,0 +1,19 @@ +#---------------------------------------------------------------------------- +# GNU ACE Workspace +# +# @file Makefile +# +# $Id$ +# +# This file was automatically generated by MPC. Any changes made directly to +# this file will be lost the next time it is generated. +# +#---------------------------------------------------------------------------- + +TARGETS_NESTED = all debug profile optimize install deinstall clean realclean clobber depend rcs_info idl_stubs + +$(TARGETS_NESTED): + @$(MAKE) -f Makefile.Bug_1635_Client $(@); + +reverseclean: + @$(MAKE) -f Makefile.Bug_1635_Client realclean diff --git a/TAO/tests/Bug_1635_Regression/Makefile.Bug_1635_Client b/TAO/tests/Bug_1635_Regression/Makefile.Bug_1635_Client new file mode 100644 index 00000000000..cf509a529a5 --- /dev/null +++ b/TAO/tests/Bug_1635_Regression/Makefile.Bug_1635_Client @@ -0,0 +1,89 @@ +#---------------------------------------------------------------------------- +# GNU Makefile +# +# @file Makefile.Bug_1635_Client +# +# $Id$ +# +# This file was automatically generated by MPC. Any changes made directly to +# this file will be lost the next time it is generated. +# +#---------------------------------------------------------------------------- +MAKEFILE = Makefile.Bug_1635_Client +DEPENDENCY_FILE = .depend.Makefile.Bug_1635_Client +BIN_UNCHECKED = client + +ifndef TAO_ROOT + TAO_ROOT = $(ACE_ROOT)/TAO +endif +ifndef CIAO_ROOT + CIAO_ROOT = $(TAO_ROOT)/CIAO +endif + +FILES = \ + client + +#---------------------------------------------------------------------------- +# Include macros and targets +#---------------------------------------------------------------------------- +LDLIBS = -lTAO -lACE +include $(ACE_ROOT)/include/makeinclude/wrapper_macros.GNU +## We don't need the ACELIB setting from wrapper_macros.GNU +ACELIB = +include $(TAO_ROOT)/rules.tao.GNU + +# To build multiple executables in the same directory on AIX, it works +# best to have a template directory per project. +# The compiler/linker isn't too smart about instantiating templates... +ifdef TEMPINCDIR +TEMPINCDIR := $(TEMPINCDIR)/Bug_1635_Client + +all: $(TEMPINCDIR) + +$(TEMPINCDIR): + @-test -d $(TEMPINCDIR) || mkdir -p $(TEMPINCDIR) $(ACE_NUL_STDERR) + +endif + +BIN = $(BIN_UNCHECKED) + +OBJS = $(addsuffix .o, $(notdir $(FILES))) +SRC = $(addsuffix .cpp, $(FILES)) + +include $(ACE_ROOT)/include/makeinclude/macros.GNU +include $(ACE_ROOT)/include/makeinclude/rules.common.GNU +include $(ACE_ROOT)/include/makeinclude/rules.nonested.GNU + +include $(ACE_ROOT)/include/makeinclude/rules.local.GNU +include $(TAO_ROOT)/taoconfig.mk + +CPPFLAGS += -I../.. -I../../tao -I../../.. +ifeq ($(static_libs),1) + ifneq ($(LIB),) + CPPFLAGS += -DTAO_AS_STATIC_LIBS -DACE_AS_STATIC_LIBS + endif +endif + + +LDFLAGS += -L../../tao -L../../../ace -L../../../lib + +#---------------------------------------------------------------------------- +# Local targets +#---------------------------------------------------------------------------- +.: + -@mkdir -p "." + + +ifndef kylix +$(BIN): $(addprefix $(VDIR), $(OBJS)) + $(LINK.cc) $(LDFLAGS) $(CC_OUTPUT_FLAG) $@ $^ $(VLDLIBS) $(POSTLINK) +else +$(BIN): $(addprefix $(VDIR), $(OBJS)) + $(LINK.cc) $(LDFLAGS) $(CC_OUTPUT_FLAG) $(VLDLIBS) $(BORINITEXEOBJ) $(POSTLINK) $^, $@,, +endif + +realclean: clean +ifneq ($(GENERATED_DIRTY),) + -$(RM) -r $(GENERATED_DIRTY) +endif + diff --git a/TAO/tests/Bug_1635_Regression/README b/TAO/tests/Bug_1635_Regression/README new file mode 100644 index 00000000000..96331bc4cb6 --- /dev/null +++ b/TAO/tests/Bug_1635_Regression/README @@ -0,0 +1,7 @@ +This test provides regression for Bug 1635: +"Enhancement - provide date and time stamping to the TAO log file" + +The fix allows the setting of a system property that results in a date and time stamp being applied to all ACE log messages. + +The client program merely initialises and destroys an ORB - enough activity to prompt the writing of debug messages. The run_test.pl checks the debug output produced for timestamps. + diff --git a/TAO/tests/Bug_1635_Regression/client.cpp b/TAO/tests/Bug_1635_Regression/client.cpp new file mode 100644 index 00000000000..27a5795d1c1 --- /dev/null +++ b/TAO/tests/Bug_1635_Regression/client.cpp @@ -0,0 +1,26 @@ +// +// $Id$ +// +#include "tao/corba.h" + +int +main (int argc, char *argv[]) +{ + ACE_DECLARE_NEW_CORBA_ENV; + + ACE_TRY + { + CORBA::ORB_var orb = + CORBA::ORB_init (argc, argv, "" ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + } + ACE_CATCHANY + { + ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, + "SERVER (%P): Caught exception:"); + return 1; + } + ACE_ENDTRY; + + return 0; +} diff --git a/TAO/tests/Bug_1635_Regression/run_test.pl b/TAO/tests/Bug_1635_Regression/run_test.pl new file mode 100755 index 00000000000..41231eb00e8 --- /dev/null +++ b/TAO/tests/Bug_1635_Regression/run_test.pl @@ -0,0 +1,78 @@ + +# $Id$ +eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' + & eval 'exec perl -S $0 $argv:q' + if 0; + +# -*- perl -*- + +use lib '../../../bin'; +use PerlACE::Run_Test; + +# The file we want TAO to write debug messages to +$debug_file = PerlACE::LocalFile ("debug.log"); +unlink $debug_file; + +# The client process - simply initialises an ORB to create some minimal debug +$CLIENT = new PerlACE::Process(PerlACE::LocalFile("client")); +$CLIENT->Arguments("-ORBDebugLevel 10 -ORBLogFile $debug_file"); + +sub run_client +{ + # Run the client + if ($CLIENT->SpawnWaitKill (30) != 0) + { + print STDERR "ERROR: Bug 1635 Regression failed. Client failed to run.\n"; + $ENV {'TAO_LOG_TIMESTAMP'} = ""; + exit 1; + } + + # Open the log file, read a line, close, and delete it. + open (HANDLE, "$debug_file"); + $_ = <HANDLE>; + close HANDLE; + unlink $debug_file; +} + +# Run the client with no value for the environment variable +$ENV {'ACE_LOG_TIMESTAMP'} = ""; +run_client; + +# Check result is as expected, i.e. starts like: +# TAO (12...etc. +if (!/^TAO \(/) +{ + print STDERR "ERROR: Bug 1635 Regression failed. Unexpected normal log format.\n"; + $ENV {'ACE_LOG_TIMESTAMP'} = ""; + exit 1; +} + +# Try again with the 'TIME' logging property set +$ENV {'ACE_LOG_TIMESTAMP'} = "TIME"; +run_client; + +# Check result is as expected, i.e. starts like: +# 14:36:38.222000|TAO (12...etc. +if (!/^\d{2}:\d{2}:\d{2}.\d{6}\|TAO \(/) +{ + print STDERR "ERROR: Bug 1635 Regression failed. Unexpected 'TIME' log format.\n"; + $ENV {'ACE_LOG_TIMESTAMP'} = ""; + exit 1; +} + +# Try again with the 'DATE' logging property set +$ENV {'ACE_LOG_TIMESTAMP'} = "DATE"; +run_client; + +# Check result is as expected, i.e. starts like: +# Wed Feb 12 2003 14:36:38.222000|TAO (12...etc. +if (!/^[A-Z][a-z]{2} [A-Z][a-z]{2} \d{2} \d{4} \d{2}:\d{2}:\d{2}.\d{6}\|TAO \(/) +{ + print STDERR "ERROR: Bug 1635 Regression failed. Unexpected 'DATE' log format.\n"; + $ENV {'ACE_LOG_TIMESTAMP'} = ""; + exit 1; +} + +$ENV {'ACE_LOG_TIMESTAMP'} = ""; +exit 0; + diff --git a/TAO/tests/Bug_1636_Regression/Bug_1636_Regression.dsw b/TAO/tests/Bug_1636_Regression/Bug_1636_Regression.dsw new file mode 100644 index 00000000000..104271784fe --- /dev/null +++ b/TAO/tests/Bug_1636_Regression/Bug_1636_Regression.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "bug_1636_testclient"=bug_1636_testclient.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/TAO/tests/Bug_1636_Regression/Makefile b/TAO/tests/Bug_1636_Regression/Makefile new file mode 100644 index 00000000000..9cd5a082cb8 --- /dev/null +++ b/TAO/tests/Bug_1636_Regression/Makefile @@ -0,0 +1,19 @@ +#---------------------------------------------------------------------------- +# GNU ACE Workspace +# +# @file Makefile +# +# $Id$ +# +# This file was automatically generated by MPC. Any changes made directly to +# this file will be lost the next time it is generated. +# +#---------------------------------------------------------------------------- + +TARGETS_NESTED = all debug profile optimize install deinstall clean realclean clobber depend rcs_info idl_stubs + +$(TARGETS_NESTED): + @$(MAKE) -f Makefile.bug_1636_testclient $(@); + +reverseclean: + @$(MAKE) -f Makefile.bug_1636_testclient realclean diff --git a/TAO/tests/Bug_1636_Regression/Makefile.bug_1636_testclient b/TAO/tests/Bug_1636_Regression/Makefile.bug_1636_testclient new file mode 100644 index 00000000000..eb33625d195 --- /dev/null +++ b/TAO/tests/Bug_1636_Regression/Makefile.bug_1636_testclient @@ -0,0 +1,114 @@ +#---------------------------------------------------------------------------- +# GNU Makefile +# +# @file Makefile.bug_1636_testclient +# +# $Id$ +# +# This file was automatically generated by MPC. Any changes made directly to +# this file will be lost the next time it is generated. +# +#---------------------------------------------------------------------------- +MAKEFILE = Makefile.bug_1636_testclient +DEPENDENCY_FILE = .depend.Makefile.bug_1636_testclient +BIN_UNCHECKED = client + +ifndef TAO_ROOT + TAO_ROOT = $(ACE_ROOT)/TAO +endif +ifndef CIAO_ROOT + CIAO_ROOT = $(TAO_ROOT)/CIAO +endif + +TAO_IDL = ../../../bin/tao_idl +IDL_FILES = test +IDL_SRC = $(foreach ext, C.cpp S.cpp, $(foreach file, $(IDL_FILES), $(file)$(ext))) + +FILES = \ + testS \ + testC \ + client + +#---------------------------------------------------------------------------- +# Include macros and targets +#---------------------------------------------------------------------------- +LDLIBS = -lTAO_DynamicAny -lTAO_DynamicInterface -lTAO_PortableServer -lTAO -lACE +include $(ACE_ROOT)/include/makeinclude/wrapper_macros.GNU +## We don't need the ACELIB setting from wrapper_macros.GNU +ACELIB = +include $(TAO_ROOT)/rules.tao.GNU + +# To build multiple executables in the same directory on AIX, it works +# best to have a template directory per project. +# The compiler/linker isn't too smart about instantiating templates... +ifdef TEMPINCDIR +TEMPINCDIR := $(TEMPINCDIR)/bug_1636_testclient + +all: $(TEMPINCDIR) + +$(TEMPINCDIR): + @-test -d $(TEMPINCDIR) || mkdir -p $(TEMPINCDIR) $(ACE_NUL_STDERR) + +endif + +BIN = $(BIN_UNCHECKED) + +OBJS = $(addsuffix .o, $(notdir $(FILES))) +SRC = $(addsuffix .cpp, $(FILES)) + +ifneq ($(BIN),) +all: idl_stubs + +# This rule forces make to run the idl_stubs +# target before building any of the source files. +testS.cpp testC.cpp client.cpp: idl_stubs +endif + +include $(ACE_ROOT)/include/makeinclude/macros.GNU +include $(ACE_ROOT)/include/makeinclude/rules.common.GNU +include $(ACE_ROOT)/include/makeinclude/rules.nonested.GNU + +include $(ACE_ROOT)/include/makeinclude/rules.local.GNU +include $(TAO_ROOT)/taoconfig.mk + +CPPFLAGS += -I../../../include -I../../orbsvcs -I. -I../.. -I../../tao -I../../.. +ifeq ($(static_libs),1) + ifneq ($(LIB),) + CPPFLAGS += -DTAO_AS_STATIC_LIBS -DACE_AS_STATIC_LIBS + endif +endif + + +LDFLAGS += -L../../tao/DynamicAny -L../../tao/DynamicInterface -L../../../ace -L../../tao -L../../tao/PortableServer -L../../../lib + +TAO_IDLFLAGS += -Ge 1 -Sc -Wb,pre_include=ace/pre.h -Wb,post_include=ace/post.h +#---------------------------------------------------------------------------- +# Local targets +#---------------------------------------------------------------------------- +.: + -@mkdir -p "." + + +ADDITIONAL_IDL_TARGETS = +# IDL File Directory: . + +ifneq ($(ADDITIONAL_IDL_TARGETS),) +idl_stubs: $(ADDITIONAL_IDL_TARGETS) +endif + +.PRECIOUS: $(foreach ext, $(IDL_EXT), $(foreach file, $(IDL_FILES), $(file)$(ext))) + +ifndef kylix +$(BIN): $(addprefix $(VDIR), $(OBJS)) + $(LINK.cc) $(LDFLAGS) $(CC_OUTPUT_FLAG) $@ $^ $(VLDLIBS) $(POSTLINK) +else +$(BIN): $(addprefix $(VDIR), $(OBJS)) + $(LINK.cc) $(LDFLAGS) $(CC_OUTPUT_FLAG) $(VLDLIBS) $(BORINITEXEOBJ) $(POSTLINK) $^, $@,, +endif + +realclean: clean + -$(RM) $(foreach ext, $(IDL_EXT), $(foreach file, $(IDL_FILES), $(file)$(ext))) +ifneq ($(GENERATED_DIRTY),) + -$(RM) -r $(GENERATED_DIRTY) +endif + diff --git a/TAO/tests/Bug_1636_Regression/README b/TAO/tests/Bug_1636_Regression/README new file mode 100644 index 00000000000..1a653378856 --- /dev/null +++ b/TAO/tests/Bug_1636_Regression/README @@ -0,0 +1,14 @@ +An Any is populated with a union whose member is not empty. +Call dynAny->from_any (Any); +to put the Any'd union into a DynAny object. +Call dynAny->to_any () : Any +to get the Any'd union from a DynAny object. + +Repeat the process except this time, use a union whose member is empty, +ie, _default () has been called on the union. + +from_any (Any) succeeded. +to_any () : Any failed. + +to_any () needs to check for an empty union before adding its member +to a CDR stream.
\ No newline at end of file diff --git a/TAO/tests/Bug_1636_Regression/bug_1636_testclient.dsp b/TAO/tests/Bug_1636_Regression/bug_1636_testclient.dsp new file mode 100644 index 00000000000..061eea7b1ad --- /dev/null +++ b/TAO/tests/Bug_1636_Regression/bug_1636_testclient.dsp @@ -0,0 +1,192 @@ +# Microsoft Developer Studio Project File - Name="bug_1636_testclient" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=bug_1636_testclient - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE run the tool that generated this project file and specify the
+!MESSAGE nmake output type. You can then use the following command:
+!MESSAGE
+!MESSAGE NMAKE /f "bug_1636_testclient.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "bug_1636_testclient.mak" CFG="bug_1636_testclient - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "bug_1636_testclient - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "bug_1636_testclient - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "bug_1636_testclient - Win32 Release"
+
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release\bug_1636_testclient"
+# PROP Target_Dir ""
+# ADD CPP /nologo /O2 /W3 /GX /MD /GR /I "..\..\..\include" /I "..\..\orbsvcs" /I "." /I "..\.." /I "..\..\tao" /I "..\..\.." /D NDEBUG /D WIN32 /D _CONSOLE /FD /c
+# SUBTRACT CPP /YX
+# ADD RSC /l 0x409 /d NDEBUG /i "..\..\..\include" /i "..\..\orbsvcs" /i "." /i "..\.." /i "..\..\tao" /i "..\..\.."
+BSC32=bscmake.exe
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD LINK32 advapi32.lib user32.lib /INCREMENTAL:NO TAO_DynamicAny.lib TAO_DynamicInterface.lib TAO_PortableServer.lib TAO.lib ACE.lib /libpath:"..\..\tao\DynamicAny" /libpath:"..\..\tao\DynamicInterface" /libpath:"..\..\..\ace" /libpath:"..\..\tao" /libpath:"..\..\tao\PortableServer" /libpath:"..\..\..\lib" /nologo /version:1.3.5 /subsystem:console /pdb:"Release\client.pdb" /machine:I386 /out:"Release\client.exe"
+
+!ELSEIF "$(CFG)" == "bug_1636_testclient - Win32 Debug"
+
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "."
+# PROP Intermediate_Dir "Debug\bug_1636_testclient"
+# PROP Target_Dir ""
+# ADD CPP /nologo /Ob0 /W3 /Gm /GX /Zi /MDd /GR /Gy /I "..\..\..\include" /I "..\..\orbsvcs" /I "." /I "..\.." /I "..\..\tao" /I "..\..\.." /D _DEBUG /D WIN32 /D _CONSOLE /FD /c
+# SUBTRACT CPP /YX
+# ADD RSC /l 0x409 /d _DEBUG /i "..\..\..\include" /i "..\..\orbsvcs" /i "." /i "..\.." /i "..\..\tao" /i "..\..\.."
+BSC32=bscmake.exe
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD LINK32 advapi32.lib user32.lib /INCREMENTAL:NO TAO_DynamicAnyd.lib TAO_DynamicInterfaced.lib TAO_PortableServerd.lib TAOd.lib ACEd.lib /libpath:"..\..\tao\DynamicAny" /libpath:"..\..\tao\DynamicInterface" /libpath:"..\..\..\ace" /libpath:"..\..\tao" /libpath:"..\..\tao\PortableServer" /libpath:"..\..\..\lib" /nologo /version:1.3.5 /subsystem:console /pdb:".\client.pdb" /debug /machine:I386 /out:".\client.exe"
+
+!ENDIF
+
+# Begin Target
+
+# Name "bug_1636_testclient - Win32 Release"
+# Name "bug_1636_testclient - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;cxx;c"
+# Begin Source File
+
+SOURCE=".\client.cpp"
+# End Source File
+# Begin Source File
+
+SOURCE=".\testC.cpp"
+# End Source File
+# Begin Source File
+
+SOURCE=".\testS.cpp"
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hh"
+# Begin Source File
+
+SOURCE=".\testC.h"
+# End Source File
+# Begin Source File
+
+SOURCE=".\testS.h"
+# End Source File
+# End Group
+# Begin Group "Inline Files"
+
+# PROP Default_Filter "i;inl"
+# Begin Source File
+
+SOURCE=".\testC.i"
+# End Source File
+# Begin Source File
+
+SOURCE=".\testS.i"
+# End Source File
+# End Group
+# Begin Group "Documentation"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=".\README"
+# End Source File
+# End Group
+# Begin Group "IDL Files"
+
+# PROP Default_Filter "idl"
+# Begin Source File
+
+SOURCE=".\test.idl"
+
+!IF "$(CFG)" == "bug_1636_testclient - Win32 Release"
+
+# PROP Ignore_Default_Tool 1
+# Begin Custom Build - Invoking IDL Compiler on $(InputPath)
+InputPath=.\test.idl
+InputName=test
+InputDir=.
+
+BuildCmds= \
+ PATH=%PATH%;..\..\..\lib \
+ ..\..\..\bin\tao_idl -o . -Ge 1 -Sc -Wb,pre_include=ace\pre.h -Wb,post_include=ace\post.h $(InputPath)
+
+".\$(InputName)C.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+".\$(InputName)C.i" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+".\$(InputName)C.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+".\$(InputName)S.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+".\$(InputName)S.i" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+".\$(InputName)S.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+# End Custom Build
+
+!ELSEIF "$(CFG)" == "bug_1636_testclient - Win32 Debug"
+
+# PROP Ignore_Default_Tool 1
+# Begin Custom Build - Invoking IDL Compiler on $(InputPath)
+InputPath=.\test.idl
+InputName=test
+InputDir=.
+
+BuildCmds= \
+ PATH=%PATH%;..\..\..\lib \
+ ..\..\..\bin\tao_idl -o . -Ge 1 -Sc -Wb,pre_include=ace\pre.h -Wb,post_include=ace\post.h $(InputPath)
+
+".\$(InputName)C.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+".\$(InputName)C.i" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+".\$(InputName)C.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+".\$(InputName)S.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+".\$(InputName)S.i" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+".\$(InputName)S.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+# End Custom Build
+
+!ENDIF
+
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/TAO/tests/Bug_1636_Regression/client.cpp b/TAO/tests/Bug_1636_Regression/client.cpp new file mode 100644 index 00000000000..e0aed23ec1a --- /dev/null +++ b/TAO/tests/Bug_1636_Regression/client.cpp @@ -0,0 +1,72 @@ +// +// $Id$ +// +#include "tao/DynamicInterface/Request.h" +#include "tao/DynamicAny/DynAnyFactory.h" +#include "tao/corba.h" +#include "testC.h" + +int main (int argc, char* argv[]) +{ + ACE_TRY_NEW_ENV + { + CORBA::ORB_var orb = + CORBA::ORB_init (argc, argv, + "" /* the ORB name, it can be anything! */ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + ACE_DEBUG ((LM_DEBUG,"Get reference to the DynAny Factory\n")); + CORBA::Object_var obj = orb->resolve_initial_references("DynAnyFactory" ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + DynamicAny::DynAnyFactory_var daf = + DynamicAny::DynAnyFactory::_narrow(obj.in() ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + UnionIecs::S_i_num s_num; + s_num.type_num = UnionIecs::E_type_num_called_party_number; + s_num.nature = 5; + + UnionIecs::S_num num1; + num1.num(s_num); + CORBA::Any MyAny1; + MyAny1 <<= num1; + + ACE_DEBUG ((LM_DEBUG, "calling from_any () and to_any () with non-empty union...\n")); + DynamicAny::DynAny_var dynany1 = daf-> create_dyn_any_from_type_code (UnionIecs::_tc_S_num ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + dynany1->from_any(MyAny1 ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + CORBA::Any_var arg1 = dynany1->to_any(ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_TRY_CHECK; + ACE_DEBUG ((LM_DEBUG, "...done\n")); + + UnionIecs::S_num num2; + num2._default(); + CORBA::Any MyAny2; + MyAny2 <<= num2; + + ACE_DEBUG ((LM_DEBUG, "calling from_any () and to_any () with empty union...\n" )); + DynamicAny::DynAny_var dynany2 = daf-> create_dyn_any_from_type_code (UnionIecs::_tc_S_num ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + dynany2->from_any(MyAny2 ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + CORBA::Any_var arg2 = dynany2->to_any(ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_TRY_CHECK; + ACE_DEBUG ((LM_DEBUG,"...done.\nTest passed.\n")); + + // Finally destroy the ORB + orb->destroy (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_TRY_CHECK; + } + ACE_CATCHANY + { + ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "Exception - test failed:\n"); + return 1; + } + ACE_ENDTRY; + + ACE_CHECK_RETURN(1); + + return 0; +} diff --git a/TAO/tests/Bug_1636_Regression/run_test.pl b/TAO/tests/Bug_1636_Regression/run_test.pl new file mode 100755 index 00000000000..3003b155caa --- /dev/null +++ b/TAO/tests/Bug_1636_Regression/run_test.pl @@ -0,0 +1,25 @@ +eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' + & eval 'exec perl -S $0 $argv:q' + if 0; + +# $Id$ +# -*- perl -*- + +# This is a Perl script that runs the federated Name Service timeout test. +# It starts all the servers and clients as necessary. + +use lib '../../../bin'; + +use PerlACE::Run_Test; + +$status = 0; + +$CLIENT = new PerlACE::Process ("client"); + +$client = $CLIENT->SpawnWaitKill (30); + +if ($client !=0 ) { + print STDERR "ERROR: client returned $client\n"; +} + +exit $status; diff --git a/TAO/tests/Bug_1636_Regression/test.idl b/TAO/tests/Bug_1636_Regression/test.idl new file mode 100644 index 00000000000..bcc36ac8d64 --- /dev/null +++ b/TAO/tests/Bug_1636_Regression/test.idl @@ -0,0 +1,26 @@ +// +// $Id$ +// +module UnionIecs +{ + enum E_type_num + { + E_type_num_called_party_number, + E_type_num_calling_party_number, + E_type_num_inconnu + }; + + typedef octet T_champ_num; + + struct S_i_num + { + E_type_num type_num; + T_champ_num nature; + }; + + union S_num switch (boolean) + { + case TRUE : + S_i_num num; + } ; +}; diff --git a/TAO/tests/Bug_1636_Regression/test.mpc b/TAO/tests/Bug_1636_Regression/test.mpc new file mode 100644 index 00000000000..cef0456422a --- /dev/null +++ b/TAO/tests/Bug_1636_Regression/test.mpc @@ -0,0 +1,18 @@ +project (bug_1636_testclient) : client { + exename = client + includes += $(ACE_ROOT)/include $(TAO_ROOT)/orbsvcs . + libpaths += $(TAO_ROOT)/tao/DynamicAny $(TAO_ROOT)/tao/DynamicInterface $(ACE_ROOT)/ace $(TAO_ROOT)/tao $(TAO_ROOT)/tao/PortableServer + libs += TAO_DynamicAny TAO_DynamicInterface TAO_PortableServer + + + + IDL_Files { + test.idl + } + + Source_Files { + testS.cpp + testC.cpp + client.cpp + } +} diff --git a/TAO/tests/Bug_1639_Regression/Bug_1639_Regression.dsw b/TAO/tests/Bug_1639_Regression/Bug_1639_Regression.dsw new file mode 100644 index 00000000000..f00a970bc43 --- /dev/null +++ b/TAO/tests/Bug_1639_Regression/Bug_1639_Regression.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "Bug_1639_testclient"=Bug_1639_testclient.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/TAO/tests/Bug_1639_Regression/Bug_1639_testclient.dsp b/TAO/tests/Bug_1639_Regression/Bug_1639_testclient.dsp new file mode 100644 index 00000000000..8ff79967224 --- /dev/null +++ b/TAO/tests/Bug_1639_Regression/Bug_1639_testclient.dsp @@ -0,0 +1,184 @@ +# Microsoft Developer Studio Project File - Name="Bug_1639_testclient" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=Bug_1639_testclient - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE run the tool that generated this project file and specify the
+!MESSAGE nmake output type. You can then use the following command:
+!MESSAGE
+!MESSAGE NMAKE /f "Bug_1639_testclient.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "Bug_1639_testclient.mak" CFG="Bug_1639_testclient - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "Bug_1639_testclient - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "Bug_1639_testclient - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "Bug_1639_testclient - Win32 Release"
+
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release\Bug_1639_testclient"
+# PROP Target_Dir ""
+# ADD CPP /nologo /O2 /W3 /GX /MD /GR /I "..\..\..\include" /I "." /I "..\.." /I "..\..\tao" /I "..\..\.." /D NDEBUG /D WIN32 /D _CONSOLE /FD /c
+# SUBTRACT CPP /YX
+# ADD RSC /l 0x409 /d NDEBUG /i "..\..\..\include" /i "." /i "..\.." /i "..\..\tao" /i "..\..\.."
+BSC32=bscmake.exe
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD LINK32 advapi32.lib user32.lib /INCREMENTAL:NO TAO_PortableServer.lib TAO_DynamicAny.lib TAO.lib ACE.lib /libpath:"..\..\..\ace" /libpath:"." /libpath:"..\..\tao\PortableServer" /libpath:"..\..\tao\DynamicAny" /libpath:"..\..\tao" /libpath:"..\..\..\lib" /nologo /version:1.3.5 /subsystem:console /pdb:"Release\client.pdb" /machine:I386 /out:"Release\client.exe"
+
+!ELSEIF "$(CFG)" == "Bug_1639_testclient - Win32 Debug"
+
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "."
+# PROP Intermediate_Dir "Debug\Bug_1639_testclient"
+# PROP Target_Dir ""
+# ADD CPP /nologo /Ob0 /W3 /Gm /GX /Zi /MDd /GR /Gy /I "..\..\..\include" /I "." /I "..\.." /I "..\..\tao" /I "..\..\.." /D _DEBUG /D WIN32 /D _CONSOLE /FD /c
+# SUBTRACT CPP /YX
+# ADD RSC /l 0x409 /d _DEBUG /i "..\..\..\include" /i "." /i "..\.." /i "..\..\tao" /i "..\..\.."
+BSC32=bscmake.exe
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD LINK32 advapi32.lib user32.lib /INCREMENTAL:NO TAO_PortableServerd.lib TAO_DynamicAnyd.lib TAOd.lib ACEd.lib /libpath:"..\..\..\ace" /libpath:"." /libpath:"..\..\tao\PortableServer" /libpath:"..\..\tao\DynamicAny" /libpath:"..\..\tao" /libpath:"..\..\..\lib" /nologo /version:1.3.5 /subsystem:console /pdb:".\client.pdb" /debug /machine:I386 /out:".\client.exe"
+
+!ENDIF
+
+# Begin Target
+
+# Name "Bug_1639_testclient - Win32 Release"
+# Name "Bug_1639_testclient - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;cxx;c"
+# Begin Source File
+
+SOURCE=".\struct_client.cpp"
+# End Source File
+# Begin Source File
+
+SOURCE=".\structC.cpp"
+# End Source File
+# Begin Source File
+
+SOURCE=".\structS.cpp"
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hh"
+# Begin Source File
+
+SOURCE=".\structC.h"
+# End Source File
+# Begin Source File
+
+SOURCE=".\structS.h"
+# End Source File
+# End Group
+# Begin Group "Inline Files"
+
+# PROP Default_Filter "i;inl"
+# Begin Source File
+
+SOURCE=".\structC.i"
+# End Source File
+# Begin Source File
+
+SOURCE=".\structS.i"
+# End Source File
+# End Group
+# Begin Group "IDL Files"
+
+# PROP Default_Filter "idl"
+# Begin Source File
+
+SOURCE=".\struct.idl"
+
+!IF "$(CFG)" == "Bug_1639_testclient - Win32 Release"
+
+# PROP Ignore_Default_Tool 1
+# Begin Custom Build - Invoking IDL Compiler on $(InputPath)
+InputPath=.\struct.idl
+InputName=struct
+InputDir=.
+
+BuildCmds= \
+ PATH=%PATH%;..\..\..\lib \
+ ..\..\..\bin\tao_idl -o . -Ge 1 -Sc -Wb,pre_include=ace\pre.h -Wb,post_include=ace\post.h $(InputPath)
+
+".\$(InputName)C.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+".\$(InputName)C.i" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+".\$(InputName)C.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+".\$(InputName)S.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+".\$(InputName)S.i" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+".\$(InputName)S.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+# End Custom Build
+
+!ELSEIF "$(CFG)" == "Bug_1639_testclient - Win32 Debug"
+
+# PROP Ignore_Default_Tool 1
+# Begin Custom Build - Invoking IDL Compiler on $(InputPath)
+InputPath=.\struct.idl
+InputName=struct
+InputDir=.
+
+BuildCmds= \
+ PATH=%PATH%;..\..\..\lib \
+ ..\..\..\bin\tao_idl -o . -Ge 1 -Sc -Wb,pre_include=ace\pre.h -Wb,post_include=ace\post.h $(InputPath)
+
+".\$(InputName)C.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+".\$(InputName)C.i" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+".\$(InputName)C.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+".\$(InputName)S.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+".\$(InputName)S.i" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+".\$(InputName)S.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+# End Custom Build
+
+!ENDIF
+
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/TAO/tests/Bug_1639_Regression/Makefile b/TAO/tests/Bug_1639_Regression/Makefile new file mode 100644 index 00000000000..1556b0e7128 --- /dev/null +++ b/TAO/tests/Bug_1639_Regression/Makefile @@ -0,0 +1,19 @@ +#---------------------------------------------------------------------------- +# GNU ACE Workspace +# +# @file Makefile +# +# $Id$ +# +# This file was automatically generated by MPC. Any changes made directly to +# this file will be lost the next time it is generated. +# +#---------------------------------------------------------------------------- + +TARGETS_NESTED = all debug profile optimize install deinstall clean realclean clobber depend rcs_info idl_stubs + +$(TARGETS_NESTED): + @$(MAKE) -f Makefile.Bug_1639_testclient $(@); + +reverseclean: + @$(MAKE) -f Makefile.Bug_1639_testclient realclean diff --git a/TAO/tests/Bug_1639_Regression/Makefile.Bug_1639_testclient b/TAO/tests/Bug_1639_Regression/Makefile.Bug_1639_testclient new file mode 100644 index 00000000000..7f8f2855822 --- /dev/null +++ b/TAO/tests/Bug_1639_Regression/Makefile.Bug_1639_testclient @@ -0,0 +1,114 @@ +#---------------------------------------------------------------------------- +# GNU Makefile +# +# @file Makefile.Bug_1639_testclient +# +# $Id$ +# +# This file was automatically generated by MPC. Any changes made directly to +# this file will be lost the next time it is generated. +# +#---------------------------------------------------------------------------- +MAKEFILE = Makefile.Bug_1639_testclient +DEPENDENCY_FILE = .depend.Makefile.Bug_1639_testclient +BIN_UNCHECKED = client + +ifndef TAO_ROOT + TAO_ROOT = $(ACE_ROOT)/TAO +endif +ifndef CIAO_ROOT + CIAO_ROOT = $(TAO_ROOT)/CIAO +endif + +TAO_IDL = ../../../bin/tao_idl +IDL_FILES = struct +IDL_SRC = $(foreach ext, C.cpp S.cpp, $(foreach file, $(IDL_FILES), $(file)$(ext))) + +FILES = \ + struct_client \ + structC \ + structS + +#---------------------------------------------------------------------------- +# Include macros and targets +#---------------------------------------------------------------------------- +LDLIBS = -lTAO_PortableServer -lTAO_DynamicAny -lTAO -lACE +include $(ACE_ROOT)/include/makeinclude/wrapper_macros.GNU +## We don't need the ACELIB setting from wrapper_macros.GNU +ACELIB = +include $(TAO_ROOT)/rules.tao.GNU + +# To build multiple executables in the same directory on AIX, it works +# best to have a template directory per project. +# The compiler/linker isn't too smart about instantiating templates... +ifdef TEMPINCDIR +TEMPINCDIR := $(TEMPINCDIR)/Bug_1639_testclient + +all: $(TEMPINCDIR) + +$(TEMPINCDIR): + @-test -d $(TEMPINCDIR) || mkdir -p $(TEMPINCDIR) $(ACE_NUL_STDERR) + +endif + +BIN = $(BIN_UNCHECKED) + +OBJS = $(addsuffix .o, $(notdir $(FILES))) +SRC = $(addsuffix .cpp, $(FILES)) + +ifneq ($(BIN),) +all: idl_stubs + +# This rule forces make to run the idl_stubs +# target before building any of the source files. +struct_client.cpp structC.cpp structS.cpp: idl_stubs +endif + +include $(ACE_ROOT)/include/makeinclude/macros.GNU +include $(ACE_ROOT)/include/makeinclude/rules.common.GNU +include $(ACE_ROOT)/include/makeinclude/rules.nonested.GNU + +include $(ACE_ROOT)/include/makeinclude/rules.local.GNU +include $(TAO_ROOT)/taoconfig.mk + +CPPFLAGS += -I../../../include -I. -I../.. -I../../tao -I../../.. +ifeq ($(static_libs),1) + ifneq ($(LIB),) + CPPFLAGS += -DTAO_AS_STATIC_LIBS -DACE_AS_STATIC_LIBS + endif +endif + + +LDFLAGS += -L../../../ace -L. -L../../tao/PortableServer -L../../tao/DynamicAny -L../../tao -L../../../lib + +TAO_IDLFLAGS += -Ge 1 -Sc -Wb,pre_include=ace/pre.h -Wb,post_include=ace/post.h +#---------------------------------------------------------------------------- +# Local targets +#---------------------------------------------------------------------------- +.: + -@mkdir -p "." + + +ADDITIONAL_IDL_TARGETS = +# IDL File Directory: . + +ifneq ($(ADDITIONAL_IDL_TARGETS),) +idl_stubs: $(ADDITIONAL_IDL_TARGETS) +endif + +.PRECIOUS: $(foreach ext, $(IDL_EXT), $(foreach file, $(IDL_FILES), $(file)$(ext))) + +ifndef kylix +$(BIN): $(addprefix $(VDIR), $(OBJS)) + $(LINK.cc) $(LDFLAGS) $(CC_OUTPUT_FLAG) $@ $^ $(VLDLIBS) $(POSTLINK) +else +$(BIN): $(addprefix $(VDIR), $(OBJS)) + $(LINK.cc) $(LDFLAGS) $(CC_OUTPUT_FLAG) $(VLDLIBS) $(BORINITEXEOBJ) $(POSTLINK) $^, $@,, +endif + +realclean: clean + -$(RM) $(foreach ext, $(IDL_EXT), $(foreach file, $(IDL_FILES), $(file)$(ext))) +ifneq ($(GENERATED_DIRTY),) + -$(RM) -r $(GENERATED_DIRTY) +endif + diff --git a/TAO/tests/Bug_1639_Regression/run_test.pl b/TAO/tests/Bug_1639_Regression/run_test.pl new file mode 100755 index 00000000000..7c101f09272 --- /dev/null +++ b/TAO/tests/Bug_1639_Regression/run_test.pl @@ -0,0 +1,26 @@ +eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' + & eval 'exec perl -S $0 $argv:q' + if 0; + +# $Id$ +# -*- perl -*- + +use lib "../../../bin"; +use PerlACE::Run_Test; + +$status = 0; +$type = ""; + +print STDERR "\nDynamic Any struct and union alias tests\n"; + +$CL = new PerlACE::Process ("client"); + +$client = $CL->SpawnWaitKill (30); + +if ($client != 0) +{ + print STDERR "ERROR: client returned $client\n"; + $status = 1; +} + +exit $status; diff --git a/TAO/tests/Bug_1639_Regression/struct.idl b/TAO/tests/Bug_1639_Regression/struct.idl new file mode 100644 index 00000000000..ab7ae27e229 --- /dev/null +++ b/TAO/tests/Bug_1639_Regression/struct.idl @@ -0,0 +1,20 @@ +// +// $Id$ +// +module StructTest { + + struct MyStruct { + octet MyOctet; + unsigned long MyLong; + }; + + typedef MyStruct MyStructAlias; + + union MyUnion switch (boolean) { + case TRUE : + unsigned short MyShort; + }; + + typedef MyUnion MyUnionAlias; + +}; diff --git a/TAO/tests/Bug_1639_Regression/struct_client.cpp b/TAO/tests/Bug_1639_Regression/struct_client.cpp new file mode 100644 index 00000000000..6f9f1a99bab --- /dev/null +++ b/TAO/tests/Bug_1639_Regression/struct_client.cpp @@ -0,0 +1,118 @@ +// +// $Id$ +// +#include "tao/corba.h" +#include "tao/DynamicAny/DynAnyFactory.h" +#include "structC.h" +#include <iostream.h> + +using namespace StructTest; +using namespace DynamicAny; +; +//-------------------------------------------------------------------- +int main (int argc, char * argv[]) +//-------------------------------------------------------------------- +{ + + // Generic catch handler + try { + + // Initialize the ORB + // ------------------ + CORBA::ORB_var orb; // _var, so we don't need/may not CORBA::release(orb) + try { + orb = CORBA::ORB_init (argc, argv); + } catch (...) { + cerr << "Cannot initialize ORB" << endl; + throw; + } + + // Get reference to the DynAny Factory + CORBA::Object_var obj = orb->resolve_initial_references("DynAnyFactory"); + + DynAnyFactory_var daf = + DynAnyFactory::_narrow(obj.in()); + + MyStruct my_struct; + MyStructAlias my_struct_alias; + MyUnion my_union; + MyUnionAlias my_union_alias; + + CORBA::Any any_struct; + CORBA::Any any_struct_alias; + CORBA::Any any_union; + CORBA::Any any_union_alias; + + // Write the structs and unions to anys so we can get the TypeCode info + any_struct <<= my_struct; + any_struct_alias <<= my_struct_alias; + any_union <<= my_union; + any_union_alias <<= my_union_alias; + + // Explicitly set the TypeCode for the aliased types because the any + // doesn't take care of aliases + any_struct_alias.type(_tc_MyStructAlias); + any_union_alias.type(_tc_MyUnionAlias); + + CORBA::TypeCode_var tc_struct = any_struct.type(); + CORBA::TypeCode_var tc_struct_alias = any_struct_alias.type(); + CORBA::TypeCode_var tc_union = any_union.type(); + CORBA::TypeCode_var tc_union_alias = any_union_alias.type(); + + cout << "Type Code of the struct: " << tc_struct->kind() << endl; + cout << "Type Code of the struct alias: " << tc_struct_alias->kind() << endl; + cout << "Type Code of the union: " << tc_union->kind() << endl; + cout << "Type Code of the union alias: " << tc_union_alias->kind() << endl; + + // equal returns true only when the TypeCodes are exactly the same. + if (tc_struct->equal(tc_struct_alias.in())) { + cout << "Type Codes are identical" << endl; + } else { + cout << "Type Codes are different" << endl; + } + // equivalent returns true when the TypeCode is an alias + if (tc_struct->equivalent(tc_struct_alias.in())) { + cout << "Type Codes are equivalent" << endl; + } else { + cout << "Type Codes are not equivalent" << endl; + } + + DynAny_var da_struct = daf->create_dyn_any_from_type_code (tc_struct.in()); + + try { + DynAny_var da_struct_alias = daf->create_dyn_any_from_type_code (tc_struct_alias.in()); + } catch ( const CORBA::UNKNOWN &) { + cout << "CORBA::UNKNOWN exception when calling create_dyn_any_from_type_code (tc_struct_alias)" << endl; + } + + try { + DynAny_var da_struct_alias = daf->create_dyn_any (any_struct_alias); + } catch ( const CORBA::UNKNOWN &) { + cout << "CORBA::UNKNOWN exception when calling create_dyn_any (any_struct_alias)" << endl; + } + + DynAny_var da_union = daf->create_dyn_any_from_type_code (tc_union.in()); + + try { + DynAny_var da_union_alias = daf->create_dyn_any_from_type_code (tc_union_alias.in()); + } catch ( const CORBA::UNKNOWN &) { + cout << "CORBA::UNKNOWN exception when calling create_dyn_any_from_type_code (tc_union_alias)" << endl; + } + + try { + DynAny_var da_union_alias = daf->create_dyn_any (any_union_alias); + } catch ( const CORBA::UNKNOWN &) { + cout << "CORBA::UNKNOWN exception when calling create_dyn_any (any_union_alias)" << endl; + } + + } // end try + + catch (const CORBA::Exception & e) { + cerr << "Uncaught CORBA exception: " << e << endl; + return 1; + } + catch (...) { + return 1; + } + return 0; +} diff --git a/TAO/tests/Bug_1639_Regression/test.mpc b/TAO/tests/Bug_1639_Regression/test.mpc new file mode 100644 index 00000000000..dea1512eed9 --- /dev/null +++ b/TAO/tests/Bug_1639_Regression/test.mpc @@ -0,0 +1,17 @@ +project (Bug_1639_testclient) : taoexe { + exename = client + includes += $(ACE_ROOT)/include . + libpaths += $(ACE_ROOT)/ace . $(TAO_ROOT)/tao/PortableServer $(TAO_ROOT)/tao/DynamicAny $(TAO_ROOT)/tao + libs += ACE TAO TAO_PortableServer TAO_DynamicAny + + Source_Files { + struct_client.cpp + structC.cpp + structS.cpp + } + + IDL_Files { + struct.idl + } + +} diff --git a/TAO/utils/catior/catior.cpp b/TAO/utils/catior/catior.cpp index f95bce30896..d85caf6393a 100644 --- a/TAO/utils/catior/catior.cpp +++ b/TAO/utils/catior/catior.cpp @@ -434,7 +434,7 @@ catpoop (char* string int main (int argc, char *argv[]) { - ACE_Get_Opt get_opt (argc, argv, "f:n:"); + ACE_Get_Opt get_opt (argc, argv, "f:"); ACE_DECLARE_NEW_CORBA_ENV; CORBA::ORB_var orb_var = CORBA::ORB_init (argc, argv, "TAO" ACE_ENV_ARG_PARAMETER); @@ -445,15 +445,6 @@ main (int argc, char *argv[]) { switch (opt) { - case 'n': - // Read the CosName from the NamingService convert the - // object_ptr to a CORBA::String_var via the call to - // object_to_string. - ACE_DEBUG ((LM_DEBUG, - "opening a connection to the NamingService\n" - "resolving the CosName %s\n", - get_opt.opt_arg ())); - break; case 'f': { // Read the file into a CORBA::String_var. @@ -548,7 +539,6 @@ main (int argc, char *argv[]) ACE_ERROR_RETURN ((LM_ERROR, "Usage: %s " "-f filename " - "-n CosName " "\n" "Reads an IOR " "and dumps the contents to stdout " diff --git a/TAO/utils/nslist/README b/TAO/utils/nslist/README index ca819e52f0e..7f2b8ffd16c 100644 --- a/TAO/utils/nslist/README +++ b/TAO/utils/nslist/README @@ -3,7 +3,7 @@ $Id$ This utility lists the current entries in the Naming Service in a nicely formatted manner. To run it, just type -% nslist [ --ior | --nsior ] +% nslist [[ --ior ][ --ctxior ] | --nsior ] and it'll print the contents of the default "NameService" returned by resolve_initial_references(). You can select the IOR of this @@ -19,14 +19,20 @@ The contents of the default NameService will be displayed, including the protocol and endpoint of each object reference. -nslist accepts two other options: +nslist accepts three other options: % nslist --ior will print the contents of the NameService, including the IOR of each reference entry and the IOR of the NameService itself. +% nslist --ctxior + +will additionally print the IORs of any subcontexts found within NameService. + % nslist --nsior will print *only* the IOR of the NameService itself, with no other text. This can be used to locate the TAO NameService for non-TAO applications. + + diff --git a/TAO/utils/nslist/nsadd.cpp b/TAO/utils/nslist/nsadd.cpp index c9c6769198a..6ae185ed78b 100644 --- a/TAO/utils/nslist/nsadd.cpp +++ b/TAO/utils/nslist/nsadd.cpp @@ -113,13 +113,13 @@ main (int argc, char *argv[]) int ntoks = 0; char *toks[20]; while ((cp = ACE_OS::strtok (bp, "/")) != 0) - { + { toks[ntoks] = cp; ntoks++; if (cp == 0) break; bp = 0; // way strtok works - } + } // now assign name = toks[ntoks] char lastname[BUFSIZ]; @@ -127,11 +127,31 @@ main (int argc, char *argv[]) // search for '.' in name; if exists then the part after '.' is the kind char *kind = ACE_OS::strchr (lastname, '.'); if (kind != 0) - { + { *kind = 0; kind++; - } - + } + + // Create any necessary subcontexts. + for (CORBA::Long subs = 1; subs < ntoks; subs++) + { + ACE_TRY_EX(inner) + { + CosNaming::Name the_context (subs); + the_context.length (subs); + for (CORBA::Long i=0; i<subs; i++) + { + the_context[i].id = CORBA::string_dup (toks[i]); + } + root_nc->bind_new_context(the_context); + ACE_TRY_CHECK_EX(inner); + } + ACE_CATCHANY + { + } + ACE_ENDTRY; + } + ACE_TRY_CHECK; CosNaming::Name the_name (ntoks); the_name.length (ntoks); diff --git a/TAO/utils/nslist/nslist.cpp b/TAO/utils/nslist/nslist.cpp index c5693ea2710..9bb06063168 100644 --- a/TAO/utils/nslist/nslist.cpp +++ b/TAO/utils/nslist/nslist.cpp @@ -26,6 +26,7 @@ CORBA::ORB_var orb; int showIOR = 0; int showNSonly = 0; +int showCtxIOR = 0; static void list_context (CosNaming::NamingContext_ptr nc, int level @@ -129,9 +130,22 @@ show_chunk (CosNaming::NamingContext_ptr nc, // level... if (bl[i].binding_type == CosNaming::ncontext) { - ACE_DEBUG ((LM_DEBUG, - ": naming context\n")); + if (showCtxIOR) + { + CORBA::String_var str = + orb->object_to_string (obj.in () + ACE_ENV_ARG_PARAMETER); + ACE_CHECK; + ACE_DEBUG ((LM_DEBUG, + ": naming context : <%s>\n", + str.in ())); + } + else + { + ACE_DEBUG ((LM_DEBUG, + ": naming context\n")); + } CosNaming::NamingContext_var xc = CosNaming::NamingContext::_narrow (obj.in () ACE_ENV_ARG_PARAMETER); ACE_CHECK; @@ -232,9 +246,13 @@ main (int argc, char *argv[]) } showNSonly = 1; } + else if (ACE_OS::strcmp (*argv, "--ctxior") == 0) + { + showCtxIOR = 1; + } else if (ACE_OS::strncmp (*argv, "--", 2) == 0) { - ACE_DEBUG ((LM_DEBUG, "Usage: %s [ --ior | --nsior ]\n", pname)); + ACE_DEBUG ((LM_DEBUG, "Usage: %s [[ --ior ][ --ctxior ] | --nsior ]\n", pname)); return 1; } argc--; |