home *** CD-ROM | disk | FTP | other *** search
/ Chip 1998 November / Chip_1998-11_cd.bin / tema / Cafe / main.bin / Naming.java < prev    next >
Text File  |  1997-05-20  |  6KB  |  191 lines

  1. /*
  2.  * @(#)Naming.java    1.4 96/11/18
  3.  * 
  4.  * Copyright (c) 1995, 1996 Sun Microsystems, Inc. All Rights Reserved.
  5.  * 
  6.  * This software is the confidential and proprietary information of Sun
  7.  * Microsystems, Inc. ("Confidential Information").  You shall not
  8.  * disclose such Confidential Information and shall use it only in
  9.  * accordance with the terms of the license agreement you entered into
  10.  * with Sun.
  11.  * 
  12.  * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE
  13.  * SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
  14.  * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
  15.  * PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES
  16.  * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING
  17.  * THIS SOFTWARE OR ITS DERIVATIVES.
  18.  * 
  19.  * CopyrightVersion 1.1_beta
  20.  */
  21. package java.rmi;
  22.  
  23. import java.rmi.registry.*;
  24. import java.net.URL;
  25. import java.net.MalformedURLException;
  26.  
  27. /**
  28.  * This is the bootstrap mechanism for obtaining references to remote
  29.  * objects based on Uniform Resource Locator (URL) syntax.  The URL
  30.  * for a remote object is specified using the usual host, port and
  31.  * name:
  32.  *<br>    rmi://host:port/name
  33.  *<br>    host = host name of registry  (defaults to current host)
  34.  *<br>    port = port number of registry (defaults to the registry port number)
  35.  *<br>  name = name for remote object
  36.  */
  37. public final class Naming {
  38.     /*
  39.      * Disallow anyone from creating one of these
  40.      */
  41.     private Naming() {}
  42.  
  43.     /**
  44.      * Returns the remote object for the URL.
  45.      * @exception RemoteException If registry could not be contacted.
  46.      * @exception NotBoundException If name is not currently bound.
  47.      */
  48.     public static Remote lookup(String name)
  49.     throws NotBoundException,
  50.         java.net.MalformedURLException,
  51.         UnknownHostException,
  52.         RemoteException
  53.     {
  54.     URL url = cleanURL(name);
  55.     Registry registry = getRegistry(url);
  56.  
  57.     String file = getName(url);
  58.     if (file == null)
  59.         return registry;
  60.     return registry.lookup(file);
  61.     }
  62.     
  63.     /**
  64.      * Binds the name to the specified remote object.
  65.      * @exception RemoteException If registry could not be contacted.
  66.      * @exception AlreadyBoundException If name is already bound.
  67.      */
  68.     public static void bind(String name, Remote obj)
  69.     throws AlreadyBoundException,
  70.         java.net.MalformedURLException,
  71.         UnknownHostException,
  72.         RemoteException
  73.     {
  74.     URL url = cleanURL(name);
  75.     Registry registry = getRegistry(url);
  76.  
  77.     if (obj == null)
  78.         throw new NullPointerException("cannot bind to null");
  79.  
  80.     registry.bind(getName(url), obj);
  81.     }
  82.     
  83.     /**
  84.      * Unbind the name.
  85.      * @exception RemoteException If registry could not be contacted.
  86.      * @exception NotBoundException If name is not currently bound.
  87.      */
  88.     public static void unbind(String name)
  89.     throws RemoteException,
  90.         NotBoundException,
  91.         java.net.MalformedURLException,
  92.         UnknownHostException
  93.     {
  94.     URL url = cleanURL(name);
  95.     Registry registry = getRegistry(url);
  96.  
  97.     registry.unbind(getName(url));
  98.     }
  99.  
  100.     /** 
  101.      * Rebind the name to a new object; replaces any existing binding.
  102.      * @exception RemoteException If registry could not be contacted.
  103.      */
  104.     public static void rebind(String name, Remote obj)
  105.     throws RemoteException,
  106.         java.net.MalformedURLException,
  107.         UnknownHostException
  108.     {
  109.     URL url = cleanURL(name);
  110.     Registry registry = getRegistry(url);
  111.  
  112.     if (obj == null)
  113.         throw new NullPointerException("cannot bind to null");
  114.  
  115.     registry.rebind(getName(url), obj);
  116.     }
  117.     
  118.     /**
  119.      * Returns an array of strings of the URLs in the registry.
  120.      * The array contains a snapshot of the names present in the registry.
  121.      * @exception RemoteException If registry could not be contacted.
  122.      */
  123.     public static String[] list(String name)
  124.     throws RemoteException,
  125.         java.net.MalformedURLException,
  126.         UnknownHostException
  127.     {
  128.     URL url = cleanURL(name);
  129.     Registry registry = getRegistry(url);
  130.  
  131.     String host = url.getHost();
  132.     int port = url.getPort();
  133.  
  134.     String prefix = "rmi:";
  135.      if (port > 0 || !host.equals(""))
  136.         prefix += "//" + host;
  137.     if (port > 0)
  138.         prefix += ":" + port;
  139.     prefix += "/";
  140.  
  141.     String[] names = registry.list();
  142.     for (int i = 0; i < names.length; i++) {
  143.         names[i] = prefix + names[i];
  144.     }
  145.     return names;
  146.     }
  147.  
  148.     /** Function to find registry from URL
  149.      */
  150.     private static Registry getRegistry(URL url)
  151.     throws RemoteException, UnknownHostException
  152.     {
  153.     String host = url.getHost();
  154.     int port = url.getPort();
  155.  
  156.     return LocateRegistry.getRegistry(host, port);
  157.     }
  158.  
  159.     /** Function to extract only the name from the URL.
  160.      */
  161.     private static String getName(URL url)
  162.     {
  163.     String name = url.getFile();
  164.     if (name == null || name.equals("/"))
  165.         return null;
  166.     return name.substring(1);
  167.     }
  168.  
  169.     /**
  170.      * Function to cleanup and create the URL.
  171.      * It checks for and removes the protocol
  172.      */
  173.     private static URL cleanURL(String name) 
  174.     throws java.net.MalformedURLException
  175.     {
  176.     URL url = new URL("file:");
  177.  
  178.     // remove the approved protocol
  179.     if (name.startsWith("rmi:"))
  180.         name = name.substring(4);
  181.  
  182.     // No protocol must remain
  183.     int colon = name.indexOf(':');
  184.     if (colon >= 0 && colon < name.indexOf('/') )
  185.         throw new java.net.MalformedURLException("Protocol should be rmi:");
  186.  
  187.     url = new URL(url, name);
  188.     return url;
  189.     }
  190. }
  191.