Package com.sun.jini.example.hello

Source Code of com.sun.jini.example.hello.Server

/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package com.sun.jini.example.hello;

import java.rmi.RemoteException;
import java.security.PrivilegedExceptionAction;
import javax.security.auth.Subject;
import javax.security.auth.login.LoginContext;
import net.jini.config.Configuration;
import net.jini.config.ConfigurationException;
import net.jini.config.ConfigurationProvider;
import net.jini.config.NoSuchEntryException;
import net.jini.core.lookup.ServiceID;
import net.jini.discovery.DiscoveryManagement;
import net.jini.discovery.LookupDiscovery;
import net.jini.export.Exporter;
import net.jini.export.ProxyAccessor;
import net.jini.id.Uuid;
import net.jini.id.UuidFactory;
import net.jini.jeri.BasicILFactory;
import net.jini.jeri.BasicJeriExporter;
import net.jini.jeri.tcp.TcpServerEndpoint;
import net.jini.lookup.JoinManager;
import net.jini.security.TrustVerifier;
import net.jini.security.proxytrust.ServerProxyTrust;

/**
* Defines an application server that provides an implementation of the Hello
* interface.
*
* The application uses the following arguments:
*
* [all] - All arguments are used as options when getting the configuration
*
* The application uses the following configuration entries, with component
* com.sun.jini.example.hello.Server:
*
* discoveryManager
*   type: DiscoveryManagement
*   default: new LookupDiscovery(new String[] { "" }, config)
*   Object used to discover lookup services to join.
*
* exporter
*   type: Exporter
*   default: none
*   The object to use for exporting the server
*
* loginContext
*   type: LoginContext
*   default: null
*   If non-null, specifies the JAAS login context to use for performing a JAAS
*   login and supplying the Subject to use when running the server. If null,
*   no JAAS login is performed.
*
* @author Sun Microsystems, Inc.
*/
public class Server implements Hello, ServerProxyTrust, ProxyAccessor {

    /**
     * If the impl gets GC'ed, then the server will be unexported.
     * Store the instance here to prevent this.
     */
    private static Server serverImpl;

    /* The configuration to use for configuring the server */
    protected final Configuration config;

    /** The server proxy, for use by getProxyVerifier */
    protected Hello serverProxy;

    /**
     * Starts and registers a server that implements the Hello interface.
     *
     * @param args options to use when getting the Configuration
     * @throws ConfigurationException if a problem occurs with the
     *         configuration
     * @throws RemoteException if a remote communication problem occurs
     */
    public static void main(String[] args) throws Exception {
  serverImpl = new Server(args);
  serverImpl.init();
  System.out.println("Hello server is ready");
    }

    /**
     * Creates the server.
     *
     * @param configOptions options to use when getting the Configuration
     * @throws ConfigurationException if a problem occurs creating the
     *         configuration
     */
    protected Server(String[] configOptions) throws ConfigurationException {
  config = ConfigurationProvider.getInstance
                       ( configOptions, (this.getClass()).getClassLoader() );
    }

    /**
     * Initializes the server, including exporting it and storing its proxy in
     * the registry.
     *
     * @throws Exception if a problem occurs
     */
    protected void init() throws Exception {
  LoginContext loginContext = (LoginContext) config.getEntry(
      "com.sun.jini.example.hello.Server", "loginContext",
      LoginContext.class, null);
  if (loginContext == null) {
      initAsSubject();
  } else {
      loginContext.login();
      Subject.doAsPrivileged(
    loginContext.getSubject(),
    new PrivilegedExceptionAction() {
        public Object run() throws Exception {
      initAsSubject();
      return null;
        }
    },
    null);
  }
    }

    /**
     * Initializes the server, assuming that the appropriate subject is in
     * effect.
     */
    protected void initAsSubject() throws Exception {
  /* Export the server */
  Exporter exporter = getExporter();
  serverProxy = (Hello) exporter.export(this);

  /* Create the smart proxy */
  Proxy smartProxy = Proxy.create(serverProxy);

  /* Get the discovery manager, for discovering lookup services */
  DiscoveryManagement discoveryManager;
  try {
      discoveryManager = (DiscoveryManagement) config.getEntry(
    "com.sun.jini.example.hello.Server", "discoveryManager",
    DiscoveryManagement.class);
  } catch (NoSuchEntryException e) {
            /* Use the public group */
      discoveryManager = new LookupDiscovery(
    new String[] { "" }, config);
  }

  /* Get the join manager, for joining lookup services */
  JoinManager joinManager =
      new JoinManager(smartProxy, null /* attrSets */, getServiceID(),
          discoveryManager, null /* leaseMgr */, config);
    }

    /**
     * Returns the exporter for exporting the server.
     *
     * @throws ConfigurationException if a problem occurs getting the exporter
     *         from the configuration
     * @throws RemoteException if a remote communication problem occurs
     */
    protected Exporter getExporter()
  throws ConfigurationException, RemoteException
    {
  return (Exporter) config.getEntry(
      "com.sun.jini.example.hello.Server", "exporter", Exporter.class,
      new BasicJeriExporter(TcpServerEndpoint.getInstance(0),
          new BasicILFactory()));
    }

    /** Returns the service ID for this server. */
    protected ServiceID getServiceID() {
  return createServiceID();
    }

    /** Creates a new service ID. */
    protected static ServiceID createServiceID() {
  Uuid uuid = UuidFactory.generate();
  return new ServiceID(
      uuid.getMostSignificantBits(), uuid.getLeastSignificantBits());
    }

    /** Implement the Hello interface. */
    public String sayHello() {
  return "Hello, world!";
    }

    /**
     * Implement the ServerProxyTrust interface to provide a verifier for
     * secure smart proxies.
     */
    public TrustVerifier getProxyVerifier() {
  return new Proxy.Verifier(serverProxy);
    }

    /**
     * Returns a proxy object for this remote object.
     *
     * @return our proxy
     */
    public Object getProxy() {
        return serverProxy;
    }

}
TOP

Related Classes of com.sun.jini.example.hello.Server

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.