You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2018/02/14 13:18:12 UTC

[isis] branch ISIS-1852_parallel_stream_patch updated (7a70623 -> 3706fa9)

This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a change to branch ISIS-1852_parallel_stream_patch
in repository https://gitbox.apache.org/repos/asf/isis.git.


 discard 7a70623  ISIS-1852 testcase backported to JDK 7
 discard 5d0d989  ISIS-1852 allow local thread variable propagation to any child threads
     add 1f9dba5  ISIS-1825: uses thread local to pass rendering context up to the scalar panel so that it, in turn, can correctly report on where it is being rendered.
     add 00fe078  ISIS-1569: adds CommandService2 as an extension
     add e866c71  ISIS-1569: by way of tidy-up, just removes unused injected ClockService from CommandServiceDefault
     add f2da845  ISIS-1831: adds a guard in exception handler of a RuntimeException (REST API) to avoid throwing an NPE there.
     add 2e4e9b9  ISIS-1569: removes CommandService2, not required after all.
     add 27156fe  ISIS-1569: extends cmd-1.3.xsd to introduce a new CommandsDto (note the plural) as a sequence of CommandDto's
     add 099bbd6  ISIS-1569: adds a convenience Util class for ContentMappingService to remove boilerplate in subclass implementations (parsing the acceptable media types).
     add e1283fa  ISIS-1569: defines CommandWithDto as an optional interface for Command SPI implementations to have their Command's implement (translatable into a CommandDto) along with out-of-the-box ContentMapingService to convert these into CommandsDto structure.
     add da6ece6  ISIS-1569: extends cmd and ixn schemas to allow userData to be specified, and moves the new CommandsDto into the new version of cmd.xsd also.
     add a5eb0d8  ISIS-1569: adds guard to ensure that BackgroundCommand#startedAt is always populated.
     add dda922c  ISIS-1835: catches any type of exception in order to report a problem (an NPE was being thrown if the file wasn't present, rather than an IOException)
     add 0c2a2a0  ISIS-1569: adds in 'REPLAYABLE' as a new Command#ExecuteIn
     add ad841f9  ISIS-1836: removes chance of an NPE in the RO mapper for an exception (which was in turn resulting in a 500 rather than 422 when invoked an action with an incorrect parameter argument).
     add 001ed09  ISIS-1569: undeprecates Command#getStartedAt and Command#getCompletedAt
     add 24dcfa5  ISIS-1569: adds timings to CommandsDto, so less verbose and easier to read XML
     add 9020b72  ISIS-1569: updates to XSDs, make sure the version defaultsb are correct.
     add 50fa124  ISIS-1569: removes unused and accidentally committed element in cmd-1.4.xsd
     add a868fa9  ISIS-1569: updates XSDs for docs, and adds in the historical previous versions also.
     add 82ef3b8  ISIS-1569: updates docs for CommandService and cmd schema
     add 1cdd64a  ISIS-1569: updates docs for ContentMappingService, default implementations for Command(s)Dto
     add b56a68e  ISIS-1853: extends CommandDtoUtils to support colleciton args, and similarly AbstractIsisSessionTemplate.
     add 6e96761  ISIS-1569: introduces a new ExecuteIn#EXCLUDED
     add 2cf72b4  ISIS-1569: extends BackgroundCommandExecution so that stops execution of replayable commands once at least one has failed.
     add f504860  ISIS-1569: fixes logic for background command execution, to stop replaying if hit exception
     add 48ea481  ISIS-1569: adds support for @Action(commandWithDtoProcessor=...) and @Property(commandWithDtoProcessor=....)
     add dfe09c4  ISIS-1569: various fixes for ContentMappingService (while manual testing of replication)
     add 0329099  ISIS-1569: simplies BackgroundCommandExecution so can be subclassed with different "OnExecutionPolicy" modes
     add ce192de  ISIS-1569: renames MetaModelService5 API from commandDtoProcessorFor() to commandWithDtoProcessorFor()
     add 19dfb53  ISIS-1569: fixes issue to fail-fast.
     add 20458aa  ISIS-1822: fixes NPE if encounters non-existent action in menubars.layout.xml
     add 85ef278  ISIS-1569: also catches exception when attempt to commit.
     add 9996eab  ISIS-1569: renames CommandWithDtoProcessor to CommandDtoProcessor ...
     add 344dcba  Merge branch 'ISIS-1569-replay-commands' into maint-1.16.1
     add a821fa2  ISIS-1569: removes usage of deprecated annotations in Command iterface
     add 6330ef2  ISIS-1826 and ISIS-1856: adds Automatic-Module-Name to manifest, adds git SCM-Revision to manifest, also generates git.properties and adds to jar
     add 6c200e3  ISIS-1856: updates incorrect <scm> in (parent) core's pom.xml
     add 6889738  ISIS-1826 and ISIS-1856: changes property names a little
     add ee78604  ISIS-1569: extends BackgroundCommandExecution to allow commands to be run via the sudoservice (switching user)
     add c430881  ISIS-1849 - fixes documentation issues
     add aee0b0d  ISIS-1833: reinstates mandatory marker for parameters
     add 6588395  ISIS-1857: adds div class=clearfix to force the help block
     add a2df1fd  ISIS-1813: adds -parameters' compiler argument for both helloworld and simpleapp example applications
     add cd93ad7  ISIS-1832: adds support for UUID panels.
     add 4c9265d  ISIS-1569: adds 'timestamp' to cmd.xsd
     add d27ccd4  ISIS-1569: dynamically updates CommandDto.timestamp, and allows ticking clock to be set using a timestamp.  Also...
     add c0e57b9  ISIS-1569: makes determineIfContinue overridable in BackgroundCommandExecution
     add f0a952d  ISIS-1569: continues if replicated an exception; utility methods for DTOs
     add c4c9861  ISIS-1858
     add 4fdcc8f  ISIS-1858: converts logging calls to use slf4j placeholders rather than string concatenation.
     add a4fc90b  ISIS-1569: improves log message and javadoc in BackgroundCommandExecution, is all.
     add 665e023  ISIS-1826: renames property, removes git.commit.id unused prop
     add cd65d49  ISIS-1854: uses the name taken from the layout.xml.
     add f8c35e5  ISIS-1834: relaxes validation so that @PersistenceCapable can be applied to interfaces.
     add 7585283  ISIS-1569: refactors for different implementation of replay
     add 8540001  ISIS-1569: CommandExecutionAbstract delegates to new CommandExecutorService.  Also
     add 6878407  ISIS-1822: further NPE fix.
     add 25a4923  ISIS-1589: adds support for Xxx.layout.fallback.xml
     add 8e5c792  ISIS-1569: adds more info to logging statement of CommandExecutorServiceDefault (xactnId and timestamp)
     add a026c0b  ISIS-1569 - fixes bug in ticking clock ... not setting t0
     add a0c4bb7  ISIS-1569: moves CommandExecutorService API into applib.
     add 36b96fe  ISIS-1569: dtoProcessor implies persistence of commands.
     add 0b249c8  ISIS-1569: ensures that transaction CommandExecutorService is run in a xactn with the command to be executed as the context of that xactn.
     add eb27901  ISIS-1569: adds documentation for this service
     add c24306a  ISIS-1861: adds 'collapseIfOne' atribute for TabGroups
     add aea06a1  ISIS-1820: fixes BDD tests in simpleapp example application
     add 3263275  ISIS-1589: adds documentation for .layout.fallback.xml
     add 7c495c7  ISIS-1585: adds @Action(associateWith=...)
     add 26e84ce  ISIS-1585: adds support for checkboxes in parented collections, to act as the defaults for any associated actions.
     add 865f6ab  ISIS-1585: defines a new PostProcessor API, similar to FacetFactory.
     add 8de9382  ISIS-1832: fixes uuid panel alignment (left aligned, not right)
     add ebae933  ISIS-1585: extends to support derivation of choices for both scalar and collection parameters.
     add cb59722  ISIS-1813: fixes CSS for action drop-down alignment
     add 655dd28  ISIS-1585: fixes for mixins, and not honouring associateWith
     add 8c440ba  ISIS-1569: fixes NPE for downloading command DTOs if xactn can't be found
     add c2026ee  ISIS-1569: suppresses possible concurrency exceptions when auditing pre-commit.
     add 0b8d151  ISIS-1813: fixes documentation links
     add 94c8429  ISIS-1813: adds outline release notes for 1.16.1
     add edc6651  ISIS-1813: fixes root index.html
     add 6ed8ec4  ISIS-1759: avoids calls to getter if property is hidden.
     add 6eb767f  ISIS-1829: adds condition for a builder that inherits from AppManifestAbstract2.Builder
     add b892b97  ISIS-1829: extracts methods to make flow easier to follow
     add 8c2c403  ISIS-1847: adds missing breaks in veto handling of AbstractDomainEvent
     add 93c1897  ISIS-1813: updates document template to include version
     add 39524c7  ISIS-1813: removes the petclinic tutorial, since out of date
     add 6d682f6  ISIS-1813: adds missing copyright notices
     add a47243f  ISIS-1859: adds a hint-n-tip doc
     add 392d475  ISIS-1860: improves docs regarding CommandReification
     new e29b26f  ISIS-1852 allow local thread variable propagation to any child threads
     new 3706fa9  ISIS-1852 testcase backported to JDK 7

This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version.  This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:

 * -- * -- B -- O -- O -- O   (7a70623)
            \
             N -- N -- N   refs/heads/ISIS-1852_parallel_stream_patch (3706fa9)

You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.

Any revisions marked "omit" are not gone; other references still
refer to them.  Any revisions marked "discard" are gone forever.

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../applib/layout/grid/bootstrap3/bootstrap3.xsd   |   1 +
 .../asciidoc/guides/dg/_dg_asciidoc-syntax.adoc    |  47 +-
 .../_dg_hints-and-tips_datanucleus-enhancer.adoc   |   2 +-
 .../main/asciidoc/guides/dg/_dg_ide_eclipse.adoc   |   2 +-
 .../main/asciidoc/guides/rgant/_rgant-Action.adoc  |  25 +-
 .../guides/rgant/_rgant-Action_associateWith.adoc  |  67 ++
 .../guides/rgant/_rgant-Action_command.adoc        | 397 ++++++++++--
 .../guides/rgant/_rgant-Action_hidden.adoc         |   2 +-
 .../guides/rgant/_rgant-Action_publishing.adoc     |   2 +-
 .../guides/rgant/_rgant-Discriminator.adoc         |   4 +-
 ..._rgant-DomainObject_autoCompleteRepository.adoc |   2 +-
 .../rgant/_rgant-DomainObject_objectType.adoc      |   4 +-
 .../rgant/_rgant-DomainObject_publishing.adoc      |   2 +-
 .../guides/rgant/_rgant-DomainService.adoc         |   2 +-
 .../asciidoc/guides/rgant/_rgant-Nullable.adoc     |  10 +-
 .../asciidoc/guides/rgant/_rgant-Parameter.adoc    |   2 +-
 .../guides/rgant/_rgant-Parameter_optionality.adoc |   2 +-
 .../guides/rgant/_rgant-PersistenceCapable.adoc    |   4 +-
 .../asciidoc/guides/rgant/_rgant-Property.adoc     |  28 +
 .../rgant/_rgant-PropertyLayout_unchanging.adoc    |   2 +-
 .../guides/rgant/_rgant-Property_command.adoc      | 269 ++++++++
 .../guides/rgant/_rgant-Property_optionality.adoc  |   2 +-
 .../guides/rgant/_rgant-Property_publishing.adoc   |   2 +-
 .../asciidoc/guides/rgant/_rgant-ViewModel.adoc    |   2 +-
 .../guides/rgant/_rgant-ViewModel_objectType.adoc  |   6 +-
 .../_rgcms_classes_AppManifest2-bootstrapping.adoc |   4 +-
 ...gcms_classes_domainevent_ActionDomainEvent.adoc |   2 +-
 ..._classes_domainevent_CollectionDomainEvent.adoc |   2 +-
 ...ms_classes_domainevent_PropertyDomainEvent.adoc |   2 +-
 .../guides/rgcms/_rgcms_classes_layout.adoc        |   2 +-
 .../rgcms/_rgcms_classes_value-types_Markup.adoc   |   2 +-
 .../rgcms/_rgcms_methods_reserved_getId.adoc       |   2 +-
 .../asciidoc/guides/rgcms/_rgcms_schema-chg.adoc   |   2 +-
 .../asciidoc/guides/rgcms/_rgcms_schema-cmd.adoc   |  53 +-
 .../guides/rgcms/_rgcms_schema-common.adoc         |  77 ++-
 .../guides/rgsvc/_rgsvc_application-layer-api.adoc |  14 +-
 ...lication-layer-api_ActionInvocationContext.adoc |   8 +-
 ...plication-layer-api_BulkInteractionContext.adoc |   2 +-
 ...rgsvc_application-layer-api_CommandContext.adoc |   2 +-
 ...plication-layer-api_CommandExecutorService.adoc |  45 ++
 ...rgsvc_application-layer-spi_CommandService.adoc |  39 +-
 .../_rgsvc_metadata-api_MetamodelService.adoc      |  38 +-
 ...esentation-layer-spi_ContentMappingService.adoc |  53 +-
 ...entation-layer-spi_TableColumnOrderService.adoc |   2 +-
 ...ugfun_building-blocks_events_domain-events.adoc |   2 +-
 ...un_building-blocks_events_lifecycle-events.adoc |   2 +-
 .../_ugfun_building-blocks_events_ui-events.adoc   |   4 +-
 ..._ugfun_getting-started_simpleapp-archetype.adoc |   2 +-
 .../ugfun/_ugfun_programming-model_actions.adoc    |  24 +-
 ...fun_programming-model_domain-services_menu.adoc |  14 +-
 .../_ugfun_programming-model_inject-services.adoc  |   2 +-
 .../ugfun/_ugfun_programming-model_mixins.adoc     |   2 +-
 ...fun_programming-model_mixins_inferred-name.adoc |   2 +-
 .../ugfun/_ugfun_ui-hints_eager-rendering.adoc     |   4 +-
 .../_ugfun_ui-hints_object-titles-and-icons.adoc   |   6 +-
 .../guides/ugodn/_ugodn_hints-and-tips.adoc        |   1 +
 ..._ugodn_hints-and-tips_jdoql-and-timestamps.adoc |  76 +++
 ..._ugtst_bdd-spec-support_writing-a-bdd-spec.adoc |  28 +-
 ...gtst_fixture-scripts_ticking-clock-fixture.adoc |   2 +-
 .../guides/ugvw/_ugvw_layout_file-based.adoc       |  17 +
 adocs/documentation/src/main/asciidoc/index.html   |  11 +-
 .../_migration-notes_1.10.0-to-1.11.0.adoc         |   2 +-
 .../_migration-notes_1.11.0-to-1.12.0.adoc         |   2 +-
 .../_migration-notes_1.12.0-to-1.13.0.adoc         |  12 +-
 .../_migration-notes_1.14.0-to-1.15.0.adoc         |   2 +-
 .../asciidoc/pages/tg/_tg_pet-clinic-extended.adoc |  13 -
 .../src/main/asciidoc/pages/tg/_tg_pet-clinic.adoc | 565 -----------------
 .../tg/_tg_stop-scaffolding-start-coding.adoc      | 694 ---------------------
 .../tutorials/pet-clinic/010-01-login-page.png     | Bin 31965 -> 0 bytes
 .../tutorials/pet-clinic/010-02-home-page.png      | Bin 54415 -> 0 bytes
 .../pet-clinic/010-03-prototyping-menu.png         | Bin 59183 -> 0 bytes
 .../tutorials/pet-clinic/010-04-simpleobjects.png  | Bin 57805 -> 0 bytes
 .../pet-clinic/010-05-simpleobject-list.png        | Bin 29631 -> 0 bytes
 .../pet-clinic/020-01-idea-configuration.png       | Bin 35012 -> 0 bytes
 .../pet-clinic/020-02-idea-configuration.png       | Bin 7430 -> 0 bytes
 .../030-01-idea-configuration-updated.png          | Bin 35122 -> 0 bytes
 .../tutorials/pet-clinic/030-02-updated-app.png    | Bin 32215 -> 0 bytes
 .../040-01-idea-configuration-updated.png          | Bin 35349 -> 0 bytes
 .../tutorials/pet-clinic/050-01-list-all.png       | Bin 33299 -> 0 bytes
 .../tutorials/pet-clinic/050-02-view-pet.png       | Bin 34270 -> 0 bytes
 .../tutorials/pet-clinic/060-01-owners-menu.png    | Bin 65309 -> 0 bytes
 .../tutorials/pet-clinic/060-02-owners-list.png    | Bin 31905 -> 0 bytes
 .../tutorials/pet-clinic/060-03-pets-list.png      | Bin 36166 -> 0 bytes
 .../pet-clinic/060-04-pet-owner-autoComplete.png   | Bin 40468 -> 0 bytes
 .../images/tutorials/pet-clinic/domain-model.png   | Bin 27464 -> 0 bytes
 .../src/main/asciidoc/pages/tg/tg.adoc             | 683 +++++++++++++++++++-
 .../release-notes/_release-notes_1.16.1.adoc       |  24 +
 .../main/asciidoc/release-notes/release-notes.adoc |  11 +-
 .../src/main/asciidoc}/schema/chg/chg-1.1.xsd      |   2 +-
 .../src/main/asciidoc/schema/chg/chg.xsd           |   6 +-
 .../asciidoc/schema/cmd/{cmd.xsd => cmd-1.2.xsd}   |  10 +-
 .../src/main/asciidoc}/schema/cmd/cmd-1.3.xsd      |   2 +-
 .../src/main/asciidoc/schema/cmd/cmd-1.4.xsd       |  39 +-
 .../src/main/asciidoc/schema/cmd/cmd.xsd           |  51 +-
 .../main/asciidoc}/schema/common/common-1.1.xsd    |   2 +-
 .../src/main/asciidoc/schema/common/common.xsd     |  19 +-
 .../asciidoc/schema/ixn/{ixn.xsd => ixn-1.1.xsd}   |  10 +-
 .../src/main/asciidoc}/schema/ixn/ixn-1.2.xsd      |   2 +-
 .../src/main/asciidoc/schema/ixn/ixn-1.3.xsd       |   6 +-
 .../src/main/asciidoc/schema/ixn/ixn.xsd           |  14 +-
 adocs/template/document.html.erb                   |   5 +-
 core/applib/pom.xml                                |   5 +
 .../apache/isis/applib/AppManifestAbstract.java    |  33 +-
 .../org/apache/isis/applib/PropertyResource.java   |   5 +-
 .../org/apache/isis/applib/annotation/Action.java  |  64 ++
 .../org/apache/isis/applib/annotation/Bulk.java    |  73 ++-
 .../org/apache/isis/applib/annotation/Command.java |  13 +-
 .../isis/applib/annotation/CommandExecuteIn.java   |  26 +-
 .../apache/isis/applib/annotation/InvokeOn.java    |  12 +
 .../apache/isis/applib/annotation/MemberOrder.java |   2 +-
 .../apache/isis/applib/annotation/Property.java    |  21 +
 .../java/org/apache/isis/applib/clock/Clock.java   |  18 +-
 .../isis/applib/conmap/ContentMappingService.java  |  27 +
 .../conmap/ContentMappingServiceForCommandDto.java | 151 +++++
 .../ContentMappingServiceForCommandsDto.java       |  94 +++
 .../CommandDtoProcessorService.java}               |  23 +-
 .../isis/applib/fixtures/TickingFixtureClock.java  |  10 +
 .../applib/layout/grid/bootstrap3/BS3TabGroup.java |  15 +
 .../services/actinvoc/ActionInvocationContext.java |  36 ++
 .../isis/applib/services/command/Command.java      |  65 +-
 .../command/CommandDtoProcessor.java}              |  30 +-
 .../CommandDtoProcessorForActionAbstract.java      |  41 ++
 .../CommandDtoProcessorForPropertyAbstract.java}   |  28 +-
 .../services/command/CommandExecutorService.java   |  44 +-
 .../applib/services/command/CommandWithDto.java    |  21 +-
 .../services/eventbus/AbstractDomainEvent.java     |  12 +
 .../services/layout/Object_rebuildMetamodel.java   |   2 +
 .../metamodel/MetaModelService5.java}              |  14 +-
 .../queryresultscache/QueryResultsCache.java       |   7 +-
 .../applib/services/xactn/TransactionService3.java |  14 +
 .../apache/isis/schema/utils/CommandDtoUtils.java  |  36 ++
 .../apache/isis/schema/utils/CommonDtoUtils.java   |  81 ++-
 .../eventbus/AbstractDomainEvent_veto_Test.java    | 183 ++++++
 .../isis/schema/utils/CommandDtoUtils_Test.java    |  68 ++
 ...nDtoUtilsTest.java => CommonDtoUtils_Test.java} |  37 +-
 core/integtestsupport/pom.xml                      |   7 +-
 core/log4j/pom.xml                                 |   5 +
 .../isis/core/runtime/logging/SnapshotServer.java  |  16 +-
 core/maven-plugin/pom.xml                          |   3 +
 core/metamodel/pom.xml                             |  24 +
 .../commons/config/IsisConfigurationDefault.java   |   4 +-
 .../configbuilder/IsisConfigurationBuilder.java    |  15 +-
 .../commons/encoding/DebugDataInputExtended.java   |  28 +-
 .../commons/encoding/DebugDataOutputExtended.java  |  30 +-
 .../resource/ResourceStreamSourceAbstract.java     |   9 +-
 .../ResourceStreamSourceChainOfResponsibility.java |   4 +-
 .../resource/ResourceStreamSourceComposite.java    |   4 +-
 .../isis/core/metamodel/facetapi/FeatureType.java  |  21 +-
 .../action/ActionAnnotationFacetFactory.java       |  31 +-
 .../command/CommandFacetForActionAnnotation.java   |  45 +-
 ...ommandFacetForActionAnnotationAsConfigured.java |   7 +-
 .../command/CommandFacetForCommandAnnotation.java  |  14 +-
 .../command/CommandFacetFromConfiguration.java     |  16 +-
 .../facets/actions/command/CommandFacet.java       |   2 +
 .../actions/command/CommandFacetAbstract.java      |  50 +-
 .../members/order/MemberOrderFacetAbstract.java    |  21 +-
 .../MemberOrderFacetForActionAnnotation.java}      |  18 +-
 .../MustSatisfySpecificationFacetAbstract.java     |  20 +-
 ...onFacetForMustSatisfyAnnotationOnParameter.java |   8 +-
 ...fySpecificationFacetForParameterAnnotation.java |  11 +-
 .../property/PropertyAnnotationFacetFactory.java   |   3 +-
 .../command/CommandFacetForPropertyAnnotation.java |  30 +-
 ...mandFacetForPropertyAnnotationAsConfigured.java |   5 +-
 ...tySetterOrClearFacetForDomainEventAbstract.java |   5 +-
 ...ionFacetForMustSatisfyAnnotationOnProperty.java |   9 +-
 ...sfySpecificationFacetForPropertyAnnotation.java |  11 +-
 ...onParameterDefaultsAndChoicesPostProcessor.java | 156 +++++
 ...arameterChoicesFacetFromParentedCollection.java |  74 +++
 ...rameterDefaultsFacetFromParentedCollection.java |  63 ++
 ...{ProgrammingModel.java => FacetFactorySet.java} |   9 +-
 .../ObjectSpecificationPostProcessor.java}         |  10 +-
 .../metamodel/progmodel/PostProcessorSet.java}     |  15 +-
 .../core/metamodel/progmodel/ProgrammingModel.java |  62 +-
 .../core/metamodel/services/ServicesInjector.java  |   5 +-
 .../services/appfeat/ApplicationFeatureId.java     |  21 +
 .../services/grid/GridLoaderServiceDefault.java    |  61 +-
 .../services/grid/GridSystemServiceAbstract.java   |   4 +-
 .../metamodel/MetaModelServiceDefault.java         |  35 +-
 .../PersistenceSessionServiceInternal.java         |   4 +
 .../PersistenceSessionServiceInternalNoop.java     |   6 +
 .../services/xactn/TransactionServiceDefault.java  |  15 +-
 .../core/metamodel/spec/ObjectSpecification.java   |   3 +
 .../core/metamodel/spec/feature/ObjectAction.java  |  53 ++
 .../spec/feature/ObjectActionParameter.java        |  77 +++
 .../metamodel/specloader/ServiceInitializer.java   |   4 +-
 .../metamodel/specloader/SpecificationLoader.java  |  39 +-
 .../specloader/facetprocessor/FacetProcessor.java  |  11 +-
 .../specloader/postprocessor/PostProcessor.java    |  59 ++
 .../specloader/specimpl/FacetedMethodsBuilder.java |  26 +-
 .../specimpl/ObjectSpecificationAbstract.java      |  18 +-
 .../specimpl/dflt/ObjectSpecificationDefault.java  |   7 +-
 .../authentication/standard/SimpleSession.java     |   2 +-
 .../isis/core/runtime/snapshot/XmlSnapshot.java    |  60 +-
 .../isis/core/webapp/content/ResourceServlet.java  |  14 +-
 .../diagnostics/IsisLogOnExceptionFilter.java      |   2 +-
 .../core/webapp/routing/RedirectToDocsFilter.java  |   9 +-
 .../dflt/ProgrammingModelFacetsJava5.java          |  13 +
 .../isis/core/metamodel/services/grid/Foo.java}    |  12 +-
 .../core/metamodel/services/grid/Foo.layout.xml    |  23 +
 .../isis/core/metamodel/services/grid/Foo2.java}   |  12 +-
 .../services/grid/Foo2.layout.fallback.xml         |  23 +
 .../isis/core/metamodel/services/grid/Foo3.java}   |  12 +-
 .../services/grid/Foo3.layout.fallback.xml         |  23 +
 .../core/metamodel/services/grid/Foo3.layout.xml   |  23 +
 .../isis/core/metamodel/services/grid/Foo4.java}   |  12 +-
 ...dLoaderServiceDefault_resourceNameFor_Test.java |  58 ++
 .../specimpl/ObjectMemberAbstractTest.java         |  18 +
 .../testspec/ObjectSpecificationStub.java          |  14 +
 core/pom.xml                                       |  79 ++-
 core/runtime/pom.xml                               |  17 +-
 .../ObjectFixtureFilePersistor.java                |   4 +-
 .../fixturedomainservice/ObjectFixtureService.java |   3 +-
 .../fixtures/FixturesInstallerDelegate.java        |   4 +-
 .../FixturesInstallerFromConfiguration.java        |   2 +-
 .../HeadlessWithBootstrappingAbstract.java         |   4 +-
 .../apache/isis/core/runtime/memento/Memento.java  |  18 +-
 .../runtime/persistence/adapter/PojoAdapter.java   |   4 +-
 .../runner/opts/OptionHandlerAppManifest.java      |   2 +-
 .../runner/opts/OptionHandlerFixtureAbstract.java  |   2 +-
 .../runner/opts/OptionHandlerInitParameters.java   |   4 +-
 .../runner/opts/OptionHandlerSystemProperties.java |   4 +-
 .../core/runtime/services/ServiceInstantiator.java |   6 +-
 .../ServicesInstallerFromConfiguration.java        |   2 +-
 ...cesInstallerFromConfigurationAndAnnotation.java |   2 +-
 .../background/BackgroundCommandExecution.java     | 366 +----------
 .../background/CommandExecutionAbstract.java       |  69 ++
 .../background/CommandExecutorServiceDefault.java  | 430 +++++++++++++
 .../changes/ChangedObjectsServiceInternal.java     |  52 +-
 .../services/command/CommandServiceDefault.java    |   4 -
 .../menubars/bootstrap3/MenuBarsServiceBS3.java    |  34 +-
 .../PersistenceSessionServiceInternalDefault.java  |   8 +-
 .../AbstractIsisSessionTemplate.java               |  31 +-
 .../system/internal/IsisLocaleInitializer.java     |   4 +-
 .../system/internal/IsisTimeZoneInitializer.java   |   4 +-
 .../persistence/PersistenceQueryFactory.java       |   2 +-
 .../system/persistence/PersistenceSession.java     |  68 +-
 .../persistence/PersistenceSessionFactory.java     |  10 +-
 .../adaptermanager/OidAdapterHashMap.java          |   6 +-
 .../adaptermanager/PojoAdapterHashMap.java         |   6 +-
 .../system/session/IsisSessionFactoryBuilder.java  |   6 +-
 .../system/transaction/IsisTransaction.java        |  39 +-
 .../system/transaction/IsisTransactionManager.java |   2 +-
 .../IsisComponentProviderUsingInstallers.java      |  12 +-
 .../isis/core/webapp/IsisWebAppBootstrapper.java   |   4 +-
 .../CreateSchemaObjectFromClassMetadata.java       |   2 +-
 .../commands/DataNucleusCreateObjectCommand.java   |   2 +-
 .../commands/DataNucleusDeleteObjectCommand.java   |   2 +-
 .../PersistenceQueryFindAllInstancesProcessor.java |   2 +-
 ...sistenceQueryFindUsingApplibQueryProcessor.java |   4 +-
 .../datanucleus/persistence/queries/QueryUtil.java |   4 +-
 .../objectstore/jdo/service/RegisterEntities.java  |   3 +-
 .../src/main/resources/META-INF/MANIFEST.MF        |   6 -
 core/schema/pom.xml                                |   9 +-
 .../resources/org/apache/isis/schema/bindings.xml  |   8 +-
 .../org/apache/isis/schema/chg/chg-1.1.xsd         |   2 +-
 .../isis/schema/cmd/{cmd-1.3.xsd => cmd-1.4.xsd}   |  45 +-
 .../org/apache/isis/schema/common/common-1.1.xsd   |  30 +-
 .../isis/schema/ixn/{ixn-1.2.xsd => ixn-1.3.xsd}   |   6 +-
 core/security-shiro/pom.xml                        |   7 +-
 core/security/pom.xml                              |   7 +-
 core/specsupport/pom.xml                           |   5 +
 .../core/specsupport/specs/CukeGlueAbstract2.java  |   3 +-
 .../specs/CukeGlueBootstrappingAbstract.java       |  10 +
 core/unittestsupport/pom.xml                       |   7 +-
 core/viewer-restfulobjects-applib/pom.xml          |   7 +-
 core/viewer-restfulobjects-rendering/pom.xml       |   8 +-
 core/viewer-restfulobjects-server/pom.xml          |   7 +-
 .../ExceptionMapperForRuntimeException.java        |  13 +-
 .../server/mappers/entity/ExceptionDetail.java     |   2 +-
 core/viewer-wicket-applib/pom.xml                  |   6 +-
 core/viewer-wicket-impl/pom.xml                    |   6 +-
 .../wicket/viewer/IsisWicketApplication.java       |   8 +-
 .../integration/wicket/WebRequestCycleForIsis.java |   4 +-
 .../ComponentFactoryRegistrarDefault.java          |  33 +-
 .../wicket/viewer/services/Object_clearHints.java  |   5 +-
 .../services/TranslationsResolverWicket.java       |   2 +-
 core/viewer-wicket-model/pom.xml                   |   5 +
 .../viewer/wicket/model/models/ActionPrompt.java   |   6 +
 .../wicket/model/models/EntityCollectionModel.java |  20 +-
 .../viewer/wicket/model/models/EntityModel.java    |  68 +-
 .../viewer/wicket/model/models/ScalarModel.java    |  59 +-
 .../model/models/ScalarModelWithMultiPending.java  |  16 +-
 .../model/models/ScalarModelWithPending.java       |  20 +-
 .../model/models/ToggledMementosProvider.java}     |  18 +-
 .../wicket/model/models/EntityModel_hintsTest.java |   2 +-
 core/viewer-wicket-ui/pom.xml                      |   5 +
 .../AdditionalLinksAsDropDownPanel.html            |   1 +
 .../entityactions/EntityActionLinkFactory.java     |   8 +-
 .../actionmenu/entityactions/LinkAndLabelUtil.java |  12 +-
 .../actionmenu/serviceactions/CssMenuItem.java     |   8 +-
 .../serviceactions/ServiceActionLinkFactory.java   |   7 +-
 .../serviceactions/ServiceActionUtil.java          |  12 +
 .../actionprompt/ActionPromptModalWindow.java      |   2 +
 .../collection/AssociatedWithActionsHelper.java    |  87 +++
 .../ui/components/collection/CollectionPanel.java  |  99 ++-
 .../collection/bulk/BulkActionsHelper.java         |  56 +-
 .../collection/bulk/BulkActionsLinkFactory.java    |   4 +-
 .../collection/bulk/BulkActionsProvider.java       |   6 +-
 .../CollectionContentsAsAjaxTablePanel.java        |   4 +-
 .../ajaxtable/IsisAjaxFallbackDataTable.java       |   5 -
 .../columns/ObjectAdapterPropertyColumn.java       |  14 +-
 .../components/entity/fieldset/PropertyGroup.java  |   3 +-
 .../wicket/ui/components/layout/bs3/col/Col.java   |  15 +-
 .../ui/components/property/PropertyEditPanel.java  |   7 +-
 .../ui/components/scalars/ScalarPanelAbstract.java |   2 +-
 .../components/scalars/ScalarPanelAbstract2.java   |  37 +-
 .../scalars/ScalarPanelSelect2Abstract.java        |   2 +-
 .../components/scalars/primitive/BooleanPanel.java |   2 +-
 .../ui/components/scalars/uuid/UuidConverter.java  |  60 ++
 .../ui/components/scalars/uuid/UuidPanel.java      |  59 ++
 .../components/scalars/uuid/UuidPanelFactory.java} |  32 +-
 .../ui/components/scalars/uuid/UuidTextField.java  |  53 ++
 .../StandaloneCollectionPanel.java                 |  42 +-
 .../components/widgets/bootstrap/ModalDialog.java  |  10 +
 .../widgets/linkandlabel/ActionLinkFactory.java    |   5 +-
 .../linkandlabel/ActionLinkFactoryAbstract.java    |  78 ++-
 .../widgets/themepicker/ThemeChooser.java          |   2 +-
 .../viewer/wicket/ui/pages/bootstrap-overrides.css |  17 +
 .../wicket/ui/panels/FormExecutorDefault.java      |   2 +-
 .../scalars/uuid/UuidConverterTest_roundtrip.java  |  73 +++
 core/webserver/pom.xml                             |   5 +
 core/wrapper/pom.xml                               |   7 +-
 example/application/helloworld/pom.xml             |   2 +-
 .../bdd/specglue/BootstrappingGlue.java            |  16 +-
 .../{RunBddSpecs.java => RunIntegBddSpecs.java}    |   2 +-
 .../modules/simple/dom/impl/SimpleObject.java      |   3 +-
 .../simple/dom/impl/SimpleObject.layout.xml        |   6 +-
 example/application/simpleapp/pom.xml              |   2 +-
 328 files changed, 6264 insertions(+), 2971 deletions(-)
 create mode 100644 adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Action_associateWith.adoc
 create mode 100644 adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Property_command.adoc
 create mode 100644 adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_application-layer-api_CommandExecutorService.adoc
 create mode 100644 adocs/documentation/src/main/asciidoc/guides/ugodn/_ugodn_hints-and-tips_jdoql-and-timestamps.adoc
 delete mode 100644 adocs/documentation/src/main/asciidoc/pages/tg/_tg_pet-clinic-extended.adoc
 delete mode 100644 adocs/documentation/src/main/asciidoc/pages/tg/_tg_pet-clinic.adoc
 delete mode 100644 adocs/documentation/src/main/asciidoc/pages/tg/_tg_stop-scaffolding-start-coding.adoc
 delete mode 100644 adocs/documentation/src/main/asciidoc/pages/tg/images/tutorials/pet-clinic/010-01-login-page.png
 delete mode 100644 adocs/documentation/src/main/asciidoc/pages/tg/images/tutorials/pet-clinic/010-02-home-page.png
 delete mode 100644 adocs/documentation/src/main/asciidoc/pages/tg/images/tutorials/pet-clinic/010-03-prototyping-menu.png
 delete mode 100644 adocs/documentation/src/main/asciidoc/pages/tg/images/tutorials/pet-clinic/010-04-simpleobjects.png
 delete mode 100644 adocs/documentation/src/main/asciidoc/pages/tg/images/tutorials/pet-clinic/010-05-simpleobject-list.png
 delete mode 100644 adocs/documentation/src/main/asciidoc/pages/tg/images/tutorials/pet-clinic/020-01-idea-configuration.png
 delete mode 100644 adocs/documentation/src/main/asciidoc/pages/tg/images/tutorials/pet-clinic/020-02-idea-configuration.png
 delete mode 100644 adocs/documentation/src/main/asciidoc/pages/tg/images/tutorials/pet-clinic/030-01-idea-configuration-updated.png
 delete mode 100644 adocs/documentation/src/main/asciidoc/pages/tg/images/tutorials/pet-clinic/030-02-updated-app.png
 delete mode 100644 adocs/documentation/src/main/asciidoc/pages/tg/images/tutorials/pet-clinic/040-01-idea-configuration-updated.png
 delete mode 100644 adocs/documentation/src/main/asciidoc/pages/tg/images/tutorials/pet-clinic/050-01-list-all.png
 delete mode 100644 adocs/documentation/src/main/asciidoc/pages/tg/images/tutorials/pet-clinic/050-02-view-pet.png
 delete mode 100644 adocs/documentation/src/main/asciidoc/pages/tg/images/tutorials/pet-clinic/060-01-owners-menu.png
 delete mode 100644 adocs/documentation/src/main/asciidoc/pages/tg/images/tutorials/pet-clinic/060-02-owners-list.png
 delete mode 100644 adocs/documentation/src/main/asciidoc/pages/tg/images/tutorials/pet-clinic/060-03-pets-list.png
 delete mode 100644 adocs/documentation/src/main/asciidoc/pages/tg/images/tutorials/pet-clinic/060-04-pet-owner-autoComplete.png
 delete mode 100644 adocs/documentation/src/main/asciidoc/pages/tg/images/tutorials/pet-clinic/domain-model.png
 create mode 100644 adocs/documentation/src/main/asciidoc/release-notes/_release-notes_1.16.1.adoc
 copy {core/schema/src/main/resources/org/apache/isis => adocs/documentation/src/main/asciidoc}/schema/chg/chg-1.1.xsd (95%)
 copy adocs/documentation/src/main/asciidoc/schema/cmd/{cmd.xsd => cmd-1.2.xsd} (95%)
 copy {core/schema/src/main/resources/org/apache/isis => adocs/documentation/src/main/asciidoc}/schema/cmd/cmd-1.3.xsd (99%)
 copy core/schema/src/main/resources/org/apache/isis/schema/cmd/cmd-1.3.xsd => adocs/documentation/src/main/asciidoc/schema/cmd/cmd-1.4.xsd (80%)
 copy {core/schema/src/main/resources/org/apache/isis => adocs/documentation/src/main/asciidoc}/schema/common/common-1.1.xsd (99%)
 copy adocs/documentation/src/main/asciidoc/schema/ixn/{ixn.xsd => ixn-1.1.xsd} (97%)
 copy {core/schema/src/main/resources/org/apache/isis => adocs/documentation/src/main/asciidoc}/schema/ixn/ixn-1.2.xsd (99%)
 copy core/schema/src/main/resources/org/apache/isis/schema/ixn/ixn-1.2.xsd => adocs/documentation/src/main/asciidoc/schema/ixn/ixn-1.3.xsd (97%)
 create mode 100644 core/applib/src/main/java/org/apache/isis/applib/conmap/ContentMappingServiceForCommandDto.java
 create mode 100644 core/applib/src/main/java/org/apache/isis/applib/conmap/ContentMappingServiceForCommandsDto.java
 copy core/applib/src/main/java/org/apache/isis/applib/conmap/{ContentMappingService.java => spi/CommandDtoProcessorService.java} (61%)
 copy core/applib/src/main/java/org/apache/isis/applib/{conmap/ContentMappingService.java => services/command/CommandDtoProcessor.java} (51%)
 create mode 100644 core/applib/src/main/java/org/apache/isis/applib/services/command/CommandDtoProcessorForActionAbstract.java
 copy core/applib/src/main/java/org/apache/isis/applib/{conmap/ContentMappingService.java => services/command/CommandDtoProcessorForPropertyAbstract.java} (59%)
 copy example/application/simpleapp/application/src/test/java/domainapp/application/bdd/specs/RunBddSpecs.java => core/applib/src/main/java/org/apache/isis/applib/services/command/CommandExecutorService.java (54%)
 copy example/application/simpleapp/application/src/test/java/domainapp/application/bdd/specglue/BootstrappingGlue.java => core/applib/src/main/java/org/apache/isis/applib/services/command/CommandWithDto.java (56%)
 copy core/applib/src/main/java/org/apache/isis/applib/{conmap/ContentMappingService.java => services/metamodel/MetaModelService5.java} (75%)
 create mode 100644 core/applib/src/test/java/org/apache/isis/applib/services/eventbus/AbstractDomainEvent_veto_Test.java
 create mode 100644 core/applib/src/test/java/org/apache/isis/schema/utils/CommandDtoUtils_Test.java
 rename core/applib/src/test/java/org/apache/isis/schema/utils/{CommonDtoUtilsTest.java => CommonDtoUtils_Test.java} (64%)
 copy core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/{actions/action/command/CommandFacetForActionAnnotationAsConfigured.java => members/order/annotprop/MemberOrderFacetForActionAnnotation.java} (64%)
 create mode 100644 core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/param/ActionCollectionParameterDefaultsAndChoicesPostProcessor.java
 create mode 100644 core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/param/ActionParameterChoicesFacetFromParentedCollection.java
 create mode 100644 core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/param/ActionParameterDefaultsFacetFromParentedCollection.java
 copy core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodel/{ProgrammingModel.java => FacetFactorySet.java} (92%)
 copy core/{viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/bulk/BulkActionsProvider.java => metamodel/src/main/java/org/apache/isis/core/metamodel/progmodel/ObjectSpecificationPostProcessor.java} (69%)
 copy core/{applib/src/main/java/org/apache/isis/applib/conmap/ContentMappingService.java => metamodel/src/main/java/org/apache/isis/core/metamodel/progmodel/PostProcessorSet.java} (71%)
 create mode 100644 core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/postprocessor/PostProcessor.java
 copy core/{viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/bulk/BulkActionsProvider.java => metamodel/src/test/java/org/apache/isis/core/metamodel/services/grid/Foo.java} (69%)
 create mode 100644 core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/grid/Foo.layout.xml
 copy core/{viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/bulk/BulkActionsProvider.java => metamodel/src/test/java/org/apache/isis/core/metamodel/services/grid/Foo2.java} (69%)
 create mode 100644 core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/grid/Foo2.layout.fallback.xml
 copy core/{viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/bulk/BulkActionsProvider.java => metamodel/src/test/java/org/apache/isis/core/metamodel/services/grid/Foo3.java} (69%)
 create mode 100644 core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/grid/Foo3.layout.fallback.xml
 create mode 100644 core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/grid/Foo3.layout.xml
 copy core/{viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/bulk/BulkActionsProvider.java => metamodel/src/test/java/org/apache/isis/core/metamodel/services/grid/Foo4.java} (69%)
 create mode 100644 core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/grid/GridLoaderServiceDefault_resourceNameFor_Test.java
 create mode 100644 core/runtime/src/main/java/org/apache/isis/core/runtime/services/background/CommandExecutionAbstract.java
 create mode 100644 core/runtime/src/main/java/org/apache/isis/core/runtime/services/background/CommandExecutorServiceDefault.java
 delete mode 100644 core/runtime/src/main/resources/META-INF/MANIFEST.MF
 rename core/schema/src/main/resources/org/apache/isis/schema/cmd/{cmd-1.3.xsd => cmd-1.4.xsd} (76%)
 rename core/schema/src/main/resources/org/apache/isis/schema/ixn/{ixn-1.2.xsd => ixn-1.3.xsd} (97%)
 copy core/{applib/src/main/java/org/apache/isis/applib/conmap/ContentMappingService.java => viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ToggledMementosProvider.java} (69%)
 create mode 100644 core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/AssociatedWithActionsHelper.java
 create mode 100644 core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/uuid/UuidConverter.java
 create mode 100644 core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/uuid/UuidPanel.java
 copy core/{metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/command/CommandFacetForActionAnnotationAsConfigured.java => viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/uuid/UuidPanelFactory.java} (52%)
 create mode 100644 core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/uuid/UuidTextField.java
 create mode 100644 core/viewer-wicket-ui/src/test/java/org/apache/isis/viewer/wicket/ui/components/scalars/uuid/UuidConverterTest_roundtrip.java
 rename example/application/simpleapp/application/src/test/java/domainapp/application/bdd/specs/{RunBddSpecs.java => RunIntegBddSpecs.java} (97%)

