1 |
|
---|
2 | DIM version 14.07 Release Notes
|
---|
3 |
|
---|
4 | Notes 1 and 2 for Unix Users only
|
---|
5 | NOTE 1: In order to "make" DIM two environment variables should be set:
|
---|
6 | OS = one of {HP-UX, AIX, OSF1, Solaris, SunOS, LynxOS, Linux}
|
---|
7 | DIMDIR = the path name of DIM's top level directory
|
---|
8 | The user should then go to DIM's top level directory and do:
|
---|
9 | > source .setup
|
---|
10 | > gmake all
|
---|
11 | Or, if there is no support for C++ on the machine:
|
---|
12 | > gmake CPP=no all
|
---|
13 |
|
---|
14 | NOTE 2: The Name Server (Dns), DID, servers and clients (if running in
|
---|
15 | background) should be started whith the output redirected to a
|
---|
16 | logfile ex:
|
---|
17 | Dns </dev/null >& dns.log &
|
---|
18 |
|
---|
19 | NOTE 3: The Version Number service provided by servers is now set to 1407
|
---|
20 | (version 14.07).
|
---|
21 |
|
---|
22 | 07/04/2004
|
---|
23 | Changes for version 14.0:
|
---|
24 | - Spring Cleanup
|
---|
25 | Cleaned up inline methods out of include files.
|
---|
26 | Fixed some virtual destructors
|
---|
27 | Removed some unnecessary system include files
|
---|
28 | Fixed ctime_r to work on all platforms (Solaris, LynxOS too)
|
---|
29 |
|
---|
30 | 21/04/2004
|
---|
31 | Changes for version 14.1:
|
---|
32 | - Now if a server declares an exit handler (DimServer::addExitHandler
|
---|
33 | or dis_add_exit_handler) the user is responsible for exiting.
|
---|
34 | DIM will not exit by itself anymore.
|
---|
35 | - The windows version now also distributes MSVCRTD.DLL.
|
---|
36 | - Fixed a bug where servers could get confused if similar longish
|
---|
37 | service names were used in different servers.
|
---|
38 |
|
---|
39 | 18/05/2004
|
---|
40 | Changes for version 14.2:
|
---|
41 | - Cleaned up some "C" warnings
|
---|
42 | - Linux Did didn't display RPC formats properly - fixed.
|
---|
43 | - RPC structures were not transfered correctly back to the client,
|
---|
44 | the format of the structure was currupted - fixed.
|
---|
45 | - Added a New constructor and updateService method for the Java class
|
---|
46 | DimService. These allow the creation and update of a DimService by
|
---|
47 | passing another DimService. The data and format of the DimService
|
---|
48 | will be copied to the new one. Usefull for structured data.
|
---|
49 |
|
---|
50 | 02/06/2004
|
---|
51 | Changes for version 14.2-1:
|
---|
52 | - Fixed a bug in the java version that would make DIP crash when
|
---|
53 | extracting data items (file format.java)
|
---|
54 |
|
---|
55 | 12/06/2004
|
---|
56 | Changes for version 14.3:
|
---|
57 |
|
---|
58 | - DIM Server Exit_handler: A server can specify an exit handler
|
---|
59 | by using:
|
---|
60 | dis_add_exit_handler(exitHandler) or
|
---|
61 | DimServer::addExitHandler()/virtual void exitHandler()
|
---|
62 | The exitHandler will be called in the following conditions:
|
---|
63 | - DNS node undefined
|
---|
64 | - Services already declared in DNS
|
---|
65 | - DNS doesn't accept connections from this machine
|
---|
66 | - An EXIT command from a client
|
---|
67 | If the user doesn't declare an exit handler, the DIM server will
|
---|
68 | exit, otherwise it is up to the user.
|
---|
69 |
|
---|
70 | - DIM Error_handler: A server or a client can specify an error_handler
|
---|
71 | by using:
|
---|
72 | dis_add_error_handler(errorHandler)
|
---|
73 | dic_add_error_handler(errorHandler)
|
---|
74 | DimServer::addErrorHandler()/virtual void errorHandler(...)
|
---|
75 | DimClient::addErrorHandler()/virtual void errorHandler(...)
|
---|
76 | The error_handler will be called whenever DIM wants to report an
|
---|
77 | error (in this case all stdout/stderr prints will be suppressed).
|
---|
78 | The errorHandler is called with the following parameters:
|
---|
79 | int severity:
|
---|
80 | 0: info
|
---|
81 | 1: warning
|
---|
82 | 2: error
|
---|
83 | 3: fatal
|
---|
84 | int error_code
|
---|
85 | possible codes listed in dim_common.h
|
---|
86 | char *msg
|
---|
87 | If the user declared an error handler for a server and an error with
|
---|
88 | severity = fatal is received the exit handler will also be called.
|
---|
89 | For a client if an error with severity = fatal is received and there
|
---|
90 | is no error handler declared the process will exit.
|
---|
91 |
|
---|
92 | - Java DIM: the same functionality is available in the form of a
|
---|
93 | DimErrorHandler class and a DimExitHandler class which can be used as
|
---|
94 | in the example:
|
---|
95 | public static void main(String[] args) {
|
---|
96 | DimErrorHandler erid = new DimErrorHandler()
|
---|
97 | {
|
---|
98 | public void errorHandler(int severity, int code, String msg)
|
---|
99 | {
|
---|
100 | System.out.println("Error: "+msg+" sev: "+
|
---|
101 | severity);
|
---|
102 | }
|
---|
103 | };
|
---|
104 | DimExitHandler exid = new DimExitHandler()
|
---|
105 | {
|
---|
106 | public void exitHandler(int code)
|
---|
107 | {
|
---|
108 | System.out.println("Exit: "+code);
|
---|
109 | }
|
---|
110 | };
|
---|
111 | ...
|
---|
112 |
|
---|
113 | - Getting and Setting the DIM_DNS_NODE from a program:
|
---|
114 | The calls:
|
---|
115 | dim_set_dns_node
|
---|
116 | dim_get_dns_node
|
---|
117 | and the corresponding C++ calls:
|
---|
118 | DimServer::setDnsNode and DimServer::getDnsNode,
|
---|
119 | DimClient::setDnsNode and DimClient::getDnsNode
|
---|
120 | already existed,
|
---|
121 | they have now been complemented with:
|
---|
122 | dim_set_dns_port
|
---|
123 | dim_get_dns_port
|
---|
124 | and the static C++ calls:
|
---|
125 | DimServer::setDnsNode(node, port),DimServer::getDnsPort(),
|
---|
126 | DimClient::setDnsNode(node, port), DimClient::getDnsPort()
|
---|
127 |
|
---|
128 | - In Java the folowing methods have been added to the classes DimServer
|
---|
129 | and DimClient:
|
---|
130 | public static void setDnsNode(String nodes);
|
---|
131 | public static void setDnsNode(String nodes, int port);
|
---|
132 | public static String getDnsNode();
|
---|
133 | public static int getDnsPort();
|
---|
134 |
|
---|
135 | - the Java method DimService.getName() has been added.
|
---|
136 |
|
---|
137 | - In C++ the creation of a new DimService could fail, for example, if
|
---|
138 | the service already existed in this server, this was not reported, since
|
---|
139 | a constructor can't return a value.
|
---|
140 | With the new error handling mechanisms, a user can declare an error_handler,
|
---|
141 | check if the error code is DIMSVCDUPLC and generate an exception which
|
---|
142 | will be thrown withing the DimService creation.
|
---|
143 | - Dim used to pass timestamps between servers and clients as an integer
|
---|
144 | for seconds since January 1970 and a short for milliseconds.
|
---|
145 | Now it will be one integer also for the milliseconds. By default DIM
|
---|
146 | still uses milliseconds, but if a server passes nanoseconds to
|
---|
147 | dis_set_timestamp the client will receive nanoseconds when doing
|
---|
148 | dic_get_timestamp.
|
---|
149 |
|
---|
150 | 08/07/2004
|
---|
151 | Changes for version 14.4:
|
---|
152 |
|
---|
153 | - Java DIM: In order to allow a different error handler to be called for the
|
---|
154 | server and the client (if both in the same process) The calls:
|
---|
155 | DimServer.addErrorHandler(DimErrorHandler handler) and
|
---|
156 | DimClient.addErrorHandler(DimErrorHandler handler)
|
---|
157 | Should be called respectively by the server or the client in order to install
|
---|
158 | the Error Handler. For compatibitlity, the call:
|
---|
159 | DimServer.addExitHandler(DimErrorHandler handler)
|
---|
160 | was also added.
|
---|
161 |
|
---|
162 | They can now be used as in the example (for a server):
|
---|
163 | public static void main(String[] args) {
|
---|
164 | DimErrorHandler erid = new DimErrorHandler()
|
---|
165 | {
|
---|
166 | public void errorHandler(int severity, int code, String msg)
|
---|
167 | {
|
---|
168 | System.out.println("Error: "+msg+" sev: "+
|
---|
169 | severity);
|
---|
170 | }
|
---|
171 | };
|
---|
172 | DimServer.addErrorHandler(erid);
|
---|
173 | DimExitHandler exid = new DimExitHandler()
|
---|
174 | {
|
---|
175 | public void exitHandler(int code)
|
---|
176 | {
|
---|
177 | System.out.println("Exit: "+code);
|
---|
178 | }
|
---|
179 | };
|
---|
180 | DimServer.addExitHandler(exit);
|
---|
181 | ...
|
---|
182 |
|
---|
183 | - In a server it was already possible to find out inside a callback (for example
|
---|
184 | when a command was received):
|
---|
185 | - from which client id the message came:
|
---|
186 | int dis_get_conn_id()
|
---|
187 | - The name of this client in the form <pid>@<node_name>
|
---|
188 | int dis_get_client(char *name)
|
---|
189 | The equivalent C++ calls:
|
---|
190 | int DimServer::getClientId();
|
---|
191 | char *DimServer::getClientName();
|
---|
192 | And Java calls:
|
---|
193 | int DimServer.getClientId();
|
---|
194 | String DimServer.getClientName();
|
---|
195 | Where also available.
|
---|
196 |
|
---|
197 | These calls were now complemented in 3 ways:
|
---|
198 | 1 - They can be done also by clients to find out which server is providing a service
|
---|
199 | inside a callback (for example when a service is received).
|
---|
200 | For this purpose the following "C" calls where added:
|
---|
201 | - from which server id the message came:
|
---|
202 | int dic_get_conn_id()
|
---|
203 | - The name of this server in the form <server_name>@<node_name>
|
---|
204 | int dic_get_server(char *name)
|
---|
205 | And The equivalent C++ calls:
|
---|
206 | int DimClient::getServerId();
|
---|
207 | char *DimClient::getServerName();
|
---|
208 | And Java calls:
|
---|
209 | int DimClient.getServerId();
|
---|
210 | String DimClient.getServerName();
|
---|
211 | 2 - These calls are also available inside the errorHandler callbacks.
|
---|
212 | Can be used to find out if the error originated from a specific connection,
|
---|
213 | in which case conn_id (or clientID or ServerId) != 0.
|
---|
214 | Or if it is a generic error, afecting all connections in which case conn_id = 0.
|
---|
215 | 3 - A new type of calls has been added which allows to find out:
|
---|
216 | For a server - which services are being used by the current client (i.e. the
|
---|
217 | client that triggered the execution of this callback)
|
---|
218 | For a client - Which services are being provided by the current server (i.e
|
---|
219 | the server that triggered the execution of this callback)
|
---|
220 |
|
---|
221 | This calls are the following in "C":
|
---|
222 | - char *dis_get_client_services(conn_id)
|
---|
223 | - char *dic_get_server_services(conn_id)
|
---|
224 | They return a list of services separated by '\n'
|
---|
225 | In C++:
|
---|
226 | - char **DimServer::getClientServices();
|
---|
227 | - char **DimClient::getServerServices();
|
---|
228 | They return an array of pointers to service names. The array is terminated by
|
---|
229 | a null pointer.
|
---|
230 | In Java:
|
---|
231 | - String[] DimServer.getClientServices();
|
---|
232 | - String[] DimClient.getServerServices();
|
---|
233 |
|
---|
234 | An example in C++ of the usage of the new calls in an ErrorHandler:
|
---|
235 |
|
---|
236 | class ErrorHandler : public DimErrorHandler
|
---|
237 | {
|
---|
238 | void errorHandler(int severity, int code, char *msg)
|
---|
239 | {
|
---|
240 | int index = 0;
|
---|
241 | char **services;
|
---|
242 | cout << severity << " " << msg << endl;
|
---|
243 | services = DimClient::getServerServices();
|
---|
244 | cout<< "from "<< DimClient::getServerName() << " services:" << endl;
|
---|
245 | while(services[index])
|
---|
246 | {
|
---|
247 | cout << services[index] << endl;
|
---|
248 | index++;
|
---|
249 | }
|
---|
250 | }
|
---|
251 | public:
|
---|
252 | ErrorHandler() {DimClient::addErrorHandler(this);}
|
---|
253 | };
|
---|
254 |
|
---|
255 | And in Java:
|
---|
256 |
|
---|
257 | ...
|
---|
258 | DimErrorHandler eid = new DimErrorHandler()
|
---|
259 | {
|
---|
260 | public void errorHandler(int severity, int code, String msg)
|
---|
261 | {
|
---|
262 | System.out.println("Error: "+msg+" sev: "+severity);
|
---|
263 | String[] list = DimClient.getServerServices();
|
---|
264 | System.out.println("Services: ");
|
---|
265 | for(int i = 0; i < list.length; i++)
|
---|
266 | System.out.println(list[i]);
|
---|
267 | }
|
---|
268 | };
|
---|
269 | DimClient.addErrorHandler(eid);
|
---|
270 |
|
---|
271 | 02/08/2004
|
---|
272 | Changes for version 14.5:
|
---|
273 | - Fixed a bug in dic.c - related to commands terminating after a connection was closed,
|
---|
274 | affected in particular DimBrowser "RPC" calls.
|
---|
275 |
|
---|
276 | 02/08/2004
|
---|
277 | Changes for version 14.6:
|
---|
278 | - Noticed that since the changes of version v14r4 the Dns was not printing any error
|
---|
279 | messages anymore - Fixed.
|
---|
280 | - In Windows SO_REUSEADDR doesn't work properly, so two DNSs could be running at the
|
---|
281 | same time using the same port number on the same PC - Fixed, now like in Linux, the
|
---|
282 | second one exits (printing an error message).
|
---|
283 |
|
---|
284 | 10/08/2004
|
---|
285 | Changes for version 14.7:
|
---|
286 | - The TCPIP error "Host Unknown" was not treated or reported properly. A client could
|
---|
287 | report DNS found when the DNS node was set to be an unexisting machine - fixed.
|
---|
288 |
|
---|
289 | Please check the Manual for more information at:
|
---|
290 | http://www.cern.ch/dim
|
---|