1. /*
  2. * @(#)SocketFactoryConnectionImpl.java 1.12 04/06/21
  3. *
  4. * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
  5. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
  6. */
  7. package com.sun.corba.se.impl.legacy.connection;
  8. import java.net.Socket;
  9. import java.nio.channels.SocketChannel;
  10. import java.util.Collections;
  11. import org.omg.CORBA.COMM_FAILURE;
  12. import org.omg.CORBA.CompletionStatus;
  13. import com.sun.corba.se.pept.transport.Acceptor;
  14. import com.sun.corba.se.pept.transport.ContactInfo;
  15. import com.sun.corba.se.spi.ior.IOR;
  16. import com.sun.corba.se.spi.legacy.connection.GetEndPointInfoAgainException;
  17. import com.sun.corba.se.spi.orb.ORB;
  18. import com.sun.corba.se.spi.transport.CorbaConnection;
  19. import com.sun.corba.se.spi.transport.CorbaContactInfo;
  20. import com.sun.corba.se.spi.transport.SocketInfo;
  21. import com.sun.corba.se.impl.orbutil.ORBUtility;
  22. import com.sun.corba.se.impl.transport.SocketOrChannelContactInfoImpl;
  23. import com.sun.corba.se.impl.transport.SocketOrChannelConnectionImpl;
  24. /**
  25. * @author Harold Carr
  26. */
  27. public class SocketFactoryConnectionImpl
  28. extends
  29. SocketOrChannelConnectionImpl
  30. {
  31. // Socket-factory client constructor.
  32. public SocketFactoryConnectionImpl(ORB orb,
  33. CorbaContactInfo contactInfo,
  34. boolean useSelectThreadToWait,
  35. boolean useWorkerThread)
  36. {
  37. super(orb, useSelectThreadToWait, useWorkerThread);
  38. // REVISIT - probably need a contact info for both
  39. // client and server for removing connections from cache?
  40. this.contactInfo = contactInfo;
  41. boolean isBlocking = !useSelectThreadToWait;
  42. SocketInfo socketInfo =
  43. // REVISIT - case - needs interface method
  44. ((SocketFactoryContactInfoImpl)contactInfo).socketInfo;
  45. try {
  46. socket =
  47. orb.getORBData().getLegacySocketFactory().createSocket(socketInfo);
  48. socketChannel = socket.getChannel();
  49. if (socketChannel != null) {
  50. socketChannel.configureBlocking(isBlocking);
  51. } else {
  52. // IMPORTANT: non-channel-backed sockets must use
  53. // dedicated reader threads.
  54. setUseSelectThreadToWait(false);
  55. }
  56. if (orb.transportDebugFlag) {
  57. dprint(".initialize: connection created: " + socket);
  58. }
  59. } catch (GetEndPointInfoAgainException ex) {
  60. throw wrapper.connectFailure(
  61. ex, socketInfo.getType(), socketInfo.getHost(),
  62. Integer.toString(socketInfo.getPort())) ;
  63. } catch (Exception ex) {
  64. throw wrapper.connectFailure(
  65. ex, socketInfo.getType(), socketInfo.getHost(),
  66. Integer.toString(socketInfo.getPort())) ;
  67. }
  68. state = OPENING;
  69. }
  70. public String toString()
  71. {
  72. synchronized ( stateEvent ){
  73. return
  74. "SocketFactoryConnectionImpl[" + " "
  75. + (socketChannel == null ?
  76. socket.toString() : socketChannel.toString()) + " "
  77. + getStateString( state ) + " "
  78. + shouldUseSelectThreadToWait() + " "
  79. + shouldUseWorkerThreadForEvent()
  80. + "]" ;
  81. }
  82. }
  83. // Note: public to override parent.
  84. public void dprint(String msg)
  85. {
  86. ORBUtility.dprint("SocketFactoryConnectionImpl", msg);
  87. }
  88. }
  89. // End of file.