/*     */ private boolean isLocal() /*     */ {
   /* 102 */ boolean bool = false;
   /* 103 */ Delegate localDelegate = StubAdapter.getDelegate(this.stub);
   /*     */
   /* 105 */ if ((localDelegate instanceof CorbaClientDelegate)) {
     /* 106 */ CorbaClientDelegate localCorbaClientDelegate = (CorbaClientDelegate) localDelegate;
     /* 107 */ ContactInfoList localContactInfoList =
         localCorbaClientDelegate.getContactInfoList();
     /* 108 */ if ((localContactInfoList instanceof CorbaContactInfoList)) {
       /* 109 */ CorbaContactInfoList localCorbaContactInfoList =
           (CorbaContactInfoList) localContactInfoList;
       /* 110 */ LocalClientRequestDispatcher localLocalClientRequestDispatcher =
           localCorbaContactInfoList.getLocalClientRequestDispatcher();
       /*     */
       /* 112 */ bool = localLocalClientRequestDispatcher.useLocalInvocation(null);
       /*     */ }
     /*     */ }
   /*     */
   /* 116 */ return bool;
   /*     */ }
  /**
   * This method obtains an IOR from a CORBA object reference. It will return null if obj is a local
   * object, a null object, or an object implemented by a different ORB. It will throw BAD_OPERATION
   * if obj is an unconnected RMI-IIOP object.
   *
   * @return IOR the IOR that represents this objref. This will never be null.
   * @exception BAD_OPERATION (from oi._get_delegate) if obj is a normal objref, but does not have a
   *     delegate set.
   * @exception BAD_PARAM if obj is a local object, or else was created by a foreign ORB.
   */
  public static IOR getIOR(org.omg.CORBA.Object obj) {
    if (obj == null) throw wrapper.nullObjectReference();

    IOR ior = null;
    if (StubAdapter.isStub(obj)) {
      org.omg.CORBA.portable.Delegate del = StubAdapter.getDelegate(obj);

      if (del instanceof CorbaClientDelegate) {
        CorbaClientDelegate cdel = (CorbaClientDelegate) del;
        ContactInfoList cil = cdel.getContactInfoList();

        if (cil instanceof CorbaContactInfoList) {
          CorbaContactInfoList ccil = (CorbaContactInfoList) cil;
          ior = ccil.getTargetIOR();
          if (ior == null) throw wrapper.nullIor();

          return ior;
        } else {
          // This is our code, but the ContactInfoList is not a
          // CorbaContactInfoList.  This should not happen, because
          // we are in the CORBA application of the DCSA framework.
          // This is a coding error, and thus an INTERNAL exception
          // should be thrown.
          // XXX needs minor code
          throw new INTERNAL();
        }
      }

      // obj is implemented by a foreign ORB, because the Delegate is not a
      // ClientDelegate.
      // XXX this case could be handled by marshalling and
      // unmarshalling.  However, object_to_string cannot be used
      // here, as it is implemented with getIOR.  Note that this
      // will require access to an ORB, so that we can create streams
      // as needed.  The ORB is available simply as io._orb().
      throw wrapper.objrefFromForeignOrb();
    } else throw wrapper.localObjectNotAllowed();
  }
示例#3
0
  /**
   * The <tt>isLocal</tt> method has the same semantics as the ObjectImpl._is_local method, except
   * that it can throw a RemoteException. (no it doesn't but the spec says it should.)
   *
   * <p>The <tt>_is_local()</tt> method is provided so that stubs may determine if a particular
   * object is implemented by a local servant and hence local invocation APIs may be used.
   *
   * @param stub the stub to test.
   * @return The <tt>_is_local()</tt> method returns true if the servant incarnating the object is
   *     located in the same process as the stub and they both share the same ORB instance. The
   *     <tt>_is_local()</tt> method returns false otherwise. The default behavior of
   *     <tt>_is_local()</tt> is to return false.
   * @throws RemoteException The Java to IDL specification does to specify the conditions that cause
   *     a RemoteException to be thrown.
   */
  public boolean isLocal(javax.rmi.CORBA.Stub stub) throws RemoteException {
    boolean result = false;

    try {
      org.omg.CORBA.portable.Delegate delegate = stub._get_delegate();
      if (delegate instanceof CorbaClientDelegate) {
        // For the Sun ORB
        CorbaClientDelegate cdel = (CorbaClientDelegate) delegate;
        ContactInfoList cil = cdel.getContactInfoList();
        if (cil instanceof CorbaContactInfoList) {
          CorbaContactInfoList ccil = (CorbaContactInfoList) cil;
          LocalClientRequestDispatcher lcs = ccil.getLocalClientRequestDispatcher();
          result = lcs.useLocalInvocation(null);
        }
      } else {
        // For a non-Sun ORB
        result = delegate.is_local(stub);
      }
    } catch (SystemException e) {
      throw javax.rmi.CORBA.Util.mapSystemException(e);
    }

    return result;
  }