1 7 8 package com.sun.corba.se.impl.transport; 9 10 import java.util.ArrayList ; 11 import java.util.Iterator ; 12 import java.util.List ; 13 14 import com.sun.corba.se.pept.transport.ContactInfo; 15 16 import com.sun.corba.se.spi.ior.IOR ; 17 import com.sun.corba.se.spi.ior.iiop.IIOPProfile ; 18 import com.sun.corba.se.spi.ior.iiop.IIOPProfileTemplate ; 19 import com.sun.corba.se.spi.oa.ObjectAdapterFactory; 20 import com.sun.corba.se.spi.orb.ORB; 21 import com.sun.corba.se.spi.protocol.LocalClientRequestDispatcher; 22 import com.sun.corba.se.spi.protocol.LocalClientRequestDispatcherFactory; 23 import com.sun.corba.se.spi.transport.CorbaContactInfoList ; 24 import com.sun.corba.se.spi.transport.SocketInfo; 25 26 import com.sun.corba.se.impl.orbutil.ORBConstants; 27 import com.sun.corba.se.impl.protocol.NotLocalLocalCRDImpl; 28 29 32 public class CorbaContactInfoListImpl 33 implements 34 CorbaContactInfoList 35 { 36 protected ORB orb; 37 protected LocalClientRequestDispatcher LocalClientRequestDispatcher; 38 protected IOR targetIOR; 39 protected IOR effectiveTargetIOR; 40 protected List effectiveTargetIORContactInfoList; 41 protected ContactInfo primaryContactInfo; 42 43 public CorbaContactInfoListImpl(ORB orb) 45 { 46 this.orb = orb; 47 } 48 49 public CorbaContactInfoListImpl(ORB orb, IOR targetIOR) 50 { 51 this(orb); 52 setTargetIOR(targetIOR); 53 } 54 55 60 public synchronized Iterator iterator() 61 { 62 createContactInfoList(); 63 return new CorbaContactInfoListIteratorImpl( 64 orb, this, primaryContactInfo, 65 effectiveTargetIORContactInfoList); 66 } 67 68 73 public synchronized void setTargetIOR(IOR targetIOR) 74 { 75 this.targetIOR = targetIOR; 76 setEffectiveTargetIOR(targetIOR); 77 } 78 79 public synchronized IOR getTargetIOR() 80 { 81 return targetIOR; 82 } 83 84 public synchronized void setEffectiveTargetIOR(IOR effectiveTargetIOR) 85 { 86 this.effectiveTargetIOR = effectiveTargetIOR; 87 effectiveTargetIORContactInfoList = null; 88 if (primaryContactInfo != null && 89 orb.getORBData().getIIOPPrimaryToContactInfo() != null) 90 { 91 orb.getORBData().getIIOPPrimaryToContactInfo() 92 .reset(primaryContactInfo); 93 } 94 primaryContactInfo = null; 95 setLocalSubcontract(); 96 } 97 98 public synchronized IOR getEffectiveTargetIOR() 99 { 100 return effectiveTargetIOR; 101 } 102 103 public synchronized LocalClientRequestDispatcher getLocalClientRequestDispatcher() 104 { 105 return LocalClientRequestDispatcher; 106 } 107 108 113 115 120 public synchronized int hashCode() 121 { 122 return targetIOR.hashCode(); 123 } 124 125 130 protected void createContactInfoList() 131 { 132 if (effectiveTargetIORContactInfoList != null) { 133 return; 134 } 135 136 effectiveTargetIORContactInfoList = new ArrayList (); 137 138 IIOPProfile iiopProfile = effectiveTargetIOR.getProfile(); 139 String hostname = 140 ((IIOPProfileTemplate)iiopProfile.getTaggedProfileTemplate()) 141 .getPrimaryAddress().getHost().toLowerCase(); 142 int port = 143 ((IIOPProfileTemplate)iiopProfile.getTaggedProfileTemplate()) 144 .getPrimaryAddress().getPort(); 145 primaryContactInfo = 147 createContactInfo(SocketInfo.IIOP_CLEAR_TEXT, hostname, port); 148 149 if (iiopProfile.isLocal()) { 150 ContactInfo contactInfo = new SharedCDRContactInfoImpl( 156 orb, this, effectiveTargetIOR, 157 orb.getORBData().getGIOPAddressDisposition()); 158 effectiveTargetIORContactInfoList.add(contactInfo); 159 } else { 160 addRemoteContactInfos(effectiveTargetIOR, 161 effectiveTargetIORContactInfoList); 162 } 163 } 164 165 protected void addRemoteContactInfos( 166 IOR effectiveTargetIOR, 167 List effectiveTargetIORContactInfoList) 168 { 169 ContactInfo contactInfo; 170 List socketInfos = orb.getORBData() 171 .getIORToSocketInfo().getSocketInfo(effectiveTargetIOR); 172 Iterator iterator = socketInfos.iterator(); 173 while (iterator.hasNext()) { 174 SocketInfo socketInfo = (SocketInfo) iterator.next(); 175 String type = socketInfo.getType(); 176 String host = socketInfo.getHost().toLowerCase(); 177 int port = socketInfo.getPort(); 178 contactInfo = createContactInfo(type, host, port); 179 effectiveTargetIORContactInfoList.add(contactInfo); 180 } 181 } 182 183 protected ContactInfo createContactInfo(String type, 184 String hostname, int port) 185 { 186 return new SocketOrChannelContactInfoImpl( 187 orb, this, 188 effectiveTargetIOR, 190 orb.getORBData().getGIOPAddressDisposition(), 191 type, hostname, port); 192 } 193 194 202 protected void setLocalSubcontract() 203 { 204 if (!effectiveTargetIOR.getProfile().isLocal()) { 205 LocalClientRequestDispatcher = new NotLocalLocalCRDImpl(); 206 return; 207 } 208 209 int scid = effectiveTargetIOR.getProfile().getObjectKeyTemplate(). 216 getSubcontractId() ; 217 LocalClientRequestDispatcherFactory lcsf = orb.getRequestDispatcherRegistry().getLocalClientRequestDispatcherFactory( scid ) ; 218 LocalClientRequestDispatcher = lcsf.create( scid, effectiveTargetIOR ) ; 219 } 220 } 221 222 | Popular Tags |