/* * @(#)ORBSocketFactory.java 1.14 04/06/21 * * Copyright 2004 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */ package com.sun.corba.se.spi.legacy.connection; import java.net.ServerSocket; import java.net.Socket; import java.io.IOException; import com.sun.corba.se.spi.ior.IOR; import com.sun.corba.se.spi.transport.SocketInfo; /** * * DEPRECATED. DEPRECATED. DEPRECATED. DEPRECATED.
* DEPRECATED. DEPRECATED. DEPRECATED. DEPRECATED.
* * This interface gives one the ability to plug in their own socket * factory class to an ORB.
* * Usage:
*
* One specifies a class which implements this interface via the
*
* ORBConstants.SOCKET_FACTORY_CLASS_PROPERTY
*
* property.
* * Example:
*
* -Dcom.sun.CORBA.connection.ORBSocketFactoryClass=MySocketFactory *
* * Typically one would use the same socket factory class on both the * server side and the client side (but this is not required).
*
* A ORBSocketFactory
class should have a public default
* constructor which is called once per instantiating ORB.init call.
* That ORB then calls the methods of that ORBSocketFactory
* to obtain client and server sockets.
*
* This interface also supports multiple server end points. See the
* documentation on createServerSocket
below.
*
*/
public interface ORBSocketFactory
{
/**
* DEPRECATED. DEPRECATED. DEPRECATED. DEPRECATED.
* * A server ORB always creates an "IIOP_CLEAR_TEXT" listening port. * That port is put into IOP profiles of object references exported * by an ORB.
*
* If
*
* createServerSocket(String type, int port)
*
* is passed IIOP_CLEAR_TEXT
as a type
* argument it should then call and return
*
* new java.net.ServerSocket(int port)
*
* If
*
* createSocket(SocketInfo socketInfo)
*
* is passed IIOP_CLEAR_TEXT
in
* socketInfo.getType()
it should
* then call and return
*
*
* new java.net.Socket(socketInfo.getHost(), * socketInfo.getPort()) ** */ public static final String IIOP_CLEAR_TEXT = "IIOP_CLEAR_TEXT"; /** * DEPRECATED. DEPRECATED. DEPRECATED. DEPRECATED.
* * This method is used by a server side ORB.
*
* When an ORB needs to create a listen socket on which connection
* requests are accepted it calls
*
* createServerSocket(String type, int port)
.
*
* The type argument says which type of socket should be created.
*
* The interpretation of the type argument is the responsibility of
* an instance of ORBSocketFactory
, except in the case
* of IIOP_CLEAR_TEXT
, in which case a standard server
* socket should be created.
* * * Multiple Server Port API:
* * In addition to the IIOP_CLEAR_TEXT listening port, it is possible * to specify that an ORB listen on additional port of specific types.
* * This API allows one to specify that an ORB should create an X, * or an X and a Y listen socket.
* * If X, to the user, means SSL, then one just plugs in an SSL * socket factory.
*
* Or, another example, if X and Y, to the user, means SSL without
* authentication and SSL with authentication respectively, then they
* plug in a factory which will either create an X or a Y socket
* depending on the type given to
*
* createServerSocket(String type, int port)
.
*
* One specifies multiple listening ports (in addition to the
* default IIOP_CLEAR_TEXT port) using the
*
* ORBConstants.LISTEN_SOCKET_PROPERTY
*
* property.
* * Example usage:
* *
* ... \ * -Dcom.sun.CORBA.connection.ORBSocketFactoryClass=com.my.MySockFact \ * -Dcom.sun.CORBA.connection.ORBListenSocket=SSL:0,foo:1 \ * ... ** * The meaning of the "type" (SSL and foo above) is controlled * by the user.
* * ORBListenSocket is only meaningful for servers.
* * The property value is interpreted as follows. For each * type/number pair:
* * If number is 0 then use an emphemeral port for the listener of * the associated type.
* * If number is greater then 0 use that port number.
*
* An ORB creates a listener socket for each type
* specified by the user by calling
*
* createServerSocket(String type, int port)
*
* with the type specified by the user.
* * After an ORB is initialized and the RootPOA has been resolved, * it is then listening on * all the end points which were specified. It may be necessary * to add this additional end point information to object references * exported by this ORB.
*
* Each object reference will contain the ORB's default IIOP_CLEAR_TEXT
* end point in its IOP profile. To add additional end point information
* (i.e., an SSL port) to an IOR (i.e., an object reference) one needs
* to intercept IOR creation using
* an PortableInterceptor::IORInterceptor
.
* * Using PortableInterceptors (with a non-standard extension):
*
* Register an IORInterceptor
. Inside its
* establish_components
operation:
*
*
* * com.sun.corba.se.spi.legacy.interceptor.IORInfoExt ext; * ext = (com.sun.corba.se.spi.legacy.interceptor.IORInfoExt)info; * * int port = ext.getServerPort("myType"); * ** * Once you have the port you may add information to references * created by the associated adapter by calling * *
IORInfo::add_ior_component
*
*
* Note: if one is using a POA and the lifespan policy of that
* POA is persistent then the port number returned
* by getServerPort
may
* be the corresponding ORBD port, depending on whether the POA/ORBD
* protocol is the present port exchange or if, in the future,
* the protocol is based on object reference template exchange.
* In either
* case, the port returned will be correct for the protocol.
* (In more detail, if the port exchange protocol is used then
* getServerPort will return the ORBD's port since the port
* exchange happens before, at ORB initialization.
* If object reference
* exchange is used then the server's transient port will be returned
* since the templates are exchanged after adding components.)
* * * Persistent object reference support:
* * When creating persistent object references with alternate * type/port info, ones needs to configure the ORBD to also support * this alternate info. This is done as follows:
* * - Give the ORBD the same socket factory you gave to the client * and server.
* * - specify ORBListenSocket ports of the same types that your * servers support. You should probably specify explicit port * numbers for ORBD if you embed these numbers inside IORs.
* * Note: when using the port exchange protocol * the ORBD and servers will exchange port * numbers for each given type so they know about each other. * When using object reference template exchange the server's * transient ports are contained in the template.
*
*
* - specify your BadServerIdHandler
(discussed below)
* using the
*
* ORBConstants.BAD_SERVER_ID_HANDLER_CLASS_PROPERTY
* * Example:
* *
* * -Dcom.sun.CORBA.POA.ORBBadServerIdHandlerClass=corba.socketPersistent.MyBadServerIdHandler * ** * The
BadServerIdHandler
...
*
* See com.sun.corba.se.impl.activation.ServerManagerImpl.handle
* for example code on writing a bad server id handler. NOTE: This
* is an unsupported internal API. It will not exist in future releases.
*
* * * Secure connections to other services:
*
* If one wants secure connections to other services such as
* Naming then one should configure them with the same
*
* SOCKET_FACTORY_CLASS_PROPERTY
and
* LISTEN_SOCKET_PROPERTY
*
* as used by other clients and servers in your distributed system.
* */ public ServerSocket createServerSocket(String type, int port) throws IOException; /** * DEPRECATED. DEPRECATED. DEPRECATED. DEPRECATED.
* * This method is used by a client side ORB.
* * Each time a client invokes on an object reference, the reference's * associated ORB will call * *
* getEndPointInfo(ORB orb, * IOR ior, * SocketInfo socketInfo) ** * NOTE: The type of the
ior
argument is an internal
* representation for efficiency. If the ORBSocketFactory
* interface ever becomes standardized then the ior
will
* most likely change to a standard type (e.g., a stringified ior,
* an org.omg.IOP.IOR
, or ...).
*
* Typically, this method will look at tagged components in the
* given ior
to determine what type of socket to create.
*
* Typically, the ior
will contain a tagged component
* specifying an alternate port type and number.
*
* This method should return an SocketInfo
object
* containing the type/host/port to be used for the connection.
*
* If there are no appropriate tagged components then this method
* should return an SocketInfo
object with the type
* IIOP_CLEAR_TEXT
and host/port from the ior's IOP
* profile.
*
* If the ORB already has an existing connection to the returned
* type/host/port, then that connection is used. Otherwise the ORB calls
*
* createSocket(SocketInfo socketInfo)
*
* The orb
argument is useful for handling
* the ior
argument.
*
* The SocketInfo
given to getEndPointInfo
* is either null or an object obtained
* from GetEndPointInfoAgainException
* */ public SocketInfo getEndPointInfo(org.omg.CORBA.ORB orb, IOR ior, SocketInfo socketInfo); /** * DEPRECATED. DEPRECATED. DEPRECATED. DEPRECATED.
* * This method should return a client socket of the given * type/host/port.
*
* Note: the SocketInfo
is the same instance as was
* returned by getSocketInfo
so extra cookie info may
* be attached.
*
* If this method throws GetEndPointInfoAgainException then the
* ORB calls getEndPointInfo
again, passing it the
* SocketInfo
object contained in the exception.
* */ public Socket createSocket(SocketInfo socketInfo) throws IOException, GetEndPointInfoAgainException; } // End of file.