summaryrefslogtreecommitdiff
path: root/TAO/docs/tutorials/Quoter/Simple/Impl-Repo/index.html
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/docs/tutorials/Quoter/Simple/Impl-Repo/index.html')
-rw-r--r--TAO/docs/tutorials/Quoter/Simple/Impl-Repo/index.html177
1 files changed, 177 insertions, 0 deletions
diff --git a/TAO/docs/tutorials/Quoter/Simple/Impl-Repo/index.html b/TAO/docs/tutorials/Quoter/Simple/Impl-Repo/index.html
new file mode 100644
index 00000000000..df534fe1a6e
--- /dev/null
+++ b/TAO/docs/tutorials/Quoter/Simple/Impl-Repo/index.html
@@ -0,0 +1,177 @@
+<!Doctype HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+ <head>
+ <title>Implementation Repository</title>
+ <!-- $Id$ -->
+ </head>
+
+ <body text = "#000000"
+ link="#000fff"
+ vlink="#ffofof"
+ bgcolor="#ffffff">
+
+ <h3>Implementation Repository</h3>
+ <P> In the previous example, the client must contact the server
+ at least once. If the server has been moved to a different host or
+ port, or if the server is down, binding between the client and
+ the server fails. Indirect binding through an external location
+ broker like the Implementation Repository solves this problem.
+ </P>
+ <P>An implementation repository maintains a data structure known
+ as a server table to keep track of the servers. It maintains a
+ registry of known servers, records which server is currently
+ running on which host and at which port number, and starts
+ servers on demand if they are registered to do so.
+ </P>
+ <P> When a server
+ creates a persistent reference, it sets the address and port
+ number in the profile body of the IOR to point at the
+ implementation repository that is responsible for the server.
+ When a client uses this IOR, it gets connected to the
+ implementation repository, provided the implementation
+ repository is not down. The repository decodes this IOR and uses
+ the POA name from the object key to index into its server
+ table. The repository replies with the current addressing
+ information of the actual server. The client now sends the
+ request to the actual server.
+ </P>
+ <P>In this example, let's proceed to modify our previous stock
+ factory example to support indirect binding through an
+ implementation repository.
+ </P>
+ <P>The only thing we have to do for this is to register our
+ childPOA with the implementation repository.
+ </P>
+ <PRE>
+ orb->_tao_add_to_IOR_table ("childPOA", stock_factory.in ());
+ </PRE>
+ <P> Then, we stringify all the object references as usual and
+ print them out.
+ </P>
+ <PRE>
+ CORBA::String_var ior = orb->object_to_string (stock_factory.in ());
+ </PRE>
+ <H3>Exercise</H3>
+ Modify the <a href=../Server/server.cpp>server.cpp</a> in the simple
+ server to create the persistent child POA.
+ You can use the same
+ <a href=../Quoter.idl>Quoter.idl</a>
+ <a href=../Server/Stock_i.h>Stock_i.h</a>
+ <a href=../Server/Stock_i.cpp>Stock_i.cpp</a>
+ <a href=../Server/Stock_Factory_i.h>Stock_Factory_i.h</a>
+ <a href=../Server/Stock_Factory_i.cpp>Stock_Factory_i.cpp</a>
+ <a href=../Client/client.cpp>Client.cpp</a>
+ You can use this <a href=GNUmakefile.Quoter_Simple_Impl_Repo_Server>Makefile</a>.
+ <H3>Solution</H3>
+ Compare your server.cpp with <a href = server.cpp>server.cpp</a> file.
+
+ <H3>Testing</H3>
+ <P>To test your changes, you need to run four programs. The first
+ step is to start up the Implementation Repository provided
+ with TAO. The Implementation Repository is split into one locator at least
+ one activator. The locator provides the interface visible
+ to the application intending to use the repository (in our case,
+ the client), while the activators do the real work of activating
+ and maintaining servers.
+ </P>
+
+ <P>First, we start the locator. We need to dump the IOR of the ImplRepo_Service to a file,
+ so that both the activator and the client can find the locator.
+ </P>
+ <PRE>
+ $ $TAO_ROOT/orbsvcs/ImplRepo_Service/ImplRepo_Service -o implrepo.ior -d 0 -ORBobjrefstyle URL &
+ </PRE>
+
+ <P>Second, we start the activator, pointing it to the locator's IOR file.
+ </P>
+ <PRE>
+ $ $TAO_ROOT/orbsvcs/ImplRepo_Service/ImR_Activator -ORBInitRef ImplRepoService=file://implrepo.ior
+
+ ImR Activator: Starting doc.ece.uci.edu
+ ImR Activator: Registered with ImR.
+ </PRE>
+
+ <P> Next, we need to register our server with the implementation
+ repository. We can use the
+ <CODE>$TAO_ROOT/orbsvcs/ImplRepo_Service/tao_imr</CODE>
+ application provided with TAO to add our server to the server
+ database in the implementation repository.
+ </P>
+ <PRE>
+ $ $TAO_ROOT/orbsvcs/ImplRepo_Service/tao_imr -ORBInitRef
+ ImplRepoService=file://implrepo.ior add childPOA -c
+ "./server -ORBUseIMR 1 -ORBobjrefstyle URL -ORBInitRef
+ ImplRepoService=file://implrepo.ior"
+
+ Successfully registered server <childPOA>
+ </PRE>
+ <p> On Windows platforms, use this command instead to register the server
+ in the implementation repository
+ </p>
+ <PRE>
+ $ACE_ROOT/bin/tao_imr -ORBInitRef ImplRepoService=file://implrepo.ior
+ add childPOA -c "./server -ORBUseIMR 1 -ORBobjrefstyle URL
+ -ORBInitRef ImplRepoService=file://implrepo.ior"
+ </PRE>
+ <P> We specify the <CODE>-ORBInitRef</CODE> option to use the IOR in
+ the <CODE>implrepo.ior</CODE> file and the <CODE>-ORBUseIMR</CODE>
+ option to tell the server to use the IMR for notification of its
+ startup and shutdown.
+ </P>
+ <P>The next step is to generate a simple IOR for our server
+ to be used with the IMR, using the
+ <CODE>ior</CODE> option, and write it to <CODE>stock_factory.ior</CODE>.
+
+ </P>
+ <PRE>
+ $tao_imr -ORBInitRef ImplRepoService=file://implrepo.ior ior
+ childPOA -f stock_factory.ior
+
+ corbaloc:iiop:1.1@doc.ece.uci.edu:2690/childPOA
+ </PRE>
+ <P> From now, the implementation repository is all set to keep
+ track of our server and do the needful on a method invocation
+ on our server.
+ </P>
+ <P> Now, execute the client as usual.
+ </P>
+ <PRE>
+ ./client file://stock_factory.ior MSFT RHAT
+
+ The price of a stock in "Microsoft, Inc." is $91
+ The price of a stock in "RedHat, Inc." is $210
+ </PRE>
+ <P> For testing the persistency of the POA, let's shut down the
+ server and then run the client.
+ </P>
+ <PRE>
+ $tao_imr -ORBInitRef ImplRepoService=file://implrepo.ior
+ shutdown childPOA
+
+ Successfully shutdown server <childPOA>
+
+ ./client file://stock_factory.ior MSFT RHAT
+
+ The price of a stock in "RedHat, Inc." is $210
+ The price of a stock in "Microsoft, Inc." is $91
+ </PRE>
+ <H3>More Reading</H3>
+ <P>More information on Implementation Repository is
+ <A HREF="../../../../../docs/implrepo/index.html">here</A>.
+ </P>
+ <P>The <A HREF="http://www.triodia.com/staff/michi-henning.html">Henning</A> and <A HREF="http://www.iona.com/hyplan/vinoski/">Vinoski</A>
+ <A HREF="http://www.iona.com/hyplan/vinoski/#book">CORBA book</A> discusses POA policies in detail. Likewise,
+ the Schmidt and Vinoski
+ <A HREF="http://www.cs.wustl.edu/~schmidt/report-doc.html">columns</A> in C++ Report also include several articles about the POA. Finally,
+ the <A HREF="http://www.cs.wustl.edu/~schmidt/TAO.html">TAO</A>
+ distribution includes <A HREF="../../../../../examples/POA">examples</A> that illustrate how
+ to use the POA policies.
+ </P>
+ <hr>
+ <address><a href="mailto:pgontla@ece.uci.edu">Priyanka Gontla</a></address>
+<!-- Created: Wed Mar 29 17:35:30 PST 2000 -->
+<!-- hhmts start -->
+Last modified: Sat May 19 17:19:07 CDT 2001
+<!-- hhmts end -->
+ </body>
+</html>