### 8.4 A small example of a DSA application

In this section we will write a very simple client-server application using PolyORB DSA. The server will provide a `Remote Call Interface` composed of a single `Echo_String` function that will take a String and return it to the caller.

Here is the code for the server:

`server.ads`:

         ------------------------------------------------------------------------------
         --                                                                          --
         --                           POLYORB COMPONENTS                             --
         --                                                                          --
         --                               S E R V E R                                --
         --                                                                          --
         --                                 S p e c                                  --
         --                                                                          --
         --         Copyright (C) 2011-2012, Free Software Foundation, Inc.          --
         --                                                                          --
         -- This is free software;  you can redistribute it  and/or modify it  under --
         -- terms of the  GNU General Public License as published  by the Free Soft- --
         -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
         -- sion.  This software is distributed in the hope  that it will be useful, --
         -- but WITHOUT ANY WARRANTY;  without even the implied warranty of MERCHAN- --
         -- TABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public --
         -- License for  more details.                                               --
         --                                                                          --
         -- You should have received a copy of the GNU General Public License and    --
         -- a copy of the GCC Runtime Library Exception along with this program;     --
         -- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
         -- <http://www.gnu.org/licenses/>.                                          --
         --                                                                          --
         --                  PolyORB is maintained by AdaCore                        --
         --                     (email: sales@adacore.com)                           --
         --                                                                          --
         ------------------------------------------------------------------------------

         package Server is
            pragma Remote_Call_Interface;
            function Echo_String (S : String) return String;
         end Server;

`server.adb`:

         ------------------------------------------------------------------------------
         --                                                                          --
         --                           POLYORB COMPONENTS                             --
         --                                                                          --
         --                               S E R V E R                                --
         --                                                                          --
         --                                 B o d y                                  --
         --                                                                          --
         --         Copyright (C) 2011-2012, Free Software Foundation, Inc.          --
         --                                                                          --
         -- This is free software;  you can redistribute it  and/or modify it  under --
         -- terms of the  GNU General Public License as published  by the Free Soft- --
         -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
         -- sion.  This software is distributed in the hope  that it will be useful, --
         -- but WITHOUT ANY WARRANTY;  without even the implied warranty of MERCHAN- --
         -- TABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public --
         -- License for  more details.                                               --
         --                                                                          --
         -- You should have received a copy of the GNU General Public License and    --
         -- a copy of the GCC Runtime Library Exception along with this program;     --
         -- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
         -- <http://www.gnu.org/licenses/>.                                          --
         --                                                                          --
         --                  PolyORB is maintained by AdaCore                        --
         --                     (email: sales@adacore.com)                           --
         --                                                                          --
         ------------------------------------------------------------------------------

         package body Server is

            function Echo_String (S : String) return String is
            begin
               return S;
            end Echo_String;

         end Server;

And here is the code for the client:

`client.adb`:

         ------------------------------------------------------------------------------
         --                                                                          --
         --                           POLYORB COMPONENTS                             --
         --                                                                          --
         --                               C L I E N T                                --
         --                                                                          --
         --                                 B o d y                                  --
         --                                                                          --
         --         Copyright (C) 2011-2012, Free Software Foundation, Inc.          --
         --                                                                          --
         -- This is free software;  you can redistribute it  and/or modify it  under --
         -- terms of the  GNU General Public License as published  by the Free Soft- --
         -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
         -- sion.  This software is distributed in the hope  that it will be useful, --
         -- but WITHOUT ANY WARRANTY;  without even the implied warranty of MERCHAN- --
         -- TABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public --
         -- License for  more details.                                               --
         --                                                                          --
         -- You should have received a copy of the GNU General Public License and    --
         -- a copy of the GCC Runtime Library Exception along with this program;     --
         -- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
         -- <http://www.gnu.org/licenses/>.                                          --
         --                                                                          --
         --                  PolyORB is maintained by AdaCore                        --
         --                     (email: sales@adacore.com)                           --
         --                                                                          --
         ------------------------------------------------------------------------------

         with Ada.Exceptions;
         with Ada.Text_IO; use Ada.Text_IO;
         with Server;

         procedure Client is
         begin
            Put_Line ("The client has started!");
            Put ("Thus spake my server upon me:");
            Put_Line (Server.Echo_String ("Hi!"));
         exception
            when E : others =>
               Put_Line ("Got " & Ada.Exceptions.Exception_Information (E));
         end Client;

For more details about the Distributed Systems Annex, see the Ada Reference Manual [ISO06].