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.