|
1 /* |
|
2 * Copyright 1995-2005 Sun Microsystems, Inc. All Rights Reserved. |
|
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
|
4 * |
|
5 * This code is free software; you can redistribute it and/or modify it |
|
6 * under the terms of the GNU General Public License version 2 only, as |
|
7 * published by the Free Software Foundation. Sun designates this |
|
8 * particular file as subject to the "Classpath" exception as provided |
|
9 * by Sun in the LICENSE file that accompanied this code. |
|
10 * |
|
11 * This code is distributed in the hope that it will be useful, but WITHOUT |
|
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
|
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
|
14 * version 2 for more details (a copy is included in the LICENSE file that |
|
15 * accompanied this code). |
|
16 * |
|
17 * You should have received a copy of the GNU General Public License version |
|
18 * 2 along with this work; if not, write to the Free Software Foundation, |
|
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
|
20 * |
|
21 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, |
|
22 * CA 95054 USA or visit www.sun.com if you need additional information or |
|
23 * have any questions. |
|
24 */ |
|
25 |
|
26 package org.omg.CORBA; |
|
27 |
|
28 import org.omg.CORBA.portable.*; |
|
29 import org.omg.CORBA.ORBPackage.InvalidName; |
|
30 |
|
31 import java.util.Properties; |
|
32 import java.applet.Applet; |
|
33 import java.io.File; |
|
34 import java.io.FileInputStream; |
|
35 |
|
36 import java.security.AccessController; |
|
37 import java.security.PrivilegedAction; |
|
38 |
|
39 /** |
|
40 * A class providing APIs for the CORBA Object Request Broker |
|
41 * features. The <code>ORB</code> class also provides |
|
42 * "pluggable ORB implementation" APIs that allow another vendor's ORB |
|
43 * implementation to be used. |
|
44 * <P> |
|
45 * An ORB makes it possible for CORBA objects to communicate |
|
46 * with each other by connecting objects making requests (clients) with |
|
47 * objects servicing requests (servers). |
|
48 * <P> |
|
49 * |
|
50 * The <code>ORB</code> class, which |
|
51 * encapsulates generic CORBA functionality, does the following: |
|
52 * (Note that items 5 and 6, which include most of the methods in |
|
53 * the class <code>ORB</code>, are typically used with the <code>Dynamic Invocation |
|
54 * Interface</code> (DII) and the <code>Dynamic Skeleton Interface</code> |
|
55 * (DSI). |
|
56 * These interfaces may be used by a developer directly, but |
|
57 * most commonly they are used by the ORB internally and are |
|
58 * not seen by the general programmer.) |
|
59 * <OL> |
|
60 * <li> initializes the ORB implementation by supplying values for |
|
61 * predefined properties and environmental parameters |
|
62 * <li> obtains initial object references to services such as |
|
63 * the NameService using the method <code>resolve_initial_references</code> |
|
64 * <li> converts object references to strings and back |
|
65 * <li> connects the ORB to a servant (an instance of a CORBA object |
|
66 * implementation) and disconnects the ORB from a servant |
|
67 * <li> creates objects such as |
|
68 * <ul> |
|
69 * <li><code>TypeCode</code> |
|
70 * <li><code>Any</code> |
|
71 * <li><code>NamedValue</code> |
|
72 * <li><code>Context</code> |
|
73 * <li><code>Environment</code> |
|
74 * <li>lists (such as <code>NVList</code>) containing these objects |
|
75 * </ul> |
|
76 * <li> sends multiple messages in the DII |
|
77 * </OL> |
|
78 * |
|
79 * <P> |
|
80 * The <code>ORB</code> class can be used to obtain references to objects |
|
81 * implemented anywhere on the network. |
|
82 * <P> |
|
83 * An application or applet gains access to the CORBA environment |
|
84 * by initializing itself into an <code>ORB</code> using one of |
|
85 * three <code>init</code> methods. Two of the three methods use the properties |
|
86 * (associations of a name with a value) shown in the |
|
87 * table below.<BR> |
|
88 * <TABLE BORDER=1 SUMMARY="Standard Java CORBA Properties"> |
|
89 * <TR><TH>Property Name</TH> <TH>Property Value</TH></TR> |
|
90 * <CAPTION>Standard Java CORBA Properties:</CAPTION> |
|
91 * <TR><TD>org.omg.CORBA.ORBClass</TD> |
|
92 * <TD>class name of an ORB implementation</TD></TR> |
|
93 * <TR><TD>org.omg.CORBA.ORBSingletonClass</TD> |
|
94 * <TD>class name of the ORB returned by <code>init()</code></TD></TR> |
|
95 * </TABLE> |
|
96 * <P> |
|
97 * These properties allow a different vendor's <code>ORB</code> |
|
98 * implementation to be "plugged in." |
|
99 * <P> |
|
100 * When an ORB instance is being created, the class name of the ORB |
|
101 * implementation is located using |
|
102 * the following standard search order:<P> |
|
103 * |
|
104 * <OL> |
|
105 * <LI>check in Applet parameter or application string array, if any |
|
106 * |
|
107 * <LI>check in properties parameter, if any |
|
108 * |
|
109 * <LI>check in the System properties |
|
110 * |
|
111 * <LI>check in the orb.properties file located in the user.home |
|
112 * directory (if any) |
|
113 * |
|
114 * <LI>check in the orb.properties file located in the java.home/lib |
|
115 * directory (if any) |
|
116 * |
|
117 * <LI>fall back on a hardcoded default behavior (use the Java IDL |
|
118 * implementation) |
|
119 * </OL> |
|
120 * <P> |
|
121 * Note that Java IDL provides a default implementation for the |
|
122 * fully-functional ORB and for the Singleton ORB. When the method |
|
123 * <code>init</code> is given no parameters, the default Singleton |
|
124 * ORB is returned. When the method <code>init</code> is given parameters |
|
125 * but no ORB class is specified, the Java IDL ORB implementation |
|
126 * is returned. |
|
127 * <P> |
|
128 * The following code fragment creates an <code>ORB</code> object |
|
129 * initialized with the default ORB Singleton. |
|
130 * This ORB has a |
|
131 * restricted implementation to prevent malicious applets from doing |
|
132 * anything beyond creating typecodes. |
|
133 * It is called a singleton |
|
134 * because there is only one instance for an entire virtual machine. |
|
135 * <PRE> |
|
136 * ORB orb = ORB.init(); |
|
137 * </PRE> |
|
138 * <P> |
|
139 * The following code fragment creates an <code>ORB</code> object |
|
140 * for an application. The parameter <code>args</code> |
|
141 * represents the arguments supplied to the application's <code>main</code> |
|
142 * method. Since the property specifies the ORB class to be |
|
143 * "SomeORBImplementation", the new ORB will be initialized with |
|
144 * that ORB implementation. If p had been null, |
|
145 * and the arguments had not specified an ORB class, |
|
146 * the new ORB would have been |
|
147 * initialized with the default Java IDL implementation. |
|
148 * <PRE> |
|
149 * Properties p = new Properties(); |
|
150 * p.put("org.omg.CORBA.ORBClass", "SomeORBImplementation"); |
|
151 * ORB orb = ORB.init(args, p); |
|
152 * </PRE> |
|
153 * <P> |
|
154 * The following code fragment creates an <code>ORB</code> object |
|
155 * for the applet supplied as the first parameter. If the given |
|
156 * applet does not specify an ORB class, the new ORB will be |
|
157 * initialized with the default Java IDL implementation. |
|
158 * <PRE> |
|
159 * ORB orb = ORB.init(myApplet, null); |
|
160 * </PRE> |
|
161 * <P> |
|
162 * An application or applet can be initialized in one or more ORBs. |
|
163 * ORB initialization is a bootstrap call into the CORBA world. |
|
164 * @since JDK1.2 |
|
165 */ |
|
166 abstract public class ORB { |
|
167 |
|
168 // |
|
169 // This is the ORB implementation used when nothing else is specified. |
|
170 // Whoever provides this class customizes this string to |
|
171 // point at their ORB implementation. |
|
172 // |
|
173 private static final String ORBClassKey = "org.omg.CORBA.ORBClass"; |
|
174 private static final String ORBSingletonClassKey = "org.omg.CORBA.ORBSingletonClass"; |
|
175 |
|
176 // |
|
177 // The last resort fallback ORB implementation classes in case |
|
178 // no ORB implementation class is dynamically configured through |
|
179 // properties or applet parameters. Change these values to |
|
180 // vendor-specific class names. |
|
181 // |
|
182 private static final String defaultORB = "com.sun.corba.se.impl.orb.ORBImpl"; |
|
183 private static final String defaultORBSingleton = "com.sun.corba.se.impl.orb.ORBSingleton"; |
|
184 |
|
185 // |
|
186 // The global instance of the singleton ORB implementation which |
|
187 // acts as a factory for typecodes for generated Helper classes. |
|
188 // TypeCodes should be immutable since they may be shared across |
|
189 // different security contexts (applets). There should be no way to |
|
190 // use a TypeCode as a storage depot for illicitly passing |
|
191 // information or Java objects between different security contexts. |
|
192 // |
|
193 static private ORB singleton; |
|
194 |
|
195 // Get System property |
|
196 private static String getSystemProperty(final String name) { |
|
197 |
|
198 // This will not throw a SecurityException because this |
|
199 // class was loaded from rt.jar using the bootstrap classloader. |
|
200 String propValue = (String) AccessController.doPrivileged( |
|
201 new PrivilegedAction() { |
|
202 public java.lang.Object run() { |
|
203 return System.getProperty(name); |
|
204 } |
|
205 } |
|
206 ); |
|
207 |
|
208 return propValue; |
|
209 } |
|
210 |
|
211 // Get property from orb.properties in either <user.home> or <java-home>/lib |
|
212 // directories. |
|
213 private static String getPropertyFromFile(final String name) { |
|
214 // This will not throw a SecurityException because this |
|
215 // class was loaded from rt.jar using the bootstrap classloader. |
|
216 |
|
217 String propValue = (String) AccessController.doPrivileged( |
|
218 new PrivilegedAction() { |
|
219 private Properties getFileProperties( String fileName ) { |
|
220 try { |
|
221 File propFile = new File( fileName ) ; |
|
222 if (!propFile.exists()) |
|
223 return null ; |
|
224 |
|
225 Properties props = new Properties() ; |
|
226 FileInputStream fis = new FileInputStream(propFile); |
|
227 try { |
|
228 props.load( fis ); |
|
229 } finally { |
|
230 fis.close() ; |
|
231 } |
|
232 |
|
233 return props ; |
|
234 } catch (Exception exc) { |
|
235 return null ; |
|
236 } |
|
237 } |
|
238 |
|
239 public java.lang.Object run() { |
|
240 String userHome = System.getProperty("user.home"); |
|
241 String fileName = userHome + File.separator + |
|
242 "orb.properties" ; |
|
243 Properties props = getFileProperties( fileName ) ; |
|
244 |
|
245 if (props != null) { |
|
246 String value = props.getProperty( name ) ; |
|
247 if (value != null) |
|
248 return value ; |
|
249 } |
|
250 |
|
251 String javaHome = System.getProperty("java.home"); |
|
252 fileName = javaHome + File.separator |
|
253 + "lib" + File.separator + "orb.properties"; |
|
254 props = getFileProperties( fileName ) ; |
|
255 |
|
256 if (props == null) |
|
257 return null ; |
|
258 else |
|
259 return props.getProperty( name ) ; |
|
260 } |
|
261 } |
|
262 ); |
|
263 |
|
264 return propValue; |
|
265 } |
|
266 |
|
267 /** |
|
268 * Returns the <code>ORB</code> singleton object. This method always returns the |
|
269 * same ORB instance, which is an instance of the class described by the |
|
270 * <code>org.omg.CORBA.ORBSingletonClass</code> system property. |
|
271 * <P> |
|
272 * This no-argument version of the method <code>init</code> is used primarily |
|
273 * as a factory for <code>TypeCode</code> objects, which are used by |
|
274 * <code>Helper</code> classes to implement the method <code>type</code>. |
|
275 * It is also used to create <code>Any</code> objects that are used to |
|
276 * describe <code>union</code> labels (as part of creating a <code> |
|
277 * TypeCode</code> object for a <code>union</code>). |
|
278 * <P> |
|
279 * This method is not intended to be used by applets, and in the event |
|
280 * that it is called in an applet environment, the ORB it returns |
|
281 * is restricted so that it can be used only as a factory for |
|
282 * <code>TypeCode</code> objects. Any <code>TypeCode</code> objects |
|
283 * it produces can be safely shared among untrusted applets. |
|
284 * <P> |
|
285 * If an ORB is created using this method from an applet, |
|
286 * a system exception will be thrown if |
|
287 * methods other than those for |
|
288 * creating <code>TypeCode</code> objects are invoked. |
|
289 * |
|
290 * @return the singleton ORB |
|
291 */ |
|
292 public static ORB init() { |
|
293 if (singleton == null) { |
|
294 String className = getSystemProperty(ORBSingletonClassKey); |
|
295 if (className == null) |
|
296 className = getPropertyFromFile(ORBSingletonClassKey); |
|
297 if (className == null) |
|
298 className = defaultORBSingleton; |
|
299 |
|
300 singleton = create_impl(className); |
|
301 } |
|
302 return singleton; |
|
303 } |
|
304 |
|
305 private static ORB create_impl(String className) { |
|
306 |
|
307 ClassLoader cl = Thread.currentThread().getContextClassLoader(); |
|
308 if (cl == null) |
|
309 cl = ClassLoader.getSystemClassLoader(); |
|
310 |
|
311 try { |
|
312 return (ORB) Class.forName(className, true, cl).newInstance(); |
|
313 } catch (Throwable ex) { |
|
314 SystemException systemException = new INITIALIZE( |
|
315 "can't instantiate default ORB implementation " + className); |
|
316 systemException.initCause(ex); |
|
317 throw systemException; |
|
318 } |
|
319 } |
|
320 |
|
321 /** |
|
322 * Creates a new <code>ORB</code> instance for a standalone |
|
323 * application. This method may be called from applications |
|
324 * only and returns a new fully functional <code>ORB</code> object |
|
325 * each time it is called. |
|
326 * @param args command-line arguments for the application's <code>main</code> |
|
327 * method; may be <code>null</code> |
|
328 * @param props application-specific properties; may be <code>null</code> |
|
329 * @return the newly-created ORB instance |
|
330 */ |
|
331 public static ORB init(String[] args, Properties props) { |
|
332 // |
|
333 // Note that there is no standard command-line argument for |
|
334 // specifying the default ORB implementation. For an |
|
335 // application you can choose an implementation either by |
|
336 // setting the CLASSPATH to pick a different org.omg.CORBA |
|
337 // and it's baked-in ORB implementation default or by |
|
338 // setting an entry in the properties object or in the |
|
339 // system properties. |
|
340 // |
|
341 String className = null; |
|
342 ORB orb; |
|
343 |
|
344 if (props != null) |
|
345 className = props.getProperty(ORBClassKey); |
|
346 if (className == null) |
|
347 className = getSystemProperty(ORBClassKey); |
|
348 if (className == null) |
|
349 className = getPropertyFromFile(ORBClassKey); |
|
350 if (className == null) |
|
351 className = defaultORB; |
|
352 |
|
353 orb = create_impl(className); |
|
354 orb.set_parameters(args, props); |
|
355 return orb; |
|
356 } |
|
357 |
|
358 |
|
359 /** |
|
360 * Creates a new <code>ORB</code> instance for an applet. This |
|
361 * method may be called from applets only and returns a new |
|
362 * fully-functional <code>ORB</code> object each time it is called. |
|
363 * @param app the applet; may be <code>null</code> |
|
364 * @param props applet-specific properties; may be <code>null</code> |
|
365 * @return the newly-created ORB instance |
|
366 */ |
|
367 public static ORB init(Applet app, Properties props) { |
|
368 String className; |
|
369 ORB orb; |
|
370 |
|
371 className = app.getParameter(ORBClassKey); |
|
372 if (className == null && props != null) |
|
373 className = props.getProperty(ORBClassKey); |
|
374 if (className == null) |
|
375 className = getSystemProperty(ORBClassKey); |
|
376 if (className == null) |
|
377 className = getPropertyFromFile(ORBClassKey); |
|
378 if (className == null) |
|
379 className = defaultORB; |
|
380 |
|
381 orb = create_impl(className); |
|
382 orb.set_parameters(app, props); |
|
383 return orb; |
|
384 } |
|
385 |
|
386 /** |
|
387 * Allows the ORB implementation to be initialized with the given |
|
388 * parameters and properties. This method, used in applications only, |
|
389 * is implemented by subclass ORB implementations and called |
|
390 * by the appropriate <code>init</code> method to pass in its parameters. |
|
391 * |
|
392 * @param args command-line arguments for the application's <code>main</code> |
|
393 * method; may be <code>null</code> |
|
394 * @param props application-specific properties; may be <code>null</code> |
|
395 */ |
|
396 abstract protected void set_parameters(String[] args, Properties props); |
|
397 |
|
398 /** |
|
399 * Allows the ORB implementation to be initialized with the given |
|
400 * applet and parameters. This method, used in applets only, |
|
401 * is implemented by subclass ORB implementations and called |
|
402 * by the appropriate <code>init</code> method to pass in its parameters. |
|
403 * |
|
404 * @param app the applet; may be <code>null</code> |
|
405 * @param props applet-specific properties; may be <code>null</code> |
|
406 */ |
|
407 abstract protected void set_parameters(Applet app, Properties props); |
|
408 |
|
409 /** |
|
410 * Connects the given servant object (a Java object that is |
|
411 * an instance of the server implementation class) |
|
412 * to the ORB. The servant class must |
|
413 * extend the <code>ImplBase</code> class corresponding to the interface that is |
|
414 * supported by the server. The servant must thus be a CORBA object |
|
415 * reference, and inherit from <code>org.omg.CORBA.Object</code>. |
|
416 * Servants created by the user can start receiving remote invocations |
|
417 * after the method <code>connect</code> has been called. A servant may also be |
|
418 * automatically and implicitly connected to the ORB if it is passed as |
|
419 * an IDL parameter in an IDL method invocation on a non-local object, |
|
420 * that is, if the servant object has to be marshalled and sent outside of the |
|
421 * process address space. |
|
422 * <P> |
|
423 * Calling the method <code>connect</code> has no effect |
|
424 * when the servant object is already connected to the ORB. |
|
425 * <P> |
|
426 * Deprecated by the OMG in favor of the Portable Object Adapter APIs. |
|
427 * |
|
428 * @param obj The servant object reference |
|
429 */ |
|
430 public void connect(org.omg.CORBA.Object obj) { |
|
431 throw new NO_IMPLEMENT(); |
|
432 } |
|
433 |
|
434 /** |
|
435 * Destroys the ORB so that its resources can be reclaimed. |
|
436 * Any operation invoked on a destroyed ORB reference will throw the |
|
437 * <code>OBJECT_NOT_EXIST</code> exception. |
|
438 * Once an ORB has been destroyed, another call to <code>init</code> |
|
439 * with the same ORBid will return a reference to a newly constructed ORB.<p> |
|
440 * If <code>destroy</code> is called on an ORB that has not been shut down, |
|
441 * it will start the shut down process and block until the ORB has shut down |
|
442 * before it destroys the ORB.<br> |
|
443 * If an application calls <code>destroy</code> in a thread that is currently servicing |
|
444 * an invocation, the <code>BAD_INV_ORDER</code> system exception will be thrown |
|
445 * with the OMG minor code 3, since blocking would result in a deadlock.<p> |
|
446 * For maximum portability and to avoid resource leaks, an application should |
|
447 * always call <code>shutdown</code> and <code>destroy</code> |
|
448 * on all ORB instances before exiting. |
|
449 * |
|
450 * @throws org.omg.CORBA.BAD_INV_ORDER if the current thread is servicing an invocation |
|
451 */ |
|
452 public void destroy( ) { |
|
453 throw new NO_IMPLEMENT(); |
|
454 } |
|
455 |
|
456 /** |
|
457 * Disconnects the given servant object from the ORB. After this method returns, |
|
458 * the ORB will reject incoming remote requests for the disconnected |
|
459 * servant and will send the exception |
|
460 * <code>org.omg.CORBA.OBJECT_NOT_EXIST</code> back to the |
|
461 * remote client. Thus the object appears to be destroyed from the |
|
462 * point of view of remote clients. Note, however, that local requests issued |
|
463 * using the servant directly do not |
|
464 * pass through the ORB; hence, they will continue to be processed by the |
|
465 * servant. |
|
466 * <P> |
|
467 * Calling the method <code>disconnect</code> has no effect |
|
468 * if the servant is not connected to the ORB. |
|
469 * <P> |
|
470 * Deprecated by the OMG in favor of the Portable Object Adapter APIs. |
|
471 * |
|
472 * @param obj The servant object to be disconnected from the ORB |
|
473 */ |
|
474 public void disconnect(org.omg.CORBA.Object obj) { |
|
475 throw new NO_IMPLEMENT(); |
|
476 } |
|
477 |
|
478 // |
|
479 // ORB method implementations. |
|
480 // |
|
481 // We are trying to accomplish 2 things at once in this class. |
|
482 // It can act as a default ORB implementation front-end, |
|
483 // creating an actual ORB implementation object which is a |
|
484 // subclass of this ORB class and then delegating the method |
|
485 // implementations. |
|
486 // |
|
487 // To accomplish the delegation model, the 'delegate' private instance |
|
488 // variable is set if an instance of this class is created directly. |
|
489 // |
|
490 |
|
491 /** |
|
492 * Returns a list of the initially available CORBA object references, |
|
493 * such as "NameService" and "InterfaceRepository". |
|
494 * |
|
495 * @return an array of <code>String</code> objects that represent |
|
496 * the object references for CORBA services |
|
497 * that are initially available with this ORB |
|
498 */ |
|
499 abstract public String[] list_initial_services(); |
|
500 |
|
501 /** |
|
502 * Resolves a specific object reference from the set of available |
|
503 * initial service names. |
|
504 * |
|
505 * @param object_name the name of the initial service as a string |
|
506 * @return the object reference associated with the given name |
|
507 * @exception InvalidName if the given name is not associated with a |
|
508 * known service |
|
509 */ |
|
510 abstract public org.omg.CORBA.Object resolve_initial_references(String object_name) |
|
511 throws InvalidName; |
|
512 |
|
513 /** |
|
514 * Converts the given CORBA object reference to a string. |
|
515 * Note that the format of this string is predefined by IIOP, allowing |
|
516 * strings generated by a different ORB to be converted back into an object |
|
517 * reference. |
|
518 * <P> |
|
519 * The resulting <code>String</code> object may be stored or communicated |
|
520 * in any way that a <code>String</code> object can be manipulated. |
|
521 * |
|
522 * @param obj the object reference to stringify |
|
523 * @return the string representing the object reference |
|
524 */ |
|
525 abstract public String object_to_string(org.omg.CORBA.Object obj); |
|
526 |
|
527 /** |
|
528 * Converts a string produced by the method <code>object_to_string</code> |
|
529 * back to a CORBA object reference. |
|
530 * |
|
531 * @param str the string to be converted back to an object reference. It must |
|
532 * be the result of converting an object reference to a string using the |
|
533 * method <code>object_to_string</code>. |
|
534 * @return the object reference |
|
535 */ |
|
536 abstract public org.omg.CORBA.Object string_to_object(String str); |
|
537 |
|
538 /** |
|
539 * Allocates an <code>NVList</code> with (probably) enough |
|
540 * space for the specified number of <code>NamedValue</code> objects. |
|
541 * Note that the specified size is only a hint to help with |
|
542 * storage allocation and does not imply the maximum size of the list. |
|
543 * |
|
544 * @param count suggested number of <code>NamedValue</code> objects for |
|
545 * which to allocate space |
|
546 * @return the newly-created <code>NVList</code> |
|
547 * |
|
548 * @see NVList |
|
549 */ |
|
550 abstract public NVList create_list(int count); |
|
551 |
|
552 /** |
|
553 * Creates an <code>NVList</code> initialized with argument |
|
554 * descriptions for the operation described in the given |
|
555 * <code>OperationDef</code> object. This <code>OperationDef</code> object |
|
556 * is obtained from an Interface Repository. The arguments in the |
|
557 * returned <code>NVList</code> object are in the same order as in the |
|
558 * original IDL operation definition, which makes it possible for the list |
|
559 * to be used in dynamic invocation requests. |
|
560 * |
|
561 * @param oper the <code>OperationDef</code> object to use to create the list |
|
562 * @return a newly-created <code>NVList</code> object containing |
|
563 * descriptions of the arguments to the method described in the given |
|
564 * <code>OperationDef</code> object |
|
565 * |
|
566 * @see NVList |
|
567 */ |
|
568 public NVList create_operation_list(org.omg.CORBA.Object oper) |
|
569 { |
|
570 // If we came here, it means that the actual ORB implementation |
|
571 // did not have a create_operation_list(...CORBA.Object oper) method, |
|
572 // so lets check if it has a create_operation_list(OperationDef oper) |
|
573 // method. |
|
574 try { |
|
575 // First try to load the OperationDef class |
|
576 String opDefClassName = "org.omg.CORBA.OperationDef"; |
|
577 Class opDefClass = null; |
|
578 |
|
579 ClassLoader cl = Thread.currentThread().getContextClassLoader(); |
|
580 if ( cl == null ) |
|
581 cl = ClassLoader.getSystemClassLoader(); |
|
582 // if this throws a ClassNotFoundException, it will be caught below. |
|
583 opDefClass = Class.forName(opDefClassName, true, cl); |
|
584 |
|
585 // OK, we loaded OperationDef. Now try to get the |
|
586 // create_operation_list(OperationDef oper) method. |
|
587 Class[] argc = { opDefClass }; |
|
588 java.lang.reflect.Method meth = |
|
589 this.getClass().getMethod("create_operation_list", argc); |
|
590 |
|
591 // OK, the method exists, so invoke it and be happy. |
|
592 Object[] argx = { oper }; |
|
593 return (org.omg.CORBA.NVList)meth.invoke(this, argx); |
|
594 } |
|
595 catch( java.lang.reflect.InvocationTargetException exs ) { |
|
596 Throwable t = exs.getTargetException(); |
|
597 if (t instanceof Error) { |
|
598 throw (Error) t; |
|
599 } |
|
600 else if (t instanceof RuntimeException) { |
|
601 throw (RuntimeException) t; |
|
602 } |
|
603 else { |
|
604 throw new org.omg.CORBA.NO_IMPLEMENT(); |
|
605 } |
|
606 } |
|
607 catch( RuntimeException ex ) { |
|
608 throw ex; |
|
609 } |
|
610 catch( Exception exr ) { |
|
611 throw new org.omg.CORBA.NO_IMPLEMENT(); |
|
612 } |
|
613 } |
|
614 |
|
615 |
|
616 /** |
|
617 * Creates a <code>NamedValue</code> object |
|
618 * using the given name, value, and argument mode flags. |
|
619 * <P> |
|
620 * A <code>NamedValue</code> object serves as (1) a parameter or return |
|
621 * value or (2) a context property. |
|
622 * It may be used by itself or |
|
623 * as an element in an <code>NVList</code> object. |
|
624 * |
|
625 * @param s the name of the <code>NamedValue</code> object |
|
626 * @param any the <code>Any</code> value to be inserted into the |
|
627 * <code>NamedValue</code> object |
|
628 * @param flags the argument mode flags for the <code>NamedValue</code>: one of |
|
629 * <code>ARG_IN.value</code>, <code>ARG_OUT.value</code>, |
|
630 * or <code>ARG_INOUT.value</code>. |
|
631 * |
|
632 * @return the newly-created <code>NamedValue</code> object |
|
633 * @see NamedValue |
|
634 */ |
|
635 abstract public NamedValue create_named_value(String s, Any any, int flags); |
|
636 |
|
637 /** |
|
638 * Creates an empty <code>ExceptionList</code> object. |
|
639 * |
|
640 * @return the newly-created <code>ExceptionList</code> object |
|
641 */ |
|
642 abstract public ExceptionList create_exception_list(); |
|
643 |
|
644 /** |
|
645 * Creates an empty <code>ContextList</code> object. |
|
646 * |
|
647 * @return the newly-created <code>ContextList</code> object |
|
648 * @see ContextList |
|
649 * @see Context |
|
650 */ |
|
651 abstract public ContextList create_context_list(); |
|
652 |
|
653 /** |
|
654 * Gets the default <code>Context</code> object. |
|
655 * |
|
656 * @return the default <code>Context</code> object |
|
657 * @see Context |
|
658 */ |
|
659 abstract public Context get_default_context(); |
|
660 |
|
661 /** |
|
662 * Creates an <code>Environment</code> object. |
|
663 * |
|
664 * @return the newly-created <code>Environment</code> object |
|
665 * @see Environment |
|
666 */ |
|
667 abstract public Environment create_environment(); |
|
668 |
|
669 /** |
|
670 * Creates a new <code>org.omg.CORBA.portable.OutputStream</code> into which |
|
671 * IDL method parameters can be marshalled during method invocation. |
|
672 * @return the newly-created |
|
673 * <code>org.omg.CORBA.portable.OutputStream</code> object |
|
674 */ |
|
675 abstract public org.omg.CORBA.portable.OutputStream create_output_stream(); |
|
676 |
|
677 /** |
|
678 * Sends multiple dynamic (DII) requests asynchronously without expecting |
|
679 * any responses. Note that oneway invocations are not guaranteed to |
|
680 * reach the server. |
|
681 * |
|
682 * @param req an array of request objects |
|
683 */ |
|
684 abstract public void send_multiple_requests_oneway(Request[] req); |
|
685 |
|
686 /** |
|
687 * Sends multiple dynamic (DII) requests asynchronously. |
|
688 * |
|
689 * @param req an array of <code>Request</code> objects |
|
690 */ |
|
691 abstract public void send_multiple_requests_deferred(Request[] req); |
|
692 |
|
693 /** |
|
694 * Finds out if any of the deferred (asynchronous) invocations have |
|
695 * a response yet. |
|
696 * @return <code>true</code> if there is a response available; |
|
697 * <code> false</code> otherwise |
|
698 */ |
|
699 abstract public boolean poll_next_response(); |
|
700 |
|
701 /** |
|
702 * Gets the next <code>Request</code> instance for which a response |
|
703 * has been received. |
|
704 * |
|
705 * @return the next <code>Request</code> object ready with a response |
|
706 * @exception WrongTransaction if the method <code>get_next_response</code> |
|
707 * is called from a transaction scope different |
|
708 * from the one from which the original request was sent. See the |
|
709 * OMG Transaction Service specification for details. |
|
710 */ |
|
711 abstract public Request get_next_response() throws WrongTransaction; |
|
712 |
|
713 /** |
|
714 * Retrieves the <code>TypeCode</code> object that represents |
|
715 * the given primitive IDL type. |
|
716 * |
|
717 * @param tcKind the <code>TCKind</code> instance corresponding to the |
|
718 * desired primitive type |
|
719 * @return the requested <code>TypeCode</code> object |
|
720 */ |
|
721 abstract public TypeCode get_primitive_tc(TCKind tcKind); |
|
722 |
|
723 /** |
|
724 * Creates a <code>TypeCode</code> object representing an IDL <code>struct</code>. |
|
725 * The <code>TypeCode</code> object is initialized with the given id, |
|
726 * name, and members. |
|
727 * |
|
728 * @param id the repository id for the <code>struct</code> |
|
729 * @param name the name of the <code>struct</code> |
|
730 * @param members an array describing the members of the <code>struct</code> |
|
731 * @return a newly-created <code>TypeCode</code> object describing |
|
732 * an IDL <code>struct</code> |
|
733 */ |
|
734 abstract public TypeCode create_struct_tc(String id, String name, |
|
735 StructMember[] members); |
|
736 |
|
737 /** |
|
738 * Creates a <code>TypeCode</code> object representing an IDL <code>union</code>. |
|
739 * The <code>TypeCode</code> object is initialized with the given id, |
|
740 * name, discriminator type, and members. |
|
741 * |
|
742 * @param id the repository id of the <code>union</code> |
|
743 * @param name the name of the <code>union</code> |
|
744 * @param discriminator_type the type of the <code>union</code> discriminator |
|
745 * @param members an array describing the members of the <code>union</code> |
|
746 * @return a newly-created <code>TypeCode</code> object describing |
|
747 * an IDL <code>union</code> |
|
748 */ |
|
749 abstract public TypeCode create_union_tc(String id, String name, |
|
750 TypeCode discriminator_type, |
|
751 UnionMember[] members); |
|
752 |
|
753 /** |
|
754 * Creates a <code>TypeCode</code> object representing an IDL <code>enum</code>. |
|
755 * The <code>TypeCode</code> object is initialized with the given id, |
|
756 * name, and members. |
|
757 * |
|
758 * @param id the repository id for the <code>enum</code> |
|
759 * @param name the name for the <code>enum</code> |
|
760 * @param members an array describing the members of the <code>enum</code> |
|
761 * @return a newly-created <code>TypeCode</code> object describing |
|
762 * an IDL <code>enum</code> |
|
763 */ |
|
764 abstract public TypeCode create_enum_tc(String id, String name, String[] members); |
|
765 |
|
766 /** |
|
767 * Creates a <code>TypeCode</code> object representing an IDL <code>alias</code> |
|
768 * (<code>typedef</code>). |
|
769 * The <code>TypeCode</code> object is initialized with the given id, |
|
770 * name, and original type. |
|
771 * |
|
772 * @param id the repository id for the alias |
|
773 * @param name the name for the alias |
|
774 * @param original_type |
|
775 * the <code>TypeCode</code> object describing the original type |
|
776 * for which this is an alias |
|
777 * @return a newly-created <code>TypeCode</code> object describing |
|
778 * an IDL <code>alias</code> |
|
779 */ |
|
780 abstract public TypeCode create_alias_tc(String id, String name, |
|
781 TypeCode original_type); |
|
782 |
|
783 /** |
|
784 * Creates a <code>TypeCode</code> object representing an IDL <code>exception</code>. |
|
785 * The <code>TypeCode</code> object is initialized with the given id, |
|
786 * name, and members. |
|
787 * |
|
788 * @param id the repository id for the <code>exception</code> |
|
789 * @param name the name for the <code>exception</code> |
|
790 * @param members an array describing the members of the <code>exception</code> |
|
791 * @return a newly-created <code>TypeCode</code> object describing |
|
792 * an IDL <code>exception</code> |
|
793 */ |
|
794 abstract public TypeCode create_exception_tc(String id, String name, |
|
795 StructMember[] members); |
|
796 |
|
797 /** |
|
798 * Creates a <code>TypeCode</code> object representing an IDL <code>interface</code>. |
|
799 * The <code>TypeCode</code> object is initialized with the given id |
|
800 * and name. |
|
801 * |
|
802 * @param id the repository id for the interface |
|
803 * @param name the name for the interface |
|
804 * @return a newly-created <code>TypeCode</code> object describing |
|
805 * an IDL <code>interface</code> |
|
806 */ |
|
807 |
|
808 abstract public TypeCode create_interface_tc(String id, String name); |
|
809 |
|
810 /** |
|
811 * Creates a <code>TypeCode</code> object representing a bounded IDL |
|
812 * <code>string</code>. |
|
813 * The <code>TypeCode</code> object is initialized with the given bound, |
|
814 * which represents the maximum length of the string. Zero indicates |
|
815 * that the string described by this type code is unbounded. |
|
816 * |
|
817 * @param bound the bound for the <code>string</code>; cannot be negative |
|
818 * @return a newly-created <code>TypeCode</code> object describing |
|
819 * a bounded IDL <code>string</code> |
|
820 * @exception BAD_PARAM if bound is a negative value |
|
821 */ |
|
822 |
|
823 abstract public TypeCode create_string_tc(int bound); |
|
824 |
|
825 /** |
|
826 * Creates a <code>TypeCode</code> object representing a bounded IDL |
|
827 * <code>wstring</code> (wide string). |
|
828 * The <code>TypeCode</code> object is initialized with the given bound, |
|
829 * which represents the maximum length of the wide string. Zero indicates |
|
830 * that the string described by this type code is unbounded. |
|
831 * |
|
832 * @param bound the bound for the <code>wstring</code>; cannot be negative |
|
833 * @return a newly-created <code>TypeCode</code> object describing |
|
834 * a bounded IDL <code>wstring</code> |
|
835 * @exception BAD_PARAM if bound is a negative value |
|
836 */ |
|
837 abstract public TypeCode create_wstring_tc(int bound); |
|
838 |
|
839 /** |
|
840 * Creates a <code>TypeCode</code> object representing an IDL <code>sequence</code>. |
|
841 * The <code>TypeCode</code> object is initialized with the given bound and |
|
842 * element type. |
|
843 * |
|
844 * @param bound the bound for the <code>sequence</code>, 0 if unbounded |
|
845 * @param element_type |
|
846 * the <code>TypeCode</code> object describing the elements |
|
847 * contained in the <code>sequence</code> |
|
848 * @return a newly-created <code>TypeCode</code> object describing |
|
849 * an IDL <code>sequence</code> |
|
850 */ |
|
851 abstract public TypeCode create_sequence_tc(int bound, TypeCode element_type); |
|
852 |
|
853 /** |
|
854 * Creates a <code>TypeCode</code> object representing a |
|
855 * a recursive IDL <code>sequence</code>. |
|
856 * <P> |
|
857 * For the IDL <code>struct</code> Node in following code fragment, |
|
858 * the offset parameter for creating its sequence would be 1: |
|
859 * <PRE> |
|
860 * Struct Node { |
|
861 * long value; |
|
862 * Sequence <Node> subnodes; |
|
863 * }; |
|
864 * </PRE> |
|
865 * |
|
866 * @param bound the bound for the sequence, 0 if unbounded |
|
867 * @param offset the index to the enclosing <code>TypeCode</code> object |
|
868 * that describes the elements of this sequence |
|
869 * @return a newly-created <code>TypeCode</code> object describing |
|
870 * a recursive sequence |
|
871 * @deprecated Use a combination of create_recursive_tc and create_sequence_tc instead |
|
872 * @see #create_recursive_tc(String) create_recursive_tc |
|
873 * @see #create_sequence_tc(int, TypeCode) create_sequence_tc |
|
874 */ |
|
875 @Deprecated |
|
876 abstract public TypeCode create_recursive_sequence_tc(int bound, int offset); |
|
877 |
|
878 /** |
|
879 * Creates a <code>TypeCode</code> object representing an IDL <code>array</code>. |
|
880 * The <code>TypeCode</code> object is initialized with the given length and |
|
881 * element type. |
|
882 * |
|
883 * @param length the length of the <code>array</code> |
|
884 * @param element_type a <code>TypeCode</code> object describing the type |
|
885 * of element contained in the <code>array</code> |
|
886 * @return a newly-created <code>TypeCode</code> object describing |
|
887 * an IDL <code>array</code> |
|
888 */ |
|
889 abstract public TypeCode create_array_tc(int length, TypeCode element_type); |
|
890 |
|
891 /** |
|
892 * Create a <code>TypeCode</code> object for an IDL native type. |
|
893 * |
|
894 * @param id the logical id for the native type. |
|
895 * @param name the name of the native type. |
|
896 * @return the requested TypeCode. |
|
897 */ |
|
898 public org.omg.CORBA.TypeCode create_native_tc(String id, |
|
899 String name) |
|
900 { |
|
901 throw new org.omg.CORBA.NO_IMPLEMENT(); |
|
902 } |
|
903 |
|
904 /** |
|
905 * Create a <code>TypeCode</code> object for an IDL abstract interface. |
|
906 * |
|
907 * @param id the logical id for the abstract interface type. |
|
908 * @param name the name of the abstract interface type. |
|
909 * @return the requested TypeCode. |
|
910 */ |
|
911 public org.omg.CORBA.TypeCode create_abstract_interface_tc( |
|
912 String id, |
|
913 String name) |
|
914 { |
|
915 throw new org.omg.CORBA.NO_IMPLEMENT(); |
|
916 } |
|
917 |
|
918 |
|
919 /** |
|
920 * Create a <code>TypeCode</code> object for an IDL fixed type. |
|
921 * |
|
922 * @param digits specifies the total number of decimal digits in the number |
|
923 * and must be from 1 to 31 inclusive. |
|
924 * @param scale specifies the position of the decimal point. |
|
925 * @return the requested TypeCode. |
|
926 */ |
|
927 public org.omg.CORBA.TypeCode create_fixed_tc(short digits, short scale) |
|
928 { |
|
929 throw new org.omg.CORBA.NO_IMPLEMENT(); |
|
930 } |
|
931 |
|
932 |
|
933 // orbos 98-01-18: Objects By Value -- begin |
|
934 |
|
935 |
|
936 /** |
|
937 * Create a <code>TypeCode</code> object for an IDL value type. |
|
938 * The concrete_base parameter is the TypeCode for the immediate |
|
939 * concrete valuetype base of the valuetype for which the TypeCode |
|
940 * is being created. |
|
941 * It may be null if the valuetype does not have a concrete base. |
|
942 * |
|
943 * @param id the logical id for the value type. |
|
944 * @param name the name of the value type. |
|
945 * @param type_modifier one of the value type modifier constants: |
|
946 * VM_NONE, VM_CUSTOM, VM_ABSTRACT or VM_TRUNCATABLE |
|
947 * @param concrete_base a <code>TypeCode</code> object |
|
948 * describing the concrete valuetype base |
|
949 * @param members an array containing the members of the value type |
|
950 * @return the requested TypeCode |
|
951 */ |
|
952 public org.omg.CORBA.TypeCode create_value_tc(String id, |
|
953 String name, |
|
954 short type_modifier, |
|
955 TypeCode concrete_base, |
|
956 ValueMember[] members) |
|
957 { |
|
958 throw new org.omg.CORBA.NO_IMPLEMENT(); |
|
959 } |
|
960 |
|
961 /** |
|
962 * Create a recursive <code>TypeCode</code> object which |
|
963 * serves as a placeholder for a concrete TypeCode during the process of creating |
|
964 * TypeCodes which contain recursion. The id parameter specifies the repository id of |
|
965 * the type for which the recursive TypeCode is serving as a placeholder. Once the |
|
966 * recursive TypeCode has been properly embedded in the enclosing TypeCode which |
|
967 * corresponds to the specified repository id, it will function as a normal TypeCode. |
|
968 * Invoking operations on the recursive TypeCode before it has been embedded in the |
|
969 * enclosing TypeCode will result in a <code>BAD_TYPECODE</code> exception. |
|
970 * <P> |
|
971 * For example, the following IDL type declaration contains recursion: |
|
972 * <PRE> |
|
973 * Struct Node { |
|
974 * Sequence<Node> subnodes; |
|
975 * }; |
|
976 * </PRE> |
|
977 * <P> |
|
978 * To create a TypeCode for struct Node, you would invoke the TypeCode creation |
|
979 * operations as shown below: |
|
980 * <PRE> |
|
981 * String nodeID = "IDL:Node:1.0"; |
|
982 * TypeCode recursiveSeqTC = orb.create_sequence_tc(0, orb.create_recursive_tc(nodeID)); |
|
983 * StructMember[] members = { new StructMember("subnodes", recursiveSeqTC, null) }; |
|
984 * TypeCode structNodeTC = orb.create_struct_tc(nodeID, "Node", members); |
|
985 * </PRE> |
|
986 * <P> |
|
987 * Also note that the following is an illegal IDL type declaration: |
|
988 * <PRE> |
|
989 * Struct Node { |
|
990 * Node next; |
|
991 * }; |
|
992 * </PRE> |
|
993 * <P> |
|
994 * Recursive types can only appear within sequences which can be empty. |
|
995 * That way marshaling problems, when transmitting the struct in an Any, are avoided. |
|
996 * <P> |
|
997 * @param id the logical id of the referenced type |
|
998 * @return the requested TypeCode |
|
999 */ |
|
1000 public org.omg.CORBA.TypeCode create_recursive_tc(String id) { |
|
1001 // implemented in subclass |
|
1002 throw new org.omg.CORBA.NO_IMPLEMENT(); |
|
1003 } |
|
1004 |
|
1005 /** |
|
1006 * Creates a <code>TypeCode</code> object for an IDL value box. |
|
1007 * |
|
1008 * @param id the logical id for the value type |
|
1009 * @param name the name of the value type |
|
1010 * @param boxed_type the TypeCode for the type |
|
1011 * @return the requested TypeCode |
|
1012 */ |
|
1013 public org.omg.CORBA.TypeCode create_value_box_tc(String id, |
|
1014 String name, |
|
1015 TypeCode boxed_type) |
|
1016 { |
|
1017 // implemented in subclass |
|
1018 throw new org.omg.CORBA.NO_IMPLEMENT(); |
|
1019 } |
|
1020 |
|
1021 // orbos 98-01-18: Objects By Value -- end |
|
1022 |
|
1023 /** |
|
1024 * Creates an IDL <code>Any</code> object initialized to |
|
1025 * contain a <code>Typecode</code> object whose <code>kind</code> field |
|
1026 * is set to <code>TCKind.tc_null</code>. |
|
1027 * |
|
1028 * @return a newly-created <code>Any</code> object |
|
1029 */ |
|
1030 abstract public Any create_any(); |
|
1031 |
|
1032 |
|
1033 |
|
1034 |
|
1035 /** |
|
1036 * Retrieves a <code>Current</code> object. |
|
1037 * The <code>Current</code> interface is used to manage thread-specific |
|
1038 * information for use by services such as transactions and security. |
|
1039 * |
|
1040 * @see <a href="package-summary.html#unimpl"><code>CORBA</code> package |
|
1041 * comments for unimplemented features</a> |
|
1042 * |
|
1043 * @return a newly-created <code>Current</code> object |
|
1044 * @deprecated use <code>resolve_initial_references</code>. |
|
1045 */ |
|
1046 @Deprecated |
|
1047 public org.omg.CORBA.Current get_current() |
|
1048 { |
|
1049 throw new org.omg.CORBA.NO_IMPLEMENT(); |
|
1050 } |
|
1051 |
|
1052 /** |
|
1053 * This operation blocks the current thread until the ORB has |
|
1054 * completed the shutdown process, initiated when some thread calls |
|
1055 * <code>shutdown</code>. It may be used by multiple threads which |
|
1056 * get all notified when the ORB shuts down. |
|
1057 * |
|
1058 */ |
|
1059 public void run() |
|
1060 { |
|
1061 throw new org.omg.CORBA.NO_IMPLEMENT(); |
|
1062 } |
|
1063 |
|
1064 /** |
|
1065 * Instructs the ORB to shut down, which causes all |
|
1066 * object adapters to shut down, in preparation for destruction.<br> |
|
1067 * If the <code>wait_for_completion</code> parameter |
|
1068 * is true, this operation blocks until all ORB processing (including |
|
1069 * processing of currently executing requests, object deactivation, |
|
1070 * and other object adapter operations) has completed. |
|
1071 * If an application does this in a thread that is currently servicing |
|
1072 * an invocation, the <code>BAD_INV_ORDER</code> system exception |
|
1073 * will be thrown with the OMG minor code 3, |
|
1074 * since blocking would result in a deadlock.<br> |
|
1075 * If the <code>wait_for_completion</code> parameter is <code>FALSE</code>, |
|
1076 * then shutdown may not have completed upon return.<p> |
|
1077 * While the ORB is in the process of shutting down, the ORB operates as normal, |
|
1078 * servicing incoming and outgoing requests until all requests have been completed. |
|
1079 * Once an ORB has shutdown, only object reference management operations |
|
1080 * may be invoked on the ORB or any object reference obtained from it. |
|
1081 * An application may also invoke the <code>destroy</code> operation on the ORB itself. |
|
1082 * Invoking any other operation will throw the <code>BAD_INV_ORDER</code> |
|
1083 * system exception with the OMG minor code 4.<p> |
|
1084 * The <code>ORB.run</code> method will return after |
|
1085 * <code>shutdown</code> has been called. |
|
1086 * |
|
1087 * @param wait_for_completion <code>true</code> if the call |
|
1088 * should block until the shutdown is complete; |
|
1089 * <code>false</code> if it should return immediately |
|
1090 * @throws org.omg.CORBA.BAD_INV_ORDER if the current thread is servicing |
|
1091 * an invocation |
|
1092 */ |
|
1093 public void shutdown(boolean wait_for_completion) |
|
1094 { |
|
1095 throw new org.omg.CORBA.NO_IMPLEMENT(); |
|
1096 } |
|
1097 |
|
1098 /** |
|
1099 * Returns <code>true</code> if the ORB needs the main thread to |
|
1100 * perform some work, and <code>false</code> if the ORB does not |
|
1101 * need the main thread. |
|
1102 * |
|
1103 * @return <code>true</code> if there is work pending, meaning that the ORB |
|
1104 * needs the main thread to perform some work; <code>false</code> |
|
1105 * if there is no work pending and thus the ORB does not need the |
|
1106 * main thread |
|
1107 * |
|
1108 */ |
|
1109 public boolean work_pending() |
|
1110 { |
|
1111 throw new org.omg.CORBA.NO_IMPLEMENT(); |
|
1112 } |
|
1113 |
|
1114 /** |
|
1115 * Performs an implementation-dependent unit of work if called |
|
1116 * by the main thread. Otherwise it does nothing. |
|
1117 * The methods <code>work_pending</code> and <code>perform_work</code> |
|
1118 * can be used in |
|
1119 * conjunction to implement a simple polling loop that multiplexes |
|
1120 * the main thread among the ORB and other activities. |
|
1121 * |
|
1122 */ |
|
1123 public void perform_work() |
|
1124 { |
|
1125 throw new org.omg.CORBA.NO_IMPLEMENT(); |
|
1126 } |
|
1127 |
|
1128 /** |
|
1129 * Used to obtain information about CORBA facilities and services |
|
1130 * that are supported by this ORB. The service type for which |
|
1131 * information is being requested is passed in as the in |
|
1132 * parameter <tt>service_type</tt>, the values defined by |
|
1133 * constants in the CORBA module. If service information is |
|
1134 * available for that type, that is returned in the out parameter |
|
1135 * <tt>service_info</tt>, and the operation returns the |
|
1136 * value <tt>true</tt>. If no information for the requested |
|
1137 * services type is available, the operation returns <tt>false</tt> |
|
1138 * (i.e., the service is not supported by this ORB). |
|
1139 * <P> |
|
1140 * @param service_type a <code>short</code> indicating the |
|
1141 * service type for which information is being requested |
|
1142 * @param service_info a <code>ServiceInformationHolder</code> object |
|
1143 * that will hold the <code>ServiceInformation</code> object |
|
1144 * produced by this method |
|
1145 * @return <code>true</code> if service information is available |
|
1146 * for the <tt>service_type</tt>; |
|
1147 * <tt>false</tt> if no information for the |
|
1148 * requested services type is available |
|
1149 * @see <a href="package-summary.html#unimpl"><code>CORBA</code> package |
|
1150 * comments for unimplemented features</a> |
|
1151 */ |
|
1152 public boolean get_service_information(short service_type, |
|
1153 ServiceInformationHolder service_info) |
|
1154 { |
|
1155 throw new org.omg.CORBA.NO_IMPLEMENT(); |
|
1156 } |
|
1157 |
|
1158 // orbos 98-01-18: Objects By Value -- begin |
|
1159 |
|
1160 /** |
|
1161 * Creates a new <code>DynAny</code> object from the given |
|
1162 * <code>Any</code> object. |
|
1163 * <P> |
|
1164 * @param value the <code>Any</code> object from which to create a new |
|
1165 * <code>DynAny</code> object |
|
1166 * @return the new <code>DynAny</code> object created from the given |
|
1167 * <code>Any</code> object |
|
1168 * @see <a href="package-summary.html#unimpl"><code>CORBA</code> package |
|
1169 * comments for unimplemented features</a> |
|
1170 * @deprecated Use the new <a href="../DynamicAny/DynAnyFactory.html">DynAnyFactory</a> API instead |
|
1171 */ |
|
1172 @Deprecated |
|
1173 public org.omg.CORBA.DynAny create_dyn_any(org.omg.CORBA.Any value) |
|
1174 { |
|
1175 throw new org.omg.CORBA.NO_IMPLEMENT(); |
|
1176 } |
|
1177 |
|
1178 /** |
|
1179 * Creates a basic <code>DynAny</code> object from the given |
|
1180 * <code>TypeCode</code> object. |
|
1181 * <P> |
|
1182 * @param type the <code>TypeCode</code> object from which to create a new |
|
1183 * <code>DynAny</code> object |
|
1184 * @return the new <code>DynAny</code> object created from the given |
|
1185 * <code>TypeCode</code> object |
|
1186 * @throws org.omg.CORBA.ORBPackage.InconsistentTypeCode if the given |
|
1187 * <code>TypeCode</code> object is not consistent with the operation. |
|
1188 * @see <a href="package-summary.html#unimpl"><code>CORBA</code> package |
|
1189 * comments for unimplemented features</a> |
|
1190 * @deprecated Use the new <a href="../DynamicAny/DynAnyFactory.html">DynAnyFactory</a> API instead |
|
1191 */ |
|
1192 @Deprecated |
|
1193 public org.omg.CORBA.DynAny create_basic_dyn_any(org.omg.CORBA.TypeCode type) throws org.omg.CORBA.ORBPackage.InconsistentTypeCode |
|
1194 { |
|
1195 throw new org.omg.CORBA.NO_IMPLEMENT(); |
|
1196 } |
|
1197 |
|
1198 /** |
|
1199 * Creates a new <code>DynStruct</code> object from the given |
|
1200 * <code>TypeCode</code> object. |
|
1201 * <P> |
|
1202 * @param type the <code>TypeCode</code> object from which to create a new |
|
1203 * <code>DynStruct</code> object |
|
1204 * @return the new <code>DynStruct</code> object created from the given |
|
1205 * <code>TypeCode</code> object |
|
1206 * @throws org.omg.CORBA.ORBPackage.InconsistentTypeCode if the given |
|
1207 * <code>TypeCode</code> object is not consistent with the operation. |
|
1208 * @see <a href="package-summary.html#unimpl"><code>CORBA</code> package |
|
1209 * comments for unimplemented features</a> |
|
1210 * @deprecated Use the new <a href="../DynamicAny/DynAnyFactory.html">DynAnyFactory</a> API instead |
|
1211 */ |
|
1212 @Deprecated |
|
1213 public org.omg.CORBA.DynStruct create_dyn_struct(org.omg.CORBA.TypeCode type) throws org.omg.CORBA.ORBPackage.InconsistentTypeCode |
|
1214 { |
|
1215 throw new org.omg.CORBA.NO_IMPLEMENT(); |
|
1216 } |
|
1217 |
|
1218 /** |
|
1219 * Creates a new <code>DynSequence</code> object from the given |
|
1220 * <code>TypeCode</code> object. |
|
1221 * <P> |
|
1222 * @param type the <code>TypeCode</code> object from which to create a new |
|
1223 * <code>DynSequence</code> object |
|
1224 * @return the new <code>DynSequence</code> object created from the given |
|
1225 * <code>TypeCode</code> object |
|
1226 * @throws org.omg.CORBA.ORBPackage.InconsistentTypeCode if the given |
|
1227 * <code>TypeCode</code> object is not consistent with the operation. |
|
1228 * @see <a href="package-summary.html#unimpl"><code>CORBA</code> package |
|
1229 * comments for unimplemented features</a> |
|
1230 * @deprecated Use the new <a href="../DynamicAny/DynAnyFactory.html">DynAnyFactory</a> API instead |
|
1231 */ |
|
1232 @Deprecated |
|
1233 public org.omg.CORBA.DynSequence create_dyn_sequence(org.omg.CORBA.TypeCode type) throws org.omg.CORBA.ORBPackage.InconsistentTypeCode |
|
1234 { |
|
1235 throw new org.omg.CORBA.NO_IMPLEMENT(); |
|
1236 } |
|
1237 |
|
1238 |
|
1239 /** |
|
1240 * Creates a new <code>DynArray</code> object from the given |
|
1241 * <code>TypeCode</code> object. |
|
1242 * <P> |
|
1243 * @param type the <code>TypeCode</code> object from which to create a new |
|
1244 * <code>DynArray</code> object |
|
1245 * @return the new <code>DynArray</code> object created from the given |
|
1246 * <code>TypeCode</code> object |
|
1247 * @throws org.omg.CORBA.ORBPackage.InconsistentTypeCode if the given |
|
1248 * <code>TypeCode</code> object is not consistent with the operation. |
|
1249 * @see <a href="package-summary.html#unimpl"><code>CORBA</code> package |
|
1250 * comments for unimplemented features</a> |
|
1251 * @deprecated Use the new <a href="../DynamicAny/DynAnyFactory.html">DynAnyFactory</a> API instead |
|
1252 */ |
|
1253 @Deprecated |
|
1254 public org.omg.CORBA.DynArray create_dyn_array(org.omg.CORBA.TypeCode type) throws org.omg.CORBA.ORBPackage.InconsistentTypeCode |
|
1255 { |
|
1256 throw new org.omg.CORBA.NO_IMPLEMENT(); |
|
1257 } |
|
1258 |
|
1259 /** |
|
1260 * Creates a new <code>DynUnion</code> object from the given |
|
1261 * <code>TypeCode</code> object. |
|
1262 * <P> |
|
1263 * @param type the <code>TypeCode</code> object from which to create a new |
|
1264 * <code>DynUnion</code> object |
|
1265 * @return the new <code>DynUnion</code> object created from the given |
|
1266 * <code>TypeCode</code> object |
|
1267 * @throws org.omg.CORBA.ORBPackage.InconsistentTypeCode if the given |
|
1268 * <code>TypeCode</code> object is not consistent with the operation. |
|
1269 * @see <a href="package-summary.html#unimpl"><code>CORBA</code> package |
|
1270 * comments for unimplemented features</a> |
|
1271 * @deprecated Use the new <a href="../DynamicAny/DynAnyFactory.html">DynAnyFactory</a> API instead |
|
1272 */ |
|
1273 @Deprecated |
|
1274 public org.omg.CORBA.DynUnion create_dyn_union(org.omg.CORBA.TypeCode type) throws org.omg.CORBA.ORBPackage.InconsistentTypeCode |
|
1275 { |
|
1276 throw new org.omg.CORBA.NO_IMPLEMENT(); |
|
1277 } |
|
1278 |
|
1279 /** |
|
1280 * Creates a new <code>DynEnum</code> object from the given |
|
1281 * <code>TypeCode</code> object. |
|
1282 * <P> |
|
1283 * @param type the <code>TypeCode</code> object from which to create a new |
|
1284 * <code>DynEnum</code> object |
|
1285 * @return the new <code>DynEnum</code> object created from the given |
|
1286 * <code>TypeCode</code> object |
|
1287 * @throws org.omg.CORBA.ORBPackage.InconsistentTypeCode if the given |
|
1288 * <code>TypeCode</code> object is not consistent with the operation. |
|
1289 * @see <a href="package-summary.html#unimpl"><code>CORBA</code> package |
|
1290 * comments for unimplemented features</a> |
|
1291 * @deprecated Use the new <a href="../DynamicAny/DynAnyFactory.html">DynAnyFactory</a> API instead |
|
1292 */ |
|
1293 @Deprecated |
|
1294 public org.omg.CORBA.DynEnum create_dyn_enum(org.omg.CORBA.TypeCode type) throws org.omg.CORBA.ORBPackage.InconsistentTypeCode |
|
1295 { |
|
1296 throw new org.omg.CORBA.NO_IMPLEMENT(); |
|
1297 } |
|
1298 |
|
1299 /** |
|
1300 * Can be invoked to create new instances of policy objects |
|
1301 * of a specific type with specified initial state. If |
|
1302 * <tt>create_policy</tt> fails to instantiate a new Policy |
|
1303 * object due to its inability to interpret the requested type |
|
1304 * and content of the policy, it raises the <tt>PolicyError</tt> |
|
1305 * exception with the appropriate reason. |
|
1306 * @param type the <tt>PolicyType</tt> of the policy object to |
|
1307 * be created |
|
1308 * @param val the value that will be used to set the initial |
|
1309 * state of the <tt>Policy</tt> object that is created |
|
1310 * @return Reference to a newly created <tt>Policy</tt> object |
|
1311 * of type specified by the <tt>type</tt> parameter and |
|
1312 * initialized to a state specified by the <tt>val</tt> |
|
1313 * parameter |
|
1314 * @throws <tt>org.omg.CORBA.PolicyError</tt> when the requested |
|
1315 * policy is not supported or a requested initial state |
|
1316 * for the policy is not supported. |
|
1317 */ |
|
1318 public org.omg.CORBA.Policy create_policy(int type, org.omg.CORBA.Any val) |
|
1319 throws org.omg.CORBA.PolicyError |
|
1320 { |
|
1321 // Currently not implemented until PIORB. |
|
1322 throw new org.omg.CORBA.NO_IMPLEMENT(); |
|
1323 } |
|
1324 } |