summaryrefslogtreecommitdiff
path: root/TAO/tao/ImR_Client/ImplRepo.idl
blob: 9e465cac545a491e8a4c2f41ca729ff10e3600be (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
// -*- IDL -*-

/**
 */

#ifndef TAO_IMRCLIENT_IMPLREPO_PIDL
#define TAO_IMRCLIENT_IMPLREPO_PIDL

#include "ServerObject.idl"
#include "tao/StringSeq.pidl"

module ImplementationRepository
{
  // = Exceptions

  /// Object already bound in the Implementation Repository
  exception AlreadyRegistered {};

  /// The server could not be restarted.
  exception CannotActivate
  {
    string reason;
  };

  /// Object not found in the Implementation Repository
  exception NotFound {};

  /// Operation cannot be completed due to Activator version
  /// or other incompatibility
  exception CannotComplete
  {
    string reason;
  };

  /// One environment variable/value pair.
  struct EnvironmentVariable
  {
    string name;
    string value;
  };

  /// Complete Environment.
  typedef sequence<EnvironmentVariable> EnvironmentList;

  /// The type of Activation
  enum ActivationMode {NORMAL, MANUAL, PER_CLIENT, AUTO_START};

  /// Options used to start up the server.
  struct StartupOptions
  {
    /// Startup command (program name and arguments).
    string command_line;

    /// Environment Variables.
    EnvironmentList environment;

    /// Working directory.
    string working_directory;

    /// Activation Mode
    ActivationMode activation;

    /// Name of the activator
    string activator;

    /// Number of retries allowed
    long start_limit;
  };

  /// Status of server
  enum ServerActiveStatus
  {
    /// No attempt as been made to determine status.
    ACTIVE_MAYBE,

    /// Server has been succesfully pinged within ping interval.
    ACTIVE_YES,

    /// Server was not able to be pinged within ping interval.
    ACTIVE_NO
  };

  struct ServerInformation
  {
    /// Server name.
    string server;

    /// How to start up the server.
    StartupOptions startup;

    /// This is used in places that require a partial IOR with
    /// just the ObjectKey missing.
    string partial_ior;

    ServerActiveStatus activeStatus;
  };

  typedef sequence <ServerInformation> ServerInformationList;

  /**
    * @brief The Server Information Iterator Interface
    *
    * Interface for iterating over servers returned with
    * Administration::list ().
    */
  interface ServerInformationIterator
  {
    /// This operation returns at most the requested number of
    /// servers.
    /// If how_many == 0, then returns all servers
    boolean next_n (in unsigned long how_many,
                    out ServerInformationList servers);

    /// This operation destroys the iterator.
    void destroy ();
  };

  /**
    * @brief The Implementation Repository Administration Interface
    *
    * This interface exports all the administration functionality of
    * the Implementation Repository.
    */
  interface Administration
  {
    /// Activate server that is named @a server.
    ///
    /// The @c NotFound exception is raised when @a server is not found
    /// in the Implementation Repository.  The @c CannotActivate exception
    /// is raised when @a server is found in the Repository but could not be
    /// activated.
    void activate_server (in string server)
      raises (NotFound, CannotActivate);

    /// Add/Update the the @a server.
    /// The @c NotFound exception is raised when the activator specified
    /// in the options is not registered.
    void add_or_update_server (in string server, in StartupOptions options)
      raises(NotFound);

    /// Remove @a server from the Implementation Repository.
    ///
    /// The @c NotFound exception is raised when @a server is not found
    /// in the Implementation Repository.
    void remove_server (in string server)
      raises (NotFound);

    /// Tries to shutdown the server, first gracefully, then ungracefully.
    ///
    /// The @c NotFound exception is raised when @a server is not found
    /// in the Implementation Repository.
    void shutdown_server (in string server)
      raises (NotFound);

    /// Used to notify the Implementation Repository that @a server is alive
    /// and well at @a partial_ior.
    ///
    /// The @c NotFound exception is raised when @a server is not found
    /// in the Implementation Repository.
    void server_is_running (in string server,
                            in string partial_ior,
                            in ServerObject server_object)
      raises (NotFound);

    /// Used to tell the Implementation Repository that @a server is shutting
    /// down.
    ///
    /// The @c NotFound exception is raised when @a server is not found
    /// in the Implementation Repository.

    void server_is_shutting_down (in string server)
      raises (NotFound);

    /// Returns the startup information for a given @a server.
    void find (in string server, out ServerInformation info);

    /// Returns at most @a how_many servers in @a server_list.  If there
    /// are additional servers, they can be received through the
    /// @a server_iterator.  If there are no more servers, then
    /// @a server_iterator is null.
    /// If @a how_many == 0, then returns all servers.
    /// If @a determine_active_status is true then
    /// set ServerInformation::active_status attribute by determining
    /// if the server is alive.
    void list (in unsigned long how_many,
               in boolean determine_active_status,
               out ServerInformationList server_list,
               out ServerInformationIterator server_iterator);

    /// Shutdown the ImR, optionally shutting down registered
    /// activators and servers first.
    oneway void shutdown(in boolean activators, in boolean servers);
  };

  /**
    * @brief The Extended Implementation Repository Administration Interface
    *
    * This interface adds operations in a way that maintains compatibility
    */
  interface AdministrationExt : Administration
  {
    /// Identify a set of peer poas that exist in the same process.
    void link_servers (in string server, in CORBA::StringSeq peers)
      raises(NotFound, CannotComplete);

    /// Have the appropriate activator send a signal to the named server process
    void kill_server (in string server, in short signum)
      raises(NotFound, CannotComplete);

    /// Combine the action of shutting down a running server instance if any via
    /// a shutdown command if signum is 0, or via kill if signum is nonzero
    void force_remove_server (in string server, in short signum)
      raises(NotFound, CannotComplete);
  };
};

#endif /* TAO_IMRCLIENT_IMPLREPO_PIDL */