Kuali Rice Development
  1. Kuali Rice Development
  2. KULRICE-9612

Reimplement cloning to use component clone method

    Details

    • Type: Improvement Improvement
    • Status: Closed Closed
    • Priority: Critical Critical
    • Resolution: Complete
    • Affects Version/s: 2.2
    • Fix Version/s: 2.3.0-rc1, 2.3
    • Component/s: Development, Performance
    • Security Level: Public (Public: Anyone can view)
    • Labels:
      None
    • Similar issues:
      KULRICE-9313Perform experiment on cloning for performance improvements
      KULRICE-7476CLONE - Configuration of block UI options
      KULRICE-9328CLONE - Create or Generate JUnit and TestNG Smoke Tests for ConfigNameSpaceBlanketAppNavIT from Method Template Bases
      KULRICE-9354CLONE - Create or Generate JUnit and TestNG Smoke Tests for CreateDocTypeNavIT from Method Template Bases
      KULRICE-9618CLONE - Coordinated developer testing
      KULRICE-8887CLONE - WorkflowDocumentActionsServiceImpl.initiateIndexing is currently throwing UnsupportedOperationException
      KULRICE-7471CLONE - UIF Framework - Framework Improvements (Field Component Changes)
      KULRICE-7472CLONE - UIF Framework - Framework Improvements (AJAX Improvements)
      KULRICE-7474CLONE - UIF Framework - Framework Improvements (Template Cleanup)
      KULRICE-7473CLONE - UIF Framework - Framework Improvements (CSS Rework)
    • Rice Module:
      KRAD
    • KRAD Feature Area:
      UIF Component
    • KAI Review Status:
      Not Required
    • KTI Review Status:
      Not Required
    • Include in Release Notes?:
      Yes

      Description

      POC work that compared copying with CloneUtils versus implementing a clone method on an object showed for 3175827 objects (which is equal to a large view) the difference in time is:

      Clone Utils Speed: 5074 ms
      Clone Speed: 883 ms

      This along with reducing cloning should eliminate this bottleneck.

      Make Component and LayoutManager interface extend Cloneable.

      In ComponentBase and LayoutManagerBase, implement the clone() method by:

      creating a new instance of the class this.getClass().newInstance()

      Call a new method copyProperties(Cloneable), return the object.

      Then for every component and layout manager copyProperties(Cloneable)needs to be implemented by first calling super.copyProperties, then copying all the properties in the subclass. This includes lists and maps. Note any nested components will need clone() called on them when copying the property value (including lists and map values), except those marked with @ReferenceCopy

      After this is in place, change ComponentUtils#copy to call the clone method instead of using CloneUtils.

        Issue Links

          Activity

          Hide
          Jerry Neal (Inactive) added a comment -

          Matt,

          Please make this task your priority.

          thanks,
          Jerry

          Show
          Jerry Neal (Inactive) added a comment - Matt, Please make this task your priority. thanks, Jerry

            People

            • Assignee:
              Matthew Wuertz (Inactive)
              Reporter:
              Jerry Neal (Inactive)
            • Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:

                Structure Helper Panel