/*
* Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
* ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*/
package com.sun.corba.se.internal.CosNaming;
import java.util.Enumeration;
import java.util.Properties;
import java.io.File;
import java.io.FileInputStream;
import com.sun.corba.se.spi.orb.ORB ;
import com.sun.corba.se.spi.resolver.Resolver ;
import com.sun.corba.se.spi.resolver.LocalResolver ;
import com.sun.corba.se.spi.resolver.ResolverDefault ;
import com.sun.corba.se.impl.orbutil.CorbaResourceUtil;
import com.sun.corba.se.impl.orbutil.ORBConstants;
/**
* Class BootstrapServer is the main entry point for the bootstrap server
* implementation. The BootstrapServer makes all object references
* defined in a configurable file available using the old
* naming bootstrap protocol.
*/
public class BootstrapServer
{
private ORB orb;
/**
* Main startup routine for the bootstrap server.
* It first determines the port on which to listen, checks that the
* specified file is available, and then creates the resolver
* that will be used to service the requests in the
* BootstrapServerRequestDispatcher.
* @param args the command-line arguments to the main program.
*/
public static final void main(String[] args)
{
String propertiesFilename = null;
int initialPort = ORBConstants.DEFAULT_INITIAL_PORT;
// Process arguments
for (int i=0;i<args.length;i++) {
// Look for the filename
if (args[i].equals("-InitialServicesFile") && i < args.length -1) {
propertiesFilename = args[i+1];
}
// Was the initial port specified? If so, override
// This property normally is applied for the client side
// configuration of resolvers. Here we are using it to
// define the server port that the with which the resolvers
// communicate.
if (args[i].equals("-ORBInitialPort") && i < args.length-1) {
initialPort = java.lang.Integer.parseInt(args[i+1]);
}
}
if (propertiesFilename == null) {
System.out.println( CorbaResourceUtil.getText("bootstrap.usage",
"BootstrapServer"));
return;
}
// Create a file
File file = new File(propertiesFilename);
// Verify that if it exists, it is readable
if (file.exists() == true && file.canRead() == false) {
System.err.println(CorbaResourceUtil.getText(
"bootstrap.filenotreadable", file.getAbsolutePath()));
return;
}
// Success: start up
System.out.println(CorbaResourceUtil.getText(
"bootstrap.success", Integer.toString(initialPort),
file.getAbsolutePath()));
Properties props = new Properties() ;
// Use the SERVER_PORT to create an Acceptor using the
// old legacy code in ORBConfiguratorImpl. When (if?)
// the legacy support is removed, this code will need
// to create an Acceptor directly.
props.put( ORBConstants.SERVER_PORT_PROPERTY,
Integer.toString( initialPort ) ) ;
ORB orb = (ORB) org.omg.CORBA.ORB.init(args,props);
LocalResolver lres = orb.getLocalResolver() ;
Resolver fres = ResolverDefault.makeFileResolver( orb, file ) ;
Resolver cres = ResolverDefault.makeCompositeResolver( fres, lres ) ;
LocalResolver sres = ResolverDefault.makeSplitLocalResolver( cres, lres ) ;
orb.setLocalResolver( sres ) ;
try {
// This causes the acceptors to start listening.
orb.resolve_initial_references(ORBConstants.ROOT_POA_NAME);
} catch (org.omg.CORBA.ORBPackage.InvalidName e) {
RuntimeException rte = new RuntimeException("This should not happen");
rte.initCause(e);
throw rte;
}
orb.run() ;
}
}