⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 objectkeyfactoryimpl.java

📁 java1.6众多例子参考
💻 JAVA
字号:
/* * @(#)ObjectKeyFactoryImpl.java	1.23 05/11/17 * * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */package com.sun.corba.se.impl.ior;import java.io.IOException ;import org.omg.CORBA.MARSHAL ;import org.omg.CORBA.OctetSeqHolder ;import org.omg.CORBA_2_3.portable.InputStream ;import com.sun.corba.se.spi.ior.ObjectId ;import com.sun.corba.se.spi.ior.ObjectKey ;import com.sun.corba.se.spi.ior.ObjectKeyFactory ;import com.sun.corba.se.spi.ior.ObjectKeyTemplate ;import com.sun.corba.se.spi.orb.ORB ;import com.sun.corba.se.spi.logging.CORBALogDomains ;import com.sun.corba.se.impl.orbutil.ORBConstants ;import com.sun.corba.se.impl.ior.JIDLObjectKeyTemplate ;import com.sun.corba.se.impl.ior.POAObjectKeyTemplate ;import com.sun.corba.se.impl.ior.WireObjectKeyTemplate ;import com.sun.corba.se.impl.ior.ObjectIdImpl ;import com.sun.corba.se.impl.ior.ObjectKeyImpl ;import com.sun.corba.se.impl.logging.IORSystemException ;import com.sun.corba.se.impl.encoding.EncapsInputStream ;/** Based on the magic and scid, return the appropriate * ObjectKeyTemplate.  Expects to be called with a valid* magic.  If scid is not valid, null should be returned.*/interface Handler {    ObjectKeyTemplate handle( int magic, int scid, 	InputStream is, OctetSeqHolder osh ) ;}/** Singleton used to manufacture ObjectKey and ObjectKeyTemplate * instances. * @author Ken Cavanaugh */public class ObjectKeyFactoryImpl implements ObjectKeyFactory{    public static final int MAGIC_BASE			= 0xAFABCAFE ;    // Magic used in our object keys for JDK 1.2, 1.3, RMI-IIOP OP,    // J2EE 1.0-1.2.1.    public static final int JAVAMAGIC_OLD		= MAGIC_BASE ;    // Magic used only in JDK 1.3.1.  No format changes in object keys.    public static final int JAVAMAGIC_NEW		= MAGIC_BASE + 1 ;    // New magic used in our object keys for JDK 1.4, J2EE 1.3 and later.    // Format changes: all object keys have version string; POA key format    // is changed.    public static final int JAVAMAGIC_NEWER		= MAGIC_BASE + 2 ;    public static final int MAX_MAGIC			= JAVAMAGIC_NEWER ;    // Beginning in JDK 1.3.1_01, we introduced changes which required    // the ability to distinguish between JDK 1.3.1 FCS and the patch    // versions.  See OldJIDLObjectKeyTemplate.    public static final byte JDK1_3_1_01_PATCH_LEVEL = 1;      private final ORB orb ;    private IORSystemException wrapper ;    public ObjectKeyFactoryImpl( ORB orb )     {	this.orb = orb ;	wrapper = IORSystemException.get( orb,	    CORBALogDomains.OA_IOR ) ;    }       // XXX The handlers still need to be made pluggable.    //    // I think this can be done as follows:    // 1. Move the Handler interface into the SPI as ObjectKeyHandler.    // 2. Add two methods to ObjectAdapterFactory:    //	    ObjectKeyHandler getHandlerForObjectKey( ) ;    //	    ObjectKeyHandler getHandlerForObjectKeyTemplate( ) ;    // 3. Move the implementation of the fullKey handler and the    //    oktempOnly handler into TOAFactory and POAFactory.    // 4. Move the ObjectKey impl classes into the impl/oa packages.    // 5. Create an internal interface    //	    interface HandlerFinder {    //		ObjectKeyHandler get( int scid ) ;    //	    }    //    and modify create(InputStream,Handler,OctetSeqHolder)     //    to take a HandlerFinder instead of a Handler.    // 6. Modify create( byte[] ) and createTemplate( InputStream )    //    to create an instance of HandlerFinder: something like:    //	    new HandlerFinder() {    //		ObjectKeyHandler get( int scid )     //		{    //		    return orb.getRequestDispatcherRegistry().    //			getObjectAdapterFactory( scid ).getHandlerForObjectKey() ;    //		}    //	    and similarly for getHandlerForObjectKeyTemplate.    /** This handler reads the full object key, both the oktemp    * and the ID.    */    private Handler fullKey = new Handler() {	public ObjectKeyTemplate handle( int magic, int scid, 	    InputStream is, OctetSeqHolder osh ) {		ObjectKeyTemplate oktemp = null ;		if ((scid >= ORBConstants.FIRST_POA_SCID) && 		    (scid <= ORBConstants.MAX_POA_SCID)) {		    if (magic >= JAVAMAGIC_NEWER)			oktemp = new POAObjectKeyTemplate( orb, magic, scid, is, osh ) ;		    else			oktemp = new OldPOAObjectKeyTemplate( orb, magic, scid, is, osh ) ;		} else if ((scid >= 0) && (scid < ORBConstants.FIRST_POA_SCID)) {		    if (magic >= JAVAMAGIC_NEWER)			oktemp = new JIDLObjectKeyTemplate( orb, magic, scid, is, osh ) ;		    else			oktemp = new OldJIDLObjectKeyTemplate( orb, magic, scid, is, osh );		}		return oktemp ;	    }	} ;    /** This handler reads only the oktemp.    */    private Handler oktempOnly = new Handler() {	public ObjectKeyTemplate handle( int magic, int scid, 	    InputStream is, OctetSeqHolder osh ) {		ObjectKeyTemplate oktemp = null ;		if ((scid >= ORBConstants.FIRST_POA_SCID) && 		    (scid <= ORBConstants.MAX_POA_SCID)) {		    if (magic >= JAVAMAGIC_NEWER)			oktemp = new POAObjectKeyTemplate( orb, magic, scid, is ) ;		    else			oktemp = new OldPOAObjectKeyTemplate( orb, magic, scid, is ) ;		} else if ((scid >= 0) && (scid < ORBConstants.FIRST_POA_SCID)) {		    if (magic >= JAVAMAGIC_NEWER)			oktemp = new JIDLObjectKeyTemplate( orb, magic, scid, is ) ;		    else			oktemp = new OldJIDLObjectKeyTemplate( orb, magic, scid, is ) ;		}		return oktemp ;	    }	} ;    /** Returns true iff magic is in the range of valid magic numbers    * for our ORB.    */    private boolean validMagic( int magic )    {	return (magic >= MAGIC_BASE) && (magic <= MAX_MAGIC) ;    }    /** Creates an ObjectKeyTemplate from the InputStream.  Most of the    * decoding is done inside the handler.      */    private ObjectKeyTemplate create( InputStream is, Handler handler, 	OctetSeqHolder osh )     {	ObjectKeyTemplate oktemp = null ;		try {	    is.mark(0) ;	    int magic = is.read_long() ;		    	    if (validMagic( magic )) {		int scid = is.read_long() ;		oktemp = handler.handle( magic, scid, is, osh ) ;	    }	} catch (MARSHAL mexc) {	    // XXX log this error	    // ignore this: error handled below because oktemp == null	} 	if (oktemp == null)	    // If we did not successfully construct a oktemp, reset the 	    // stream so that WireObjectKeyTemplate can correctly construct the	    // object key.	    try {		is.reset() ;	    } catch (IOException exc) {		// XXX log this error		// ignore this	    }	return oktemp ;    }    public ObjectKey create( byte[] key )     {	OctetSeqHolder osh = new OctetSeqHolder() ;	EncapsInputStream is = new EncapsInputStream( orb, key, key.length ) ;	ObjectKeyTemplate oktemp = create( is, fullKey, osh ) ;	if (oktemp == null)	    oktemp = new WireObjectKeyTemplate( is, osh ) ;	ObjectId oid = new ObjectIdImpl( osh.value ) ;	return new ObjectKeyImpl( oktemp, oid ) ;    }    public ObjectKeyTemplate createTemplate( InputStream is )     {	ObjectKeyTemplate oktemp = create( is, oktempOnly, null ) ;	if (oktemp == null)	    oktemp = new WireObjectKeyTemplate( orb ) ;	return oktemp ;    }}

⌨️ 快捷键说明

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