示例#1
0
 /** Destroy the remote IDL type object. */
 public void destroy() {
   InputStream in = null;
   try {
     OutputStream out = _request("destroy", true);
     in = _invoke(out);
   } catch (ApplicationException ex) {
     in = ex.getInputStream();
     throw new org.omg.CORBA.MARSHAL(ex.getId());
   } catch (RemarshalException rex) {
     destroy();
   } finally {
     _releaseReply(in);
   }
 }
示例#2
0
 /**
  * Get the definition kind of the remote IDL type object. The method is written following OMG
  * specification, treating the typecode as a read only attribute rather than a method. This means,
  * the operation name is "_get_def_kind".
  *
  * @return a definition kind, returned by remote IDL type object.
  */
 public DefinitionKind def_kind() {
   InputStream in = null;
   try {
     OutputStream out = _request("_get_def_kind", true);
     in = _invoke(out);
     return DefinitionKindHelper.read(in);
   } catch (ApplicationException ex) {
     in = ex.getInputStream();
     throw new org.omg.CORBA.MARSHAL(ex.getId());
   } catch (RemarshalException rex) {
     return def_kind();
   } finally {
     _releaseReply(in);
   }
 }
示例#3
0
 /**
  * Get the typecode of the remote IDL type object. The method is written following OMG
  * specification, treating the typecode as a read only attribute rather than a method. This means,
  * the operation name is "_get_type".
  *
  * @return a typecode, returned by the remote IDL type object.
  */
 public TypeCode type() {
   InputStream in = null;
   try {
     OutputStream out = _request("_get_type", true);
     in = _invoke(out);
     return TypeCodeHelper.read(in);
   } catch (ApplicationException ex) {
     in = ex.getInputStream();
     throw new org.omg.CORBA.MARSHAL(ex.getId());
   } catch (RemarshalException rex) {
     return type();
   } catch (UserException ex) {
     MARSHAL m = new MARSHAL();
     m.minor = Minor.UserException;
     m.initCause(ex);
     throw m;
   } finally {
     _releaseReply(in);
   }
 }
  /**
   * Sends a request message to the server, receives the reply from the server, and returns an
   * <code>Object</code> result to the caller.
   */
  public Object invoke(String operationName, StubStrategy stubStrategy, Object[] params)
      throws Throwable {
    if (operationName.equals("_get_handle") && this instanceof javax.ejb.EJBObject) {
      if (handle == null) {
        handle = new HandleImplIIOP(this);
      }
      return handle;
    } else if (operationName.equals("_get_homeHandle") && this instanceof javax.ejb.EJBHome) {
      if (handle == null) {
        handle = new HomeHandleImplIIOP(this);
      }
      return handle;
    } else if (!_is_local()) {
      // remote call path

      // To check whether this is a local stub or not we must call
      // org.omg.CORBA.portable.ObjectImpl._is_local(), and _not_
      // javax.rmi.CORBA.Util.isLocal(Stub s), which in Sun's JDK
      // always return false.

      InputStream in = null;
      try {
        try {
          OutputStream out = (OutputStream) _request(operationName, true);
          stubStrategy.writeParams(out, params);
          trace("sent request: " + operationName);
          in = (InputStream) _invoke(out);
          if (stubStrategy.isNonVoid()) {
            trace("received reply");
            return stubStrategy.readRetval(in);
            // Object retval = stubStrategy.readRetval(in);
            // trace("retval: " + retval);
            // return retval;
          } else return null;
        } catch (ApplicationException ex) {
          trace("got application exception");
          in = (InputStream) ex.getInputStream();
          throw stubStrategy.readException(ex.getId(), in);
        } catch (RemarshalException ex) {
          trace("got remarshal exception");
          return invoke(operationName, stubStrategy, params);
        }
      } catch (SystemException ex) {
        if (EjbLogger.EJB3_INVOCATION_LOGGER.isTraceEnabled()) {
          EjbLogger.EJB3_INVOCATION_LOGGER.trace("CORBA system exception in IIOP stub", ex);
        }
        throw Util.mapSystemException(ex);
      } finally {
        _releaseReply(in);
      }
    } else {
      // local call path
      org.omg.CORBA.portable.ServantObject so = _servant_preinvoke(operationName, Object.class);
      if (so == null) return invoke(operationName, stubStrategy, params);
      try {
        // params = Util.copyObjects(params, _orb());
        Object retval =
            ((LocalIIOPInvoker) so.servant)
                .invoke(
                    operationName,
                    params,
                    null, /* tx */
                    null, /* identity */
                    null /* credential */);
        return stubStrategy.convertLocalRetval(retval);
        // retval = stubStrategy.convertLocalRetval(retval);
        // return Util.copyObject(retval, _orb());
      } catch (Throwable e) {
        // Throwable ex = (Throwable)Util.copyObject(e, _orb());
        Throwable ex = e;
        if (stubStrategy.isDeclaredException(ex)) throw ex;
        else throw Util.wrapException(ex);
      } finally {
        _servant_postinvoke(so);
      }
    }
  }