-- 
To stop receiving notification emails like this one, please contact
danhaywood@apache.org.

[isis] 02/02: ISIS-1852 testcase backported to JDK 7

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch ISIS-1852_parallel_stream_patch
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 3706fa92cf0d3668a0a18be21b759f585c187692
Author: Andi Huber <ah...@apache.org>
AuthorDate: Tue Jan 30 07:10:05 2018 +0100

    ISIS-1852 testcase backported to JDK 7
---
 .../runtime/services/ServiceInstantiatorTest.java  | 38 +++++++++++++---------
 1 file changed, 22 insertions(+), 16 deletions(-)

diff --git a/core/runtime/src/test/java/org/apache/isis/core/runtime/services/ServiceInstantiatorTest.java b/core/runtime/src/test/java/org/apache/isis/core/runtime/services/ServiceInstantiatorTest.java
index 5b39423..d12766e 100644
--- a/core/runtime/src/test/java/org/apache/isis/core/runtime/services/ServiceInstantiatorTest.java
+++ b/core/runtime/src/test/java/org/apache/isis/core/runtime/services/ServiceInstantiatorTest.java
@@ -24,7 +24,7 @@ import java.util.concurrent.CyclicBarrier;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.LongAdder;
+import java.util.concurrent.atomic.AtomicInteger;
 
 import javax.enterprise.context.RequestScoped;
 
