Added code to load up configuration information at server init time.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@78 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
@@ -0,0 +1,9 @@
|
|||||||
|
#
|
||||||
|
# $Id: server.properties,v 1.1 2001/07/19 21:29:01 mdb Exp $
|
||||||
|
#
|
||||||
|
# Configuration for the Cher server
|
||||||
|
|
||||||
|
# These invocation service providers will be registered with the
|
||||||
|
# invocation manager during the server init process.
|
||||||
|
providers = \
|
||||||
|
test = com.threerings.cocktail.cher.server.test.TestProvider
|
||||||
@@ -1,8 +1,11 @@
|
|||||||
//
|
//
|
||||||
// $Id: PresentsServer.java,v 1.8 2001/07/19 19:18:07 mdb Exp $
|
// $Id: PresentsServer.java,v 1.9 2001/07/19 21:29:01 mdb Exp $
|
||||||
|
|
||||||
package com.threerings.cocktail.cher.server;
|
package com.threerings.cocktail.cher.server;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import com.samskivert.util.Config;
|
||||||
|
|
||||||
import com.threerings.cocktail.cher.Log;
|
import com.threerings.cocktail.cher.Log;
|
||||||
import com.threerings.cocktail.cher.dobj.DObjectManager;
|
import com.threerings.cocktail.cher.dobj.DObjectManager;
|
||||||
import com.threerings.cocktail.cher.server.net.AuthManager;
|
import com.threerings.cocktail.cher.server.net.AuthManager;
|
||||||
@@ -14,10 +17,21 @@ import com.threerings.cocktail.cher.client.test.TestService;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* The cher server provides a central point of access to the various
|
* The cher server provides a central point of access to the various
|
||||||
* facilities that make up the cher layer of the system.
|
* facilities that make up the cher framework. To facilitate extension and
|
||||||
|
* customization, a single instance of the cher server should be created
|
||||||
|
* and initialized in a process. To facilitate easy access to the services
|
||||||
|
* provided by the cher server, static references to the various managers
|
||||||
|
* are made available in the <code>CherServer</code> class. These will be
|
||||||
|
* configured when the singleton instance is initialized.
|
||||||
*/
|
*/
|
||||||
public class CherServer
|
public class CherServer
|
||||||
{
|
{
|
||||||
|
/** The namespace used for server config properties. */
|
||||||
|
public static final String CONFIG_KEY = "cher";
|
||||||
|
|
||||||
|
/** The server configuration. */
|
||||||
|
public static Config config;
|
||||||
|
|
||||||
/** The authentication manager. */
|
/** The authentication manager. */
|
||||||
public static AuthManager authmgr;
|
public static AuthManager authmgr;
|
||||||
|
|
||||||
@@ -36,29 +50,74 @@ public class CherServer
|
|||||||
/**
|
/**
|
||||||
* Initializes all of the server services and prepares for operation.
|
* Initializes all of the server services and prepares for operation.
|
||||||
*/
|
*/
|
||||||
public static void init ()
|
public void init ()
|
||||||
|
throws IOException
|
||||||
{
|
{
|
||||||
try {
|
// create our configuration object
|
||||||
// create our authentication manager
|
config = new Config();
|
||||||
authmgr = new AuthManager(new DummyAuthenticator());
|
// bind the cher server config into the namespace
|
||||||
// create our connection manager
|
config.bindProperties(CONFIG_KEY, CONFIG_PATH);
|
||||||
conmgr = new ConnectionManager(authmgr);
|
|
||||||
// create our client manager
|
|
||||||
clmgr = new ClientManager(conmgr);
|
|
||||||
// create our distributed object manager
|
|
||||||
omgr = new CherDObjectMgr();
|
|
||||||
// create our invocation manager
|
|
||||||
invmgr = new InvocationManager(omgr);
|
|
||||||
|
|
||||||
// create an object for testing
|
// create our authentication manager
|
||||||
omgr.createObject(TestObject.class, null, false);
|
authmgr = new AuthManager(new DummyAuthenticator());
|
||||||
|
// create our connection manager
|
||||||
|
conmgr = new ConnectionManager(authmgr);
|
||||||
|
// create our client manager
|
||||||
|
clmgr = new ClientManager(conmgr);
|
||||||
|
// create our distributed object manager
|
||||||
|
omgr = new CherDObjectMgr();
|
||||||
|
// create our invocation manager
|
||||||
|
invmgr = new InvocationManager(omgr);
|
||||||
|
|
||||||
// register our test provider
|
// register our invocation service providers
|
||||||
invmgr.registerProvider(TestService.MODULE, new TestProvider());
|
registerProviders(config.getValue(PROVIDERS_KEY, (String[])null));
|
||||||
|
}
|
||||||
|
|
||||||
} catch (Exception e) {
|
/**
|
||||||
Log.warning("Unable to initialize server.");
|
* Registers invocation service providers as parsed from a
|
||||||
Log.logStackTrace(e);
|
* configuration file. Each string in the array should contain an
|
||||||
|
* expression of the form:
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* module = provider fully-qualified class name
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* A comma separated list of these can be specified in the
|
||||||
|
* configuration file and loaded into a string array easily. These
|
||||||
|
* providers will be instantiated and registered with the invocation
|
||||||
|
* manager.
|
||||||
|
*/
|
||||||
|
protected void registerProviders (String[] providers)
|
||||||
|
{
|
||||||
|
// ignore null arrays to make life easier for the caller
|
||||||
|
if (providers == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < providers.length; i++) {
|
||||||
|
int eidx = providers[i].indexOf("=");
|
||||||
|
if (eidx == -1) {
|
||||||
|
Log.warning("Ignoring bogus provider declaration " +
|
||||||
|
"[decl=" + providers[i] + "].");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
String module = providers[i].substring(0, eidx).trim();
|
||||||
|
String pname = providers[i].substring(eidx+1).trim();
|
||||||
|
|
||||||
|
// instantiate the provider class and register it
|
||||||
|
try {
|
||||||
|
Class pclass = Class.forName(pname);
|
||||||
|
InvocationProvider provider = (InvocationProvider)
|
||||||
|
pclass.newInstance();
|
||||||
|
invmgr.registerProvider(module, provider);
|
||||||
|
Log.info("Registered provider [module=" + module +
|
||||||
|
", provider=" + pname + "].");
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
Log.warning("Unable to register provider [module=" + module +
|
||||||
|
", provider=" + pname + ", error=" + e + "].");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -66,7 +125,7 @@ public class CherServer
|
|||||||
* Starts up all of the server services and enters the main server
|
* Starts up all of the server services and enters the main server
|
||||||
* event loop.
|
* event loop.
|
||||||
*/
|
*/
|
||||||
public static void run ()
|
public void run ()
|
||||||
{
|
{
|
||||||
// start up the auth manager
|
// start up the auth manager
|
||||||
authmgr.start();
|
authmgr.start();
|
||||||
@@ -78,7 +137,20 @@ public class CherServer
|
|||||||
|
|
||||||
public static void main (String[] args)
|
public static void main (String[] args)
|
||||||
{
|
{
|
||||||
init();
|
CherServer server = new CherServer();
|
||||||
run();
|
try {
|
||||||
|
server.init();
|
||||||
|
server.run();
|
||||||
|
} catch (Exception e) {
|
||||||
|
Log.warning("Unable to initialize server.");
|
||||||
|
Log.logStackTrace(e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// the path to the config file
|
||||||
|
protected final static String CONFIG_PATH =
|
||||||
|
"rsrc/config/cocktail/cher/server";
|
||||||
|
|
||||||
|
// the config key for our list of invocation provider mappings
|
||||||
|
protected final static String PROVIDERS_KEY = CONFIG_KEY + ".providers";
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user