001: /*
002: * <copyright>
003: *
004: * Copyright 1997-2004 BBNT Solutions, LLC
005: * under sponsorship of the Defense Advanced Research Projects
006: * Agency (DARPA).
007: *
008: * You can redistribute this software and/or modify it under the
009: * terms of the Cougaar Open Source License as published on the
010: * Cougaar Open Source Website (www.cougaar.org).
011: *
012: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
013: * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
014: * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
015: * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
016: * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
017: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
018: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
019: * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
020: * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
021: * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
022: * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
023: *
024: * </copyright>
025: */
026:
027: package org.cougaar.tools.server.rmi;
028:
029: import java.rmi.registry.LocateRegistry;
030: import java.rmi.registry.Registry;
031:
032: import org.cougaar.tools.server.RemoteHost;
033: import org.cougaar.tools.server.RemoteHostRegistry;
034:
035: /**
036: * RMI-specific implementation of a RemoteHost registry.
037: * <p>
038: * Note that this is the <i>only</i> public class in this
039: * package.
040: */
041: public class RMIRegistry extends RemoteHostRegistry {
042:
043: private static final String REG_NAME = "AppServer";
044:
045: public RMIRegistry() {
046: }
047:
048: // misc "create*" methods
049:
050: // client
051: public RemoteHost lookupRemoteHost(String hostName, int hostPort,
052: boolean verbose) throws Exception {
053: // could cache this...
054:
055: // locate the registry at <hostname, port>
056: Registry reg;
057: try {
058: reg = LocateRegistry.getRegistry(hostName, hostPort);
059: } catch (Exception e) {
060: if (verbose) {
061: System.out.println("Unable to contact " + hostName
062: + ":" + hostPort);
063: }
064: throw e;
065: }
066:
067: // get the remote implementation
068: RemoteHostDecl rhd;
069: try {
070: rhd = (RemoteHostDecl) reg.lookup(REG_NAME);
071: } catch (Exception e) {
072: if (verbose) {
073: System.out.println("Unable to find AppServer on "
074: + hostName + ":" + hostPort);
075: }
076: throw e;
077: }
078:
079: // create a client wrapper
080: RemoteHost rh = new RemoteHostStub(rhd);
081: return rh;
082: }
083:
084: // server
085: public void bindRemoteHost(RemoteHost rh, int port, boolean verbose)
086: throws Exception {
087:
088: // start an RMIRegistry - exit on failure
089: if (verbose) {
090: System.err.print("Creating Registry: ");
091: }
092: Registry registry = LocateRegistry.createRegistry(port);
093: if (verbose) {
094: System.err.println(registry.toString());
095: }
096:
097: // maybe should save this registry, for efficiency...
098:
099: // create a server instance
100: if (verbose) {
101: System.err.print("Creating Server: ");
102: }
103: RemoteHostDecl rhd = new RemoteHostImpl(rh);
104:
105: // announce in registry
106: registry.rebind(REG_NAME, rhd);
107: if (verbose) {
108: System.err.println(rhd.toString());
109: }
110: }
111:
112: }
|