Uploaded image for project: 'Cayenne'
  1. Cayenne
  2. CAY-2774

Overriding service ordering in DI List causes DIRuntimeException

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Closed
    • Minor
    • Resolution: Fixed
    • 4.2.RC1, 5.0-M1
    • 5.0-M1
    • None
    • None

    Description

      Per CAY-2772, I just tried changing the ordering of a filter in ListBuilder<DataChannelSyncFilter> by re-binding the filter with different relative order. Essentially:

      contributeSyncFilters().insertBefore(CommitLogFilter.class, TransactionFilter.class);
      contributeSyncFilters().addAfter(CommitLogFilter.class, TransactionFilter.class);
      

      This results in a dependency cycle exception:

      org.apache.cayenne.di.DIRuntimeException: Dependency cycle detected in DI container
      
      	at org.apache.cayenne.di.spi.DIGraph.topSort(DIGraph.java:155)
      	at org.apache.cayenne.di.spi.ListProvider.get(ListProvider.java:47)
      	at org.apache.cayenne.di.spi.ListProvider.get(ListProvider.java:35)
      	at org.apache.cayenne.di.spi.DefaultScopeProvider.get(DefaultScopeProvider.java:50)
      	at org.apache.cayenne.di.spi.DefaultInjector.getInstance(DefaultInjector.java:139)
      	at org.apache.cayenne.di.spi.FieldInjectingProvider.value(FieldInjectingProvider.java:103)
      

      I think we can actually properly handle this case by removing the existing ordering, and rebinding with the new ordering.

      Attachments

        Activity

          People

            andrus Andrus Adamchik
            andrus Andrus Adamchik
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Time Tracking

                Estimated:
                Original Estimate - Not Specified
                Not Specified
                Remaining:
                Remaining Estimate - 0h
                0h
                Logged:
                Time Spent - 1h 10m
                1h 10m