repositoryimpl.java

来自「JAVA 所有包」· Java 代码 · 共 473 行

JAVA
473
字号
/* * @(#)RepositoryImpl.java	1.46 05/11/17 * * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. *//*  * @(#)RepositoryImpl.java 1.1 97/10/17  * * Copyright 1993-1997 Sun Microsystems, Inc. 901 San Antonio Road, * Palo Alto, California, 94303, U.S.A.  All Rights Reserved. * * This software is the confidential and proprietary information of Sun * Microsystems, Inc. ("Confidential Information").  You shall not * disclose such Confidential Information and shall use it only in * accordance with the terms of the license agreement you entered into * with Sun. * * CopyrightVersion 1.2 * */package com.sun.corba.se.impl.activation;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.Serializable;import java.util.Properties;import java.util.Hashtable;import java.util.Enumeration;import java.util.Vector;import org.omg.CORBA.CompletionStatus;import org.omg.CORBA.INITIALIZE;import org.omg.CORBA.INTERNAL;import org.omg.CORBA.SystemException;import com.sun.corba.se.spi.activation.BadServerDefinition;import com.sun.corba.se.spi.activation.RepositoryPackage.ServerDef;import com.sun.corba.se.spi.activation._RepositoryImplBase;import com.sun.corba.se.spi.activation.ServerAlreadyRegistered;import com.sun.corba.se.spi.activation.ServerAlreadyInstalled;import com.sun.corba.se.spi.activation.ServerAlreadyUninstalled;import com.sun.corba.se.spi.activation.ServerNotRegistered;import com.sun.corba.se.spi.legacy.connection.LegacyServerSocketEndPointInfo;import com.sun.corba.se.spi.transport.SocketOrChannelAcceptor;import com.sun.corba.se.spi.orb.ORB;import com.sun.corba.se.impl.orbutil.ORBConstants;import com.sun.corba.se.spi.logging.CORBALogDomains;import com.sun.corba.se.impl.logging.ActivationSystemException;/** *  * @version 	1.1, 97/10/17 * @author	Rohit Garg * @since	JDK1.2 */public class RepositoryImpl extends _RepositoryImplBase    implements Serializable{    // added serialver computed by the tool    private static final long serialVersionUID = 8458417785209341858L;    RepositoryImpl(ORB orb, File dbDir, boolean debug)    {	this.debug = debug ;	this.orb = orb;	wrapper = ActivationSystemException.get( orb, CORBALogDomains.ORBD_REPOSITORY ) ;	// if databse does not exist, create it otherwise read it in	File dbFile = new File(dbDir, "servers.db");	if (!dbFile.exists()) {	    db = new RepositoryDB(dbFile);	    db.flush();	} else {            try {                FileInputStream fis = new FileInputStream(dbFile);                ObjectInputStream ois = new ObjectInputStream(fis);                db = (RepositoryDB) ois.readObject();                ois.close();            } catch (Exception e) {		throw wrapper.cannotReadRepositoryDb( e ) ;            }	}	// export the repository	orb.connect(this);    }    private String printServerDef( ServerDef sd )    {	return "ServerDef[applicationName=" + sd.applicationName +	    " serverName=" + sd.serverName +	    " serverClassPath=" + sd.serverClassPath +	    " serverArgs=" + sd. serverArgs +	    " serverVmArgs=" + sd.serverVmArgs +	    "]" ;    }    public int registerServer(ServerDef serverDef, int theServerId)        throws ServerAlreadyRegistered    {	int 	    serverId;        DBServerDef server = null;        synchronized (db) {	    // check if server already registered            Enumeration enumeration = db.serverTable.elements();            while (enumeration.hasMoreElements()) {                server = (DBServerDef) enumeration.nextElement();                if (serverDef.applicationName.equals(server.applicationName)) {		    if (debug)			System.out.println( 			    "RepositoryImpl: registerServer called " + 			    "to register ServerDef " + 			    printServerDef( serverDef ) +			    " with " + ((theServerId==illegalServerId) ?			"a new server Id" : ("server Id " + theServerId)) +					   " FAILED because it is already registered." ) ;                    throw (new ServerAlreadyRegistered(server.id));                }            } 	    // generate a new server id	    if (theServerId == illegalServerId) 	        serverId = db.incrementServerIdCounter();	    else 		serverId = theServerId;     	    // add server def to the database	    server = new DBServerDef(serverDef, serverId);	    db.serverTable.put(new Integer(serverId), server);	    db.flush();    	    if (debug)		if (theServerId==illegalServerId)		    System.out.println( "RepositoryImpl: registerServer called " +					"to register ServerDef " + printServerDef( serverDef ) + 					" with new serverId " + serverId ) ;		else		    System.out.println( "RepositoryImpl: registerServer called " +					"to register ServerDef " + printServerDef( serverDef ) + 					" with assigned serverId " + serverId ) ;	    return serverId;        }    }    public int registerServer(ServerDef serverDef)        throws ServerAlreadyRegistered, BadServerDefinition    {	// verify that the entry is valid	LegacyServerSocketEndPointInfo endpoint =	    orb.getLegacyServerSocketManager() 	        .legacyGetEndpoint(LegacyServerSocketEndPointInfo.BOOT_NAMING);	int initSvcPort = ((SocketOrChannelAcceptor)endpoint)	    .getServerSocket().getLocalPort();	ServerTableEntry entry = new ServerTableEntry( wrapper,	    illegalServerId, serverDef, (int) initSvcPort, "", true, debug );	switch (entry.verify()) {	case ServerMain.OK:	    break;	case ServerMain.MAIN_CLASS_NOT_FOUND:	    throw new BadServerDefinition("main class not found.");	case ServerMain.NO_MAIN_METHOD:	    throw new BadServerDefinition("no main method found.");	case ServerMain.APPLICATION_ERROR:	    throw new BadServerDefinition("server application error.");	default: 	    throw new BadServerDefinition("unknown Exception.");	}	return registerServer(serverDef, illegalServerId);    }    public void unregisterServer(int serverId) throws ServerNotRegistered {        DBServerDef server = null;	Integer id = new Integer(serverId);        synchronized (db) {	    // check to see if the server is registered	    server = (DBServerDef) db.serverTable.get(id);	    if (server == null)  {		if (debug)		    System.out.println( 				       "RepositoryImpl: unregisterServer for serverId " + 				       serverId + " called: server not registered" ) ;		throw (new ServerNotRegistered());	    }	    // remove server from the database	    db.serverTable.remove(id);	    db.flush();	}	if (debug)	    System.out.println( 			       "RepositoryImpl: unregisterServer for serverId " + serverId + 			       " called" ) ;    }    private DBServerDef getDBServerDef(int serverId) throws ServerNotRegistered    {	Integer id = new Integer(serverId);	DBServerDef server = (DBServerDef) db.serverTable.get(id);	if (server == null) 	    throw new ServerNotRegistered( serverId );	return server ;    }    public ServerDef getServer(int serverId) throws ServerNotRegistered     {	DBServerDef server = getDBServerDef( serverId ) ;	ServerDef serverDef = new ServerDef(server.applicationName, server.name, 					    server.classPath, server.args, server.vmArgs);	if (debug)	    System.out.println( 			       "RepositoryImpl: getServer for serverId " + serverId + 			       " returns " + printServerDef( serverDef ) ) ;	return serverDef;    }    public boolean isInstalled(int serverId) throws ServerNotRegistered {	DBServerDef server = getDBServerDef( serverId ) ;	return server.isInstalled ;	    }    public void install( int serverId ) 	throws ServerNotRegistered, ServerAlreadyInstalled     {	DBServerDef server = getDBServerDef( serverId ) ;	if (server.isInstalled) 	    throw new ServerAlreadyInstalled( serverId ) ;	else {	    server.isInstalled = true ;	    db.flush() ;	}    }    public void uninstall( int serverId ) 	throws ServerNotRegistered, ServerAlreadyUninstalled     {	DBServerDef server = getDBServerDef( serverId ) ;	if (!server.isInstalled) 	    throw new ServerAlreadyUninstalled( serverId ) ;	else {	    server.isInstalled = false ;	    db.flush() ;	}    }    public int[] listRegisteredServers() {        synchronized (db) {            int i=0;            int servers[] = new int[db.serverTable.size()];             Enumeration enumeration = db.serverTable.elements();             while (enumeration.hasMoreElements()) {                DBServerDef server = (DBServerDef) enumeration.nextElement();                servers[i++] = server.id;            } 	    if (debug) {		StringBuffer sb = new StringBuffer() ;		for (int ctr=0; ctr<servers.length; ctr++) {		    sb.append( ' ' ) ;		    sb.append( servers[ctr] ) ;		}		System.out.println( 				   "RepositoryImpl: listRegisteredServers returns" +				   sb.toString() ) ;	    }            return servers;        }    }    public int getServerID(String applicationName) throws ServerNotRegistered {	synchronized (db) {	    int result = -1 ;	    for (Enumeration serverIds = db.serverTable.keys(); 		 serverIds.hasMoreElements();) 		{		    Integer nextServerId = (Integer) serverIds.nextElement();		    DBServerDef dbServerDef = 			(DBServerDef) db.serverTable.get(nextServerId);		    if (dbServerDef.applicationName.equals(applicationName)) {			result = nextServerId.intValue();			break ;		    }		}	    if (debug)		System.out.println("RepositoryImpl: getServerID for " + 				   applicationName + " is " + result ) ;	    	    if (result == -1) {	        throw (new ServerNotRegistered());	    } else {	        return result ;	    }	}    }        public String[] getApplicationNames() {	synchronized (db) {	    Vector v = new Vector();	    for (Enumeration serverIds = db.serverTable.keys(); 		 serverIds.hasMoreElements();) 		{		    Integer nextServerId = (Integer) serverIds.nextElement();				    DBServerDef dbServerDef = (DBServerDef)db.serverTable.get(									      nextServerId);		    if (!dbServerDef.applicationName.equals(""))			v.addElement( dbServerDef.applicationName ) ;		}	    String[] apps = new String[v.size()];	    for (int i = 0; i < v.size(); i++) {		apps[i] = (String)v.elementAt(i);	    }	    if (debug) {		StringBuffer sb = new StringBuffer() ;		for (int ctr=0; ctr<apps.length; ctr++) {		    sb.append( ' ' ) ;		    sb.append( apps[ctr] ) ;		}		System.out.println( "RepositoryImpl: getApplicationNames returns " +				    sb.toString() ) ;	    }	    return apps;	}    }    /**      * Typically the Repositoy is created within the ORBd VM but it can      * be independently started as well.     */    public static void main(String args[]) {	boolean debug = false ;	for (int ctr=0; ctr<args.length; ctr++)	    if (args[ctr].equals("-debug"))		debug = true ;		try {	    // See Bug 4396928 for more information about why we are 	    // initializing the ORBClass to PIORB (now ORBImpl, but see the bug).	    Properties props = new Properties();	    props.put("org.omg.CORBA.ORBClass", 		"com.sun.corba.se.impl.orb.ORBImpl");	    ORB orb = (ORB) ORB.init(args, props);	    // create the repository object	    String db = System.getProperty( ORBConstants.DB_PROPERTY, 		    ORBConstants.DEFAULT_DB_NAME );	    RepositoryImpl repository = new RepositoryImpl(orb, new File(db), 							   debug);	    // wait for shutdown	    orb.run();	} catch (Exception ex) {	    ex.printStackTrace();	}    }    transient private boolean debug = false;    final static int illegalServerId = -1;    transient private RepositoryDB db = null;    transient ORB orb = null;    transient ActivationSystemException wrapper ;    class RepositoryDB implements Serializable    {	File		db;	Hashtable 	serverTable;	Integer 	serverIdCounter;	RepositoryDB(File dbFile) {	    	    db = dbFile;	    // initialize the Server Id counter and hashtable.	    // the lower id range is reserved for system servers	    serverTable     = new Hashtable(255);	    serverIdCounter = new Integer(256); 	}	int incrementServerIdCounter()	{	    int value = serverIdCounter.intValue();	    serverIdCounter = new Integer(++value); 	    return value;	}	void flush()	{	    try {		db.delete();		FileOutputStream fos = new FileOutputStream(db);		ObjectOutputStream oos = new ObjectOutputStream(fos);		oos.writeObject(this);		oos.flush();		oos.close();	    } catch (Exception ex) {		throw wrapper.cannotWriteRepositoryDb( ex ) ;            }	}    }    class DBServerDef implements Serializable    {	public String toString() {	    return "DBServerDef(applicationName=" + applicationName +		", name=" + name +		", classPath=" + classPath +		", args=" + args + 		", vmArgs=" + vmArgs +		", id=" + id + 		", isInstalled=" + isInstalled + ")" ;	}	DBServerDef(ServerDef server, int server_id) {	    applicationName	= server.applicationName ;	    name 	= server.serverName;	    classPath 	= server.serverClassPath;	    args   	= server.serverArgs;	    vmArgs 	= server.serverVmArgs;	    id     	= server_id;	    isInstalled = false ;	}	String applicationName;	String name;	String classPath;	String args;	String vmArgs;	boolean isInstalled ;	int    id;    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?