@@ -139,34 +139,40 @@ public class ServiceInstantiatorTest {
 		final AccumulatingCalculator calculator = 
 				serviceInstantiator.createInstance(AccumulatingCalculator.class);
 
-		final LongAdder counter = new LongAdder();
-		
+		final AtomicInteger counter = new AtomicInteger();
+
 		final int n = 100;
 		final int nThreads = 8;
 		final ExecutorService execService = Executors.newFixedThreadPool(nThreads);
 
 		// initialize the request scoped calculator on current thread ('main')
 		((RequestScopedService)calculator).__isis_startRequest(mockServiceInjector);
-		
+
 		for(int i=1;i<=n;++i) {
 			final int j=i;
-			execService.submit(()->{
-				try {
-					
-					// access the request scoped calculator on a child thread of 'main'
-					calculator.add(j);
-					counter.add(calculator.getTotal());
-					
-				} catch (Exception e) {
-					System.err.println(e.getMessage());
-				} 
+
+			execService.submit(new Runnable() {
+
+				@Override
+				public void run() {
+					try {
+
+						// access the request scoped calculator on a child thread of 'main'
+						calculator.add(j);
+						counter.addAndGet(calculator.getTotal());
+
+					} catch (Exception e) {
+						System.err.println(e.getMessage());
+					} 
+				}
 			});
+
 		}
-		
+
 		execService.shutdown();
 
 		execService.awaitTermination(10, TimeUnit.SECONDS);
-		
+
 		((RequestScopedService)calculator).__isis_endRequest();
 
 		assertThat(counter.intValue(), is(n*(n+1)/2));

-- 
To stop receiving notification emails like this one, please contact
danhaywood@apache.org.

[isis] 01/02: ISIS-1852 allow local thread variable propagation to any child threads

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch ISIS-1852_parallel_stream_patch
in repository https://gitbox.apache.org/repos/asf/isis.git

commit e29b26f535079e051b3d84f6a148dfff9c4bd7bc
Author: Andi Huber <ah...@apache.org>
AuthorDate: Mon Jan 29 15:06:27 2018 +0100

    ISIS-1852 allow local thread variable propagation to any child threads
---
 .../core/runtime/services/ServiceInstantiator.java |   6 +-
 .../runtime/services/ServiceInstantiatorTest.java  | 281 ++++++++++++---------
 2 files changed, 167 insertions(+), 120 deletions(-)

diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServiceInstantiator.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServiceInstantiator.java
index 2b6591b..77adb02 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServiceInstantiator.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServiceInstantiator.java
@@ -157,11 +157,15 @@ public final class ServiceInstantiator {
             final T newInstance = proxySubclass.newInstance();
             final ProxyObject proxyObject = (ProxyObject) newInstance;
             proxyObject.setHandler(new MethodHandler() {
-                private ThreadLocal<T> serviceByThread = new ThreadLocal<>();
+            	// Allow serviceByThread to be propagated from the thread that starts the request 
+            	// to any child-threads, hence InheritableThreadLocal.
+            	private InheritableThreadLocal<T> serviceByThread = new InheritableThreadLocal<>();
                 
                 @Override
                 public Object invoke(final Object proxied, final Method proxyMethod, final Method proxiedMethod, final Object[] args) throws Throwable {
 
+                	System.out.println("invoke: "+proxyMethod.getName()+" "+this);
+                	
                     cacheMethodsIfNecessary(cls);
 
                     if(proxyMethod.getName().equals("__isis_startRequest")) {
diff --git a/core/runtime/src/test/java/org/apache/isis/core/runtime/services/ServiceInstantiatorTest.java b/core/runtime/src/test/java/org/apache/isis/core/runtime/services/ServiceInstantiatorTest.java
index 3237b51..5b39423 100644
--- a/core/runtime/src/test/java/org/apache/isis/core/runtime/services/ServiceInstantiatorTest.java
+++ b/core/runtime/src/test/java/org/apache/isis/core/runtime/services/ServiceInstantiatorTest.java
@@ -16,134 +16,177 @@
  */
 package org.apache.isis.core.runtime.services;
 
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
 import java.util.concurrent.BrokenBarrierException;
 import java.util.concurrent.CyclicBarrier;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.LongAdder;
+
 import javax.enterprise.context.RequestScoped;
+
+import org.apache.isis.core.commons.config.IsisConfigurationDefault;
+import org.apache.isis.core.metamodel.services.ServicesInjector;
+import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
 import org.jmock.auto.Mock;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 
-import org.apache.isis.core.commons.config.IsisConfigurationDefault;
-import org.apache.isis.core.metamodel.services.ServicesInjector;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
+public class ServiceInstantiatorTest {
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
+	@Rule
+	public JUnitRuleMockery2 context = JUnitRuleMockery2.createFor(JUnitRuleMockery2.Mode.INTERFACES_AND_CLASSES);
 
-public class ServiceInstantiatorTest {
+	private ServiceInstantiator serviceInstantiator;
+
+	@JUnitRuleMockery2.Ignoring
+	@Mock
+	private ServicesInjector mockServiceInjector;
+
+	@Before
+	public void setUp() throws Exception {
+
+		serviceInstantiator = new ServiceInstantiator();
+		serviceInstantiator.setConfiguration(new IsisConfigurationDefault());
+	}
+
+	@Test
+	public void singleton() {
+		SingletonCalculator calculator = serviceInstantiator.createInstance(SingletonCalculator.class);
+		assertThat(calculator.add(3,4), is(7));
+	}
+
+	@Test
+	public void requestScoped_instantiate() {
+		AccumulatingCalculator calculator = serviceInstantiator.createInstance(AccumulatingCalculator.class);
+		assertThat(calculator instanceof RequestScopedService, is(true));
+	}
+
+	@Test
+	public void requestScoped_justOneThread() {
+		AccumulatingCalculator calculator = serviceInstantiator.createInstance(AccumulatingCalculator.class);
+		try {
+			((RequestScopedService)calculator).__isis_startRequest(mockServiceInjector);
+			assertThat(calculator.add(3), is(3));
+			assertThat(calculator.add(4), is(7));
+			assertThat(calculator.getTotal(), is(7));
+		} finally {
+			((RequestScopedService)calculator).__isis_endRequest();
+		}
+	}
+
+	@Test
+	public void requestScoped_multipleThreads() throws InterruptedException, BrokenBarrierException {
+
+		final AccumulatingCalculator calculator = serviceInstantiator.createInstance(AccumulatingCalculator.class);
+
+		// will ask each thread's calculator to increment 10 times
+		final int[] steps = new int[]{10};
+
+		// each thread will post its totals here
+		final int[] totals = new int[]{0,0,0};
+
+		// after each step, all threads wait.  The +1 is for this thread (the co-ordinator)
+		final CyclicBarrier barrier =
+				new CyclicBarrier(totals.length+1, new Runnable() {
+					public void run() {
+						// all threads waiting; decrement number of steps
+						steps[0]--;
+					}
+				});
+
+		// start off all threads
+		for(int i=0; i<totals.length; i++) {
+			final int j=i;
+			new Thread() {
+				public void run() {
+					try {
+						((RequestScopedService)calculator).__isis_startRequest(mockServiceInjector);
+						// keep incrementing, till no more steps
+						while(steps[0]>0) {
+							try {
+								calculator.add((j+1));
+								totals[j] = calculator.getTotal();
+								barrier.await();
+							} catch (InterruptedException | BrokenBarrierException e) {
+								throw new RuntimeException(e);
+							}
+						}
+					} finally {
+						((RequestScopedService)calculator).__isis_endRequest();
+					}
+				};
+			}.start();
+		}
+
+		// this thread is the co-ordinator; move onto next step when all are waiting
+		while(steps[0]>0) {
+			barrier.await();
+		}
+
+		assertThat(totals[0], is(10));
+		assertThat(totals[1], is(20));
+		assertThat(totals[2], is(30));
+	}
+
+	@Test
+	public void requestScoped_childThreads() throws InterruptedException  {
+
+		final AccumulatingCalculator calculator = 
+				serviceInstantiator.createInstance(AccumulatingCalculator.class);
+
+		final LongAdder counter = new LongAdder();
+		
+		final int n = 100;
+		final int nThreads = 8;
+		final ExecutorService execService = Executors.newFixedThreadPool(nThreads);
+
+		// initialize the request scoped calculator on current thread ('main')
+		((RequestScopedService)calculator).__isis_startRequest(mockServiceInjector);
+		
+		for(int i=1;i<=n;++i) {
+			final int j=i;
+			execService.submit(()->{
+				try {
+					
+					// access the request scoped calculator on a child thread of 'main'
+					calculator.add(j);
+					counter.add(calculator.getTotal());
+					
+				} catch (Exception e) {
+					System.err.println(e.getMessage());
+				} 
+			});
+		}
+		
+		execService.shutdown();
+
+		execService.awaitTermination(10, TimeUnit.SECONDS);
+		
+		((RequestScopedService)calculator).__isis_endRequest();
+
+		assertThat(counter.intValue(), is(n*(n+1)/2));
+	}
+
+	public static class SingletonCalculator {
+		public int add(int x, int y) {
+			return x+y;
+		}
+	}
 
-    @Rule
-    public JUnitRuleMockery2 context = JUnitRuleMockery2.createFor(JUnitRuleMockery2.Mode.INTERFACES_AND_CLASSES);
-
-    private ServiceInstantiator serviceInstantiator;
-
-    @JUnitRuleMockery2.Ignoring
-    @Mock
-    private ServicesInjector mockServiceInjector;
-
-    @Before
-    public void setUp() throws Exception {
-
-        serviceInstantiator = new ServiceInstantiator();
-        serviceInstantiator.setConfiguration(new IsisConfigurationDefault());
-    }
-    
-    @Test
-    public void singleton() {
-        SingletonCalculator calculator = serviceInstantiator.createInstance(SingletonCalculator.class);
-        assertThat(calculator.add(3,4), is(7));
-    }
-    
-    @Test
-    public void requestScoped_instantiate() {
-        AccumulatingCalculator calculator = serviceInstantiator.createInstance(AccumulatingCalculator.class);
-        assertThat(calculator instanceof RequestScopedService, is(true));
-    }
-    
-    @Test
-    public void requestScoped_justOneThread() {
-        AccumulatingCalculator calculator = serviceInstantiator.createInstance(AccumulatingCalculator.class);
-        try {
-            ((RequestScopedService)calculator).__isis_startRequest(mockServiceInjector);
-            assertThat(calculator.add(3), is(3));
-            assertThat(calculator.add(4), is(7));
-            assertThat(calculator.getTotal(), is(7));
-        } finally {
-            ((RequestScopedService)calculator).__isis_endRequest();
-        }
-    }
-    
-    @Test
-    public void requestScoped_multipleThreads() throws InterruptedException, BrokenBarrierException {
-        
-        final AccumulatingCalculator calculator = serviceInstantiator.createInstance(AccumulatingCalculator.class);
-
-        // will ask each thread's calculator to increment 10 times
-        final int[] steps = new int[]{10};
-        
-        // each thread will post its totals here
-        final int[] totals = new int[]{0,0,0};
-        
-        // after each step, all threads wait.  The +1 is for this thread (the co-ordinator)
-        final CyclicBarrier barrier =
-                new CyclicBarrier(totals.length+1, new Runnable() {
-                  public void run() {
-                      // all threads waiting; decrement number of steps
-                      steps[0]--;
-                  }
-                });
-
-        // start off all threads
-        for(int i=0; i<totals.length; i++) {
-            final int j=i;
-            new Thread() {
-                public void run() {
-                    try {
-                        ((RequestScopedService)calculator).__isis_startRequest(mockServiceInjector);
-                        // keep incrementing, til no more steps
-                        while(steps[0]>0) {
-                            try {
-                                calculator.add((j+1));
-                                totals[j] = calculator.getTotal();
-                                barrier.await();
-                            } catch (InterruptedException | BrokenBarrierException e) {
-                                throw new RuntimeException(e);
-                            }
-                        }
-                    } finally {
-                        ((RequestScopedService)calculator).__isis_endRequest();
-                    }
-                };
-            }.start();
-        }
-        
-        // this thread is the co-ordinator; move onto next step when all are waiting
-        while(steps[0]>0) {
-            barrier.await();
-        }
-        
-        assertThat(totals[0], is(10));
-        assertThat(totals[1], is(20));
-        assertThat(totals[2], is(30));
-    }
-    
-    
-    public static class SingletonCalculator {
-        public int add(int x, int y) {
-            return x+y;
-        }
-    }
-    
-    @RequestScoped
-    public static class AccumulatingCalculator {
-        private int total;
-        public int add(int x) {
-            total += x;
-            return getTotal();
-        }
-        public int getTotal() {
-            return total;
-        }
-    }
+	@RequestScoped
+	public static class AccumulatingCalculator {
+		private int total;
+		public int add(int x) {
+			total += x;
+			return getTotal();
+		}
+		public int getTotal() {
+			return total;
+		}
+	}
 }

-- 
To stop receiving notification emails like this one, please contact
danhaywood@apache.org.