Uploaded image for project: 'Apache Flex'
  1. Apache Flex
  2. FLEX-26325

RemoteObject logs too eagerly all sent messages

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: Adobe Flex SDK 4.1 (Release)
    • Fix Version/s: Apache Flex 4.10.0
    • Component/s: RPC: RemoteObject
    • Labels:
    • Environment:
      Affected OS(s): All OS Platforms
      Language Found: English

      Description

      Steps to reproduce:
      1. Set debug level on any Logger in the application (not even necessarily on mx.rpc.*)
      2. Call a remote operation with a RemoteObject sending a complex object graph, or an object graph containing 'lazy loaded' data, e.g. with LCDS or GraniteDS

      Actual Results:

      RemoteObject computes the complete debug message in RPCObjectUtils by the ultra slow AS3 reflection (even when the message will never be logged at all), and consequently triggers all lazy initializations (for example by accessing all lazyCollection.length properties on all the object graph).
      See here for more details on the issue: http://insideria.com/2010/10/flex-rpc-and-the-broken-mxlogg.html

      Expected Results:

      No computation of the debug message should be done when mx.rpc is not in debug mode.

      At least provide one of these options :

      • Allow adding manually excluded properties in RPCObjectUtils.defaultToStringExcludes (make it public or add a function addDefaultExclude)
      • Use existing toString() methods on objects when available instead of always relying on AS3 reflection
      • Provide a way to completely override the default RPCObjectUtil.toString, i.e.

      public var toStringFunction:Function;

      public static function toString(value:Object,
      namespaceURIs:Array = null,
      exclude:Array = null):String
      {
      if (toStringFunction != null)

      { return toStringFunction(value, namespaceURIs, exclude); }

      if (exclude == null)

      { exclude = defaultToStringExcludes; }

      refCount = 0;
      return internalToString(value, 0, null, namespaceURIs, exclude);
      }

      Workaround (if any):

      Never set any debug level on any Logger.

        Attachments

        1. 2833.patch
          0.8 kB
          Gavin Donald

          Activity

            People

            • Assignee:
              jmclean Justin Mclean
              Reporter:
              adobejira Adobe JIRA
            • Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: