FileDocCategorySizeDatePackage
ConvertServiceImpl.javaAPI DocExample3447Thu Mar 16 11:52:32 GMT 2000None

ConvertServiceImpl.java

/*
 *
 * Copyright (c) 2000 Scott Oaks and Henry Wong. All Rights Reserved.
 *
 * Permission to use, copy, modify, and distribute this software
 * and its documentation for NON-COMMERCIAL purposes and
 * without fee is hereby granted.
 *
 * This sample source code is provided for example only,
 * on an unsupported, as-is basis. 
 *
 * AUTHOR MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
 * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
 * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
 * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. AUTHOR SHALL NOT BE LIABLE FOR
 * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
 * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
 *
 * THIS SOFTWARE IS NOT DESIGNED OR INTENDED FOR USE OR RESALE AS ON-LINE
 * CONTROL EQUIPMENT IN HAZARDOUS ENVIRONMENTS REQUIRING FAIL-SAFE
 * PERFORMANCE, SUCH AS IN THE OPERATION OF NUCLEAR FACILITIES, AIRCRAFT
 * NAVIGATION OR COMMUNICATION SYSTEMS, AIR TRAFFIC CONTROL, DIRECT LIFE
 * SUPPORT MACHINES, OR WEAPONS SYSTEMS, IN WHICH THE FAILURE OF THE
 * SOFTWARE COULD LEAD DIRECTLY TO DEATH, PERSONAL INJURY, OR SEVERE
 * PHYSICAL OR ENVIRONMENTAL DAMAGE ("HIGH RISK ACTIVITIES").  AUTHOR
 * SPECIFICALLY DISCLAIMS ANY EXPRESS OR IMPLIED WARRANTY OF FITNESS FOR
 * HIGH RISK ACTIVITIES.
 */


import java.util.*;
import java.io.*;
import java.rmi.*;
import java.rmi.server.*;
import net.jini.discovery.*;
import net.jini.core.lease.*;
import net.jini.core.event.*;
import com.sun.jini.lookup.*;

public class ConvertServiceImpl extends UnicastRemoteObject
                                implements ConvertServiceProxy {

    private ServerLandlord lord;
    private ServerDelivery sender;

    public ConvertServiceImpl() throws RemoteException {
        lord = new ServerLandlord();
        sender = new ServerDelivery(this, lord);
    }

    public ConvertServiceRegistration getInstance(long duration) {
        Hashtable ht = new Hashtable(13);
        return new ConvertServiceRegistrationImpl(this, lord.newLease(ht, duration));
    }

    // To convert, first check the cache for previous results. If
    // there's no cache, the landlord has expired the lease. If
    // there's no data in the cache, calculcate the data and put it there
    public String convert(Lease l, int i) throws LeaseDeniedException {
        Hashtable cache = (Hashtable) lord.getSessionData(l);
        if (cache == null)
            throw new LeaseDeniedException("Lease expired");
        Integer I = new Integer(i);
        String s;
        s = (String) cache.get(I);
        if (s == null) {
            s = I.toString();
            cache.put(I, s);
        }
        sender.deliver(i);
        return s;
    }

    public EventRegistration trackConversions(long duration, RemoteEventListener rel, MarshalledObject key) {
        return sender.addListener(rel, duration, key);
    }

    public static void main(String[] args) throws Exception {
        System.setSecurityManager(new RMISecurityManager());
        String[] groups = new String[] { "" };

        // Create the instance of the service; the JoinManager will
        // register it and renew its leases with the lookup service
        ConvertServiceImpl csi = (ConvertServiceImpl) new ConvertServiceImpl();
        JoinManager manager = new JoinManager(csi, null, groups,
                                              null, null, null);
    }
}