[BROOKLYN-162] Rename ./api/management; use the no split package convention
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/2e2de8e4 Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/2e2de8e4 Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/2e2de8e4 Branch: refs/heads/master Commit: 2e2de8e473a22d2bee0f62fcdaec630f6df13bcc Parents: b6ef453 Author: Hadrian Zbarcea <[email protected]> Authored: Wed Aug 12 23:50:34 2015 -0400 Committer: Hadrian Zbarcea <[email protected]> Committed: Wed Aug 12 23:50:34 2015 -0400 ---------------------------------------------------------------------- .../brooklyn/location/LocationDefinition.java | 2 +- .../brooklyn/location/LocationResolver.java | 2 +- .../java/brooklyn/location/LocationSpec.java | 2 +- .../apache/brooklyn/api/entity/Application.java | 2 +- .../org/apache/brooklyn/api/entity/Entity.java | 2 +- .../brooklyn/api/entity/basic/EntityLocal.java | 8 +- .../api/entity/proxying/EntitySpec.java | 2 +- .../api/entity/rebind/RebindManager.java | 2 +- .../brooklyn/api/entity/trait/Configurable.java | 2 +- .../api/management/AccessController.java | 66 +++++ .../brooklyn/api/management/EntityManager.java | 126 +++++++++ .../api/management/ExecutionContext.java | 67 +++++ .../api/management/ExecutionManager.java | 117 +++++++++ .../api/management/HasTaskChildren.java | 39 +++ .../api/management/LocationManager.java | 87 +++++++ .../api/management/ManagementContext.java | 255 +++++++++++++++++++ .../api/management/SubscriptionContext.java | 66 +++++ .../api/management/SubscriptionHandle.java | 27 ++ .../api/management/SubscriptionManager.java | 112 ++++++++ .../apache/brooklyn/api/management/Task.java | 128 ++++++++++ .../brooklyn/api/management/TaskAdaptable.java | 24 ++ .../brooklyn/api/management/TaskFactory.java | 25 ++ .../api/management/TaskQueueingContext.java | 62 +++++ .../brooklyn/api/management/TaskWrapper.java | 28 ++ .../BrooklynClassLoadingContext.java | 51 ++++ .../entitlement/EntitlementClass.java | 27 ++ .../entitlement/EntitlementContext.java | 24 ++ .../entitlement/EntitlementManager.java | 45 ++++ .../management/ha/HighAvailabilityManager.java | 129 ++++++++++ .../api/management/ha/HighAvailabilityMode.java | 67 +++++ .../api/management/ha/ManagementNodeState.java | 72 ++++++ .../management/ha/ManagementNodeSyncRecord.java | 62 +++++ .../ha/ManagementPlaneSyncRecord.java | 51 ++++ .../ha/ManagementPlaneSyncRecordPersister.java | 69 +++++ .../api/management/ha/MementoCopyMode.java | 29 +++ .../brooklyn/management/AccessController.java | 66 ----- .../brooklyn/management/EntityManager.java | 126 --------- .../brooklyn/management/ExecutionContext.java | 67 ----- .../brooklyn/management/ExecutionManager.java | 117 --------- .../brooklyn/management/HasTaskChildren.java | 39 --- .../brooklyn/management/LocationManager.java | 87 ------- .../brooklyn/management/ManagementContext.java | 255 ------------------- .../management/SubscriptionContext.java | 66 ----- .../brooklyn/management/SubscriptionHandle.java | 27 -- .../management/SubscriptionManager.java | 112 -------- .../org/apache/brooklyn/management/Task.java | 128 ---------- .../brooklyn/management/TaskAdaptable.java | 24 -- .../apache/brooklyn/management/TaskFactory.java | 25 -- .../management/TaskQueueingContext.java | 62 ----- .../apache/brooklyn/management/TaskWrapper.java | 28 -- .../BrooklynClassLoadingContext.java | 51 ---- .../entitlement/EntitlementClass.java | 27 -- .../entitlement/EntitlementContext.java | 24 -- .../entitlement/EntitlementManager.java | 45 ---- .../management/ha/HighAvailabilityManager.java | 129 ---------- .../management/ha/HighAvailabilityMode.java | 67 ----- .../management/ha/ManagementNodeState.java | 72 ------ .../management/ha/ManagementNodeSyncRecord.java | 62 ----- .../ha/ManagementPlaneSyncRecord.java | 51 ---- .../ha/ManagementPlaneSyncRecordPersister.java | 69 ----- .../brooklyn/management/ha/MementoCopyMode.java | 29 --- .../mementos/BrooklynMementoPersister.java | 2 +- .../apache/brooklyn/policy/EnricherSpec.java | 2 +- .../org/apache/brooklyn/policy/PolicySpec.java | 2 +- .../src/main/java/brooklyn/BrooklynVersion.java | 2 +- .../brooklyn/basic/AbstractBrooklynObject.java | 2 +- .../brooklyn/basic/BasicConfigurableObject.java | 4 +- .../basic/internal/ApiObjectsFactoryImpl.java | 2 +- .../api/AssemblyTemplateSpecInstantiator.java | 2 +- .../api/HasBrooklynManagementContext.java | 2 +- .../brooklyn/catalog/CatalogPredicates.java | 2 +- .../catalog/internal/BasicBrooklynCatalog.java | 4 +- .../brooklyn/catalog/internal/CatalogDo.java | 2 +- .../catalog/internal/CatalogInitialization.java | 4 +- .../catalog/internal/CatalogItemDo.java | 2 +- .../brooklyn/catalog/internal/CatalogUtils.java | 4 +- .../brooklyn/config/BrooklynServerConfig.java | 2 +- .../brooklyn/config/BrooklynServerPaths.java | 2 +- .../config/BrooklynServiceAttributes.java | 2 +- .../brooklyn/entity/basic/AbstractEffector.java | 2 +- .../brooklyn/entity/basic/AbstractEntity.java | 12 +- .../entity/basic/ApplicationBuilder.java | 4 +- .../java/brooklyn/entity/basic/Attributes.java | 2 +- .../entity/basic/BasicStartableImpl.java | 2 +- .../entity/basic/BrooklynShutdownHooks.java | 4 +- .../brooklyn/entity/basic/BrooklynTaskTags.java | 6 +- .../brooklyn/entity/basic/DynamicGroupImpl.java | 2 +- .../java/brooklyn/entity/basic/Entities.java | 12 +- .../brooklyn/entity/basic/EntityConfigMap.java | 4 +- .../brooklyn/entity/basic/EntityFunctions.java | 2 +- .../brooklyn/entity/basic/EntityInternal.java | 6 +- .../java/brooklyn/entity/basic/EntityTasks.java | 2 +- .../basic/EntityTransientCopyInternal.java | 4 +- .../brooklyn/entity/effector/EffectorBody.java | 6 +- .../brooklyn/entity/effector/EffectorTasks.java | 4 +- .../brooklyn/entity/effector/Effectors.java | 2 +- .../entity/group/DynamicClusterImpl.java | 2 +- .../entity/group/DynamicFabricImpl.java | 2 +- .../entity/group/DynamicRegionsFabricImpl.java | 2 +- .../entity/group/QuarantineGroupImpl.java | 2 +- .../entity/proxying/EntityProxyImpl.java | 4 +- .../entity/proxying/InternalEntityFactory.java | 2 +- .../proxying/InternalLocationFactory.java | 2 +- .../entity/proxying/InternalPolicyFactory.java | 2 +- .../rebind/ActivePartialRebindIteration.java | 2 +- .../rebind/InitialFullRebindIteration.java | 2 +- .../rebind/PeriodicDeltaChangeListener.java | 4 +- .../entity/rebind/RebindContextImpl.java | 2 +- .../rebind/RebindContextLookupContext.java | 2 +- .../brooklyn/entity/rebind/RebindIteration.java | 4 +- .../entity/rebind/RebindManagerImpl.java | 8 +- .../entity/rebind/dto/MementosGenerators.java | 4 +- .../persister/BrooklynPersistenceUtils.java | 10 +- .../rebind/persister/FileBasedObjectStore.java | 4 +- .../rebind/persister/MementoSerializer.java | 2 +- .../persister/PersistenceObjectStore.java | 4 +- .../rebind/persister/XmlMementoSerializer.java | 6 +- .../dto/BasicManagementNodeSyncRecord.java | 4 +- .../dto/ManagementPlaneSyncRecordImpl.java | 4 +- .../brooklyn/entity/trait/StartableMethods.java | 2 +- .../basic/AbstractCollectionConfigKey.java | 4 +- .../basic/AbstractStructuredConfigKey.java | 2 +- .../basic/AttributeSensorAndConfigKey.java | 2 +- .../basic/BasicAttributeSensorAndConfigKey.java | 2 +- .../brooklyn/event/basic/BasicConfigKey.java | 2 +- .../event/basic/DependentConfiguration.java | 10 +- .../java/brooklyn/event/basic/MapConfigKey.java | 2 +- .../basic/PortAttributeSensorAndConfigKey.java | 2 +- .../event/basic/SubElementConfigKey.java | 2 +- ...platedStringAttributeSensorAndConfigKey.java | 2 +- .../brooklyn/event/feed/ConfigToAttributes.java | 2 +- .../main/java/brooklyn/event/feed/Poller.java | 2 +- .../brooklyn/event/feed/shell/ShellFeed.java | 2 +- .../windows/WindowsPerformanceCounterFeed.java | 2 +- .../internal/BrooklynFeatureEnablement.java | 2 +- .../location/basic/AbstractLocation.java | 2 +- .../basic/AbstractLocationResolver.java | 2 +- .../location/basic/BasicLocationRegistry.java | 2 +- .../location/basic/BasicMachineDetails.java | 2 +- .../location/basic/CatalogLocationResolver.java | 2 +- .../basic/DefinedLocationByIdResolver.java | 2 +- .../FixedListMachineProvisioningLocation.java | 2 +- .../location/basic/LocationConfigUtils.java | 2 +- .../location/basic/LocationInternal.java | 2 +- .../java/brooklyn/location/basic/Locations.java | 4 +- .../brooklyn/location/basic/MultiLocation.java | 2 +- .../location/basic/MultiLocationResolver.java | 2 +- .../location/basic/NamedLocationResolver.java | 2 +- .../location/basic/SshMachineLocation.java | 2 +- .../AbstractAvailabilityZoneExtension.java | 2 +- .../management/ManagementContextInjectable.java | 2 +- .../AbstractBrooklynClassLoadingContext.java | 4 +- .../BrooklynClassLoadingContextSequential.java | 4 +- ...ssLoaderFromBrooklynClassLoadingContext.java | 2 +- .../JavaBrooklynClassLoadingContext.java | 2 +- .../OsgiBrooklynClassLoadingContext.java | 4 +- .../BasicEntitlementClassDefinition.java | 2 +- .../entitlement/EntitlementManagerAdapter.java | 6 +- .../entitlement/EntitlementPredicates.java | 4 +- .../management/entitlement/Entitlements.java | 10 +- .../entitlement/NotEntitledException.java | 4 +- .../entitlement/PerUserEntitlementManager.java | 6 +- .../PerUserEntitlementManagerWithDefault.java | 2 +- .../entitlement/WebEntitlementContext.java | 2 +- .../management/ha/BasicMasterChooser.java | 6 +- .../ha/HighAvailabilityManagerImpl.java | 18 +- .../ha/ManagementPlaneSyncRecordDeltaImpl.java | 4 +- ...ntPlaneSyncRecordPersisterToObjectStore.java | 12 +- .../brooklyn/management/ha/MasterChooser.java | 4 +- .../brooklyn/management/ha/OsgiManager.java | 2 +- .../internal/AbstractManagementContext.java | 14 +- .../internal/AbstractSubscriptionManager.java | 4 +- .../management/internal/AccessManager.java | 2 +- .../internal/AsyncCollectionChangeAdapter.java | 2 +- .../internal/BasicSubscriptionContext.java | 6 +- .../internal/BrooklynGarbageCollector.java | 4 +- .../management/internal/EffectorUtils.java | 2 +- .../internal/EntityManagementSupport.java | 8 +- .../internal/EntityManagementUtils.java | 6 +- .../internal/EntityManagerInternal.java | 2 +- .../management/internal/LocalAccessManager.java | 2 +- .../management/internal/LocalEntityManager.java | 4 +- .../internal/LocalLocationManager.java | 2 +- .../internal/LocalManagementContext.java | 14 +- .../internal/LocalSubscriptionManager.java | 6 +- .../management/internal/LocalUsageManager.java | 2 +- .../internal/LocationManagerInternal.java | 2 +- .../internal/ManagementContextInternal.java | 4 +- .../internal/ManagementTransitionInfo.java | 2 +- .../internal/NonDeploymentAccessManager.java | 2 +- .../internal/NonDeploymentEntityManager.java | 2 +- .../internal/NonDeploymentLocationManager.java | 2 +- .../NonDeploymentManagementContext.java | 26 +- .../internal/QueueingSubscriptionManager.java | 2 +- .../management/internal/Subscription.java | 2 +- .../internal/SubscriptionTracker.java | 4 +- .../policy/basic/AbstractEntityAdjunct.java | 8 +- .../brooklyn/policy/basic/ConfigMapImpl.java | 2 +- .../main/java/brooklyn/util/ResourceUtils.java | 4 +- .../java/brooklyn/util/file/ArchiveTasks.java | 4 +- .../util/internal/ConfigKeySelfExtracting.java | 2 +- .../brooklyn/util/mutex/SemaphoreForTasks.java | 4 +- .../util/task/AbstractExecutionContext.java | 8 +- .../util/task/BasicExecutionContext.java | 12 +- .../util/task/BasicExecutionManager.java | 8 +- .../main/java/brooklyn/util/task/BasicTask.java | 4 +- .../java/brooklyn/util/task/CompoundTask.java | 6 +- .../util/task/DynamicSequentialTask.java | 6 +- .../java/brooklyn/util/task/DynamicTasks.java | 22 +- .../brooklyn/util/task/ExecutionListener.java | 2 +- .../java/brooklyn/util/task/ForwardingTask.java | 2 +- .../java/brooklyn/util/task/ParallelTask.java | 2 +- .../java/brooklyn/util/task/ScheduledTask.java | 2 +- .../java/brooklyn/util/task/SequentialTask.java | 2 +- .../util/task/SingleThreadedScheduler.java | 2 +- .../java/brooklyn/util/task/TaskBuilder.java | 8 +- .../java/brooklyn/util/task/TaskInternal.java | 4 +- .../java/brooklyn/util/task/TaskScheduler.java | 2 +- .../main/java/brooklyn/util/task/TaskTags.java | 4 +- .../src/main/java/brooklyn/util/task/Tasks.java | 12 +- .../java/brooklyn/util/task/ValueResolver.java | 6 +- .../util/task/ssh/SshFetchTaskFactory.java | 2 +- .../util/task/ssh/SshFetchTaskWrapper.java | 4 +- .../util/task/ssh/SshPutTaskFactory.java | 2 +- .../util/task/ssh/SshPutTaskWrapper.java | 4 +- .../java/brooklyn/util/task/ssh/SshTasks.java | 10 +- .../util/task/system/ProcessTaskFactory.java | 2 +- .../util/task/system/ProcessTaskWrapper.java | 4 +- .../brooklyn/util/text/TemplateProcessor.java | 2 +- .../lite/CampPlatformWithJustBrooklynMgmt.java | 2 +- .../brooklyn/camp/lite/CampYamlLiteTest.java | 2 +- .../camp/lite/TestAppAssemblyInstantiator.java | 4 +- .../catalog/internal/CatalogTestUtils.java | 4 +- .../YamlRollingTimeWindowMeanEnricherTest.java | 2 +- .../YamlTimeWeightedDeltaEnricherTest.java | 2 +- .../entity/EffectorSayHiGroovyTest.groovy | 4 +- .../java/brooklyn/entity/EffectorSayHiTest.java | 4 +- .../entity/EntityPreManagementTest.java | 4 +- .../entity/basic/BasicStartableTest.java | 2 +- .../brooklyn/entity/basic/ConfigMapTest.java | 4 +- .../brooklyn/entity/basic/DataEntityTest.java | 2 +- .../basic/DependentConfigurationTest.java | 2 +- .../brooklyn/entity/basic/EntityConfigTest.java | 2 +- .../entity/basic/EntitySubscriptionTest.java | 2 +- .../drivers/EntityDriverRegistryTest.java | 2 +- .../entity/effector/EffectorBasicTest.java | 4 +- .../effector/EffectorConcatenateTest.java | 4 +- .../entity/effector/EffectorTaskTest.java | 4 +- .../entity/group/DynamicClusterTest.java | 2 +- ...DynamicClusterWithAvailabilityZonesTest.java | 2 +- .../entity/group/DynamicFabricTest.java | 2 +- .../group/MembershipTrackingPolicyTest.java | 2 +- .../entity/hello/LocalEntitiesTest.java | 4 +- .../ApplicationBuilderOverridingTest.java | 2 +- .../entity/proxying/EntityManagerTest.java | 2 +- .../entity/proxying/EntityProxyTest.java | 4 +- .../entity/rebind/RebindCatalogEntityTest.java | 4 +- .../entity/rebind/RebindCatalogItemTest.java | 2 +- .../entity/rebind/RebindEntityTest.java | 2 +- .../entity/rebind/RebindFailuresTest.java | 4 +- .../entity/rebind/RebindFeedWithHaTest.java | 4 +- .../entity/rebind/RebindManagerSorterTest.java | 2 +- .../entity/rebind/RebindManagerTest.java | 2 +- .../brooklyn/entity/rebind/RebindOptions.java | 2 +- .../entity/rebind/RebindTestFixture.java | 6 +- .../brooklyn/entity/rebind/RebindTestUtils.java | 6 +- .../BrooklynMementoPersisterFileBasedTest.java | 2 +- ...ntoPersisterInMemorySizeIntegrationTest.java | 2 +- .../BrooklynMementoPersisterInMemoryTest.java | 2 +- .../BrooklynMementoPersisterTestFixture.java | 2 +- .../persister/FileBasedObjectStoreTest.java | 2 +- .../rebind/persister/InMemoryObjectStore.java | 4 +- .../rebind/persister/ListeningObjectStore.java | 4 +- .../persister/XmlMementoSerializerTest.java | 2 +- .../transformer/CompoundTransformerTest.java | 4 +- .../entity/trait/FailingEntityImpl.java | 2 +- .../entity/trait/StartableMethodsTest.java | 2 +- .../access/PortForwardManagerRebindTest.java | 2 +- .../location/basic/AbstractLocationTest.java | 2 +- ...stMachineProvisioningLocationRebindTest.java | 2 +- .../location/basic/LocationConfigTest.java | 2 +- .../location/basic/LocationExtensionsTest.java | 2 +- .../location/basic/LocationManagementTest.java | 2 +- .../location/basic/MachineDetailsTest.java | 4 +- .../location/basic/MultiLocationRebindTest.java | 2 +- .../SshMachineLocationIntegrationTest.java | 2 +- .../location/basic/SshMachineLocationTest.java | 2 +- .../entitlement/AcmeEntitlementManager.java | 6 +- .../AcmeEntitlementManagerTestFixture.java | 2 +- .../entitlement/EntitlementsTest.java | 4 +- .../entitlement/EntityEntitlementTest.java | 2 +- .../ha/HighAvailabilityManagerInMemoryTest.java | 2 +- .../HighAvailabilityManagerSplitBrainTest.java | 10 +- .../ha/HighAvailabilityManagerTestFixture.java | 10 +- .../brooklyn/management/ha/HotStandbyTest.java | 6 +- .../ha/ImmutableManagementPlaneSyncRecord.java | 4 +- ...agementPlaneSyncRecordPersisterInMemory.java | 6 +- .../management/ha/MasterChooserTest.java | 4 +- .../ha/MutableManagementPlaneSyncRecord.java | 4 +- .../brooklyn/management/ha/WarmStandbyTest.java | 6 +- .../internal/EntityExecutionManagerTest.java | 4 +- .../internal/LocalManagementContextTest.java | 2 +- .../internal/LocalSubscriptionManagerTest.java | 4 +- .../osgi/OsgiVersionMoreEntityTest.java | 4 +- .../policy/basic/PolicySubscriptionTest.java | 2 +- .../qa/performance/AbstractPerformanceTest.java | 2 +- .../qa/performance/EntityPerformanceTest.java | 2 +- .../SubscriptionPerformanceTest.java | 2 +- .../brooklyn/util/internal/FlagUtilsTest.java | 2 +- .../util/ssh/BashCommandsIntegrationTest.java | 2 +- .../task/BasicTaskExecutionPerformanceTest.java | 2 +- .../util/task/BasicTaskExecutionTest.java | 2 +- .../util/task/BasicTasksFutureTest.java | 2 +- .../util/task/CompoundTaskExecutionTest.java | 2 +- .../util/task/DynamicSequentialTaskTest.java | 4 +- .../util/task/NonBasicTaskExecutionTest.java | 2 +- .../util/task/ScheduledExecutionTest.java | 2 +- .../util/task/TaskFinalizationTest.java | 2 +- .../test/java/brooklyn/util/task/TasksTest.java | 4 +- .../brooklyn/util/task/ValueResolverTest.java | 4 +- .../brooklyn/util/task/ssh/SshTasksTest.java | 2 +- .../util/task/system/SystemTasksTest.java | 2 +- .../brooklyn/test/entity/TestApplication.java | 2 +- .../test/entity/TestApplicationImpl.java | 2 +- .../JcloudsBlobStoreBasedObjectStore.java | 4 +- .../location/jclouds/BrooklynMachinePool.java | 2 +- .../jclouds/JcloudsByonLocationResolver.java | 2 +- .../location/jclouds/JcloudsLocation.java | 2 +- .../jclouds/JcloudsLocationResolver.java | 2 +- .../zone/AwsAvailabilityZoneExtension.java | 2 +- .../persister/jclouds/BlobStoreExpiryTest.java | 2 +- .../BlobStorePersistencePerformanceTest.java | 2 +- .../rebind/persister/jclouds/BlobStoreTest.java | 2 +- .../jclouds/JcloudsExpect100ContinueTest.java | 2 +- .../JcloudsObjectStoreAccessorWriterTest.java | 2 +- .../jclouds/BailOutJcloudsLocation.java | 2 +- .../provider/AbstractJcloudsLocationTest.java | 2 +- .../AwsEc2LocationWindowsLiveTest.groovy | 2 +- .../entity/brooklyn/BrooklynMetricsImpl.java | 2 +- .../policy/ha/AbstractFailureDetector.java | 2 +- .../enricher/DeltaEnrichersTests.groovy | 2 +- .../enricher/RollingMeanEnricherTest.groovy | 2 +- .../RollingTimeWindowMeanEnricherTest.groovy | 2 +- .../enricher/TimeFractionDeltaEnricherTest.java | 2 +- .../AbstractFollowTheSunPolicyTest.java | 2 +- .../ha/ConnectionFailureDetectorTest.java | 2 +- ...ServiceFailureDetectorStabilizationTest.java | 2 +- .../policy/ha/ServiceFailureDetectorTest.java | 2 +- .../brooklyn/policy/ha/ServiceReplacerTest.java | 2 +- .../policy/ha/ServiceRestarterTest.java | 2 +- .../SameServerDriverLifecycleEffectorTasks.java | 2 +- .../entity/basic/SameServerEntityImpl.java | 2 +- ...wareProcessDriverLifecycleEffectorTasks.java | 2 +- .../entity/basic/SoftwareProcessImpl.java | 2 +- .../entity/basic/lifecycle/ScriptHelper.java | 6 +- .../brooklynnode/BrooklynClusterImpl.java | 2 +- .../entity/brooklynnode/BrooklynNode.java | 4 +- .../entity/brooklynnode/BrooklynNodeImpl.java | 6 +- .../BrooklynClusterUpgradeEffectorBody.java | 6 +- .../BrooklynNodeUpgradeEffectorBody.java | 4 +- .../effector/SelectMasterEffectorBody.java | 4 +- .../SetHighAvailabilityModeEffectorBody.java | 4 +- .../brooklyn/entity/chef/ChefAttributeFeed.java | 2 +- .../brooklyn/entity/chef/ChefSoloDriver.java | 4 +- .../brooklyn/entity/chef/ChefSoloTasks.java | 2 +- .../java/brooklyn/entity/chef/ChefTasks.java | 4 +- .../brooklyn/entity/pool/ServerPoolImpl.java | 4 +- .../entity/pool/ServerPoolLocationResolver.java | 2 +- .../entity/service/EntityLaunchListener.java | 4 +- .../entity/service/InitdServiceInstaller.java | 2 +- .../entity/service/SystemServiceEnricher.java | 4 +- .../entity/service/SystemServiceInstaller.java | 2 +- .../entity/software/MachineInitTasks.java | 2 +- .../software/MachineLifecycleEffectorTasks.java | 2 +- .../entity/software/SshEffectorTasks.java | 2 +- .../brooklyn/entity/software/StaticSensor.java | 2 +- .../software/java/JmxAttributeSensor.java | 2 +- .../entity/AbstractGoogleComputeLiveTest.java | 2 +- .../entity/AbstractSoftlayerLiveTest.java | 2 +- .../entity/basic/SameServerEntityTest.java | 2 +- .../basic/SoftwareProcessEntityLatchTest.java | 2 +- .../basic/SoftwareProcessEntityRebindTest.java | 2 +- .../entity/basic/SoftwareProcessEntityTest.java | 6 +- .../basic/lifecycle/NaiveScriptRunnerTest.java | 2 +- .../brooklynnode/SelectMasterEffectorTest.java | 2 +- .../entity/chef/ChefLiveTestSupport.java | 2 +- .../chef/ChefServerTasksIntegrationTest.java | 2 +- .../mysql/ChefSoloDriverToyMySqlEntity.java | 4 +- .../entity/pool/AbstractServerPoolTest.java | 2 +- .../entity/pool/ServerPoolLiveTest.java | 2 +- .../entity/pool/ServerPoolRebindTest.java | 2 +- .../entity/software/AbstractDockerLiveTest.java | 2 +- .../MachineLifecycleEffectorTasksTest.java | 2 +- .../entity/software/SoftwareEffectorTest.java | 4 +- .../entity/software/SshEffectorTasksTest.java | 6 +- .../mariadb/MariaDbIntegrationTest.java | 2 +- .../postgresql/PostgreSqlIntegrationTest.java | 2 +- .../rubyrep/RubyRepIntegrationTest.java | 2 +- .../nosql/cassandra/CassandraNodeSshDriver.java | 2 +- .../nosql/couchbase/CouchbaseNodeSshDriver.java | 2 +- .../entity/proxy/AbstractControllerImpl.java | 2 +- .../entity/proxy/nginx/NginxControllerImpl.java | 2 +- .../entity/proxy/nginx/NginxSshDriver.java | 2 +- .../entity/proxy/nginx/UrlMappingImpl.java | 2 +- .../ControlledDynamicWebAppClusterImpl.java | 2 +- .../entity/webapp/DynamicWebAppClusterImpl.java | 4 +- .../entity/dns/AbstractGeoDnsServiceTest.java | 2 +- .../geoscaling/GeoscalingIntegrationTest.java | 2 +- .../nginx/NginxClusterIntegrationTest.java | 2 +- .../proxy/nginx/NginxRebindIntegrationTest.java | 2 +- .../nginx/NginxRebindWithHaIntegrationTest.java | 4 +- .../nginx/NginxUrlMappingIntegrationTest.java | 2 +- .../proxy/nginx/NginxWebClusterEc2LiveTest.java | 2 +- .../AbstractWebAppFixtureIntegrationTest.java | 6 +- .../webapp/TomcatAutoScalerPolicyTest.java | 2 +- .../webapp/WebAppConcurrentDeployTest.java | 2 +- .../NodeJsWebAppFixtureIntegrationTest.java | 2 +- .../app/SampleLocalhostIntegrationTest.java | 2 +- .../brooklyn/sample/app/SampleUnitTest.java | 2 +- .../camp/brooklyn/BrooklynCampPlatform.java | 4 +- .../BrooklynCampPlatformLauncherAbstract.java | 2 +- .../camp/brooklyn/YamlLauncherAbstract.java | 4 +- .../BrooklynAssemblyTemplateInstantiator.java | 4 +- .../BrooklynComponentTemplateResolver.java | 4 +- .../BrooklynEntityDecorationResolver.java | 2 +- .../spi/creation/BrooklynEntityMatcher.java | 4 +- .../creation/BrooklynYamlLocationResolver.java | 2 +- .../creation/BrooklynYamlTypeInstantiator.java | 2 +- .../spi/dsl/BrooklynDslDeferredSupplier.java | 4 +- .../spi/dsl/methods/BrooklynDslCommon.java | 6 +- .../brooklyn/spi/dsl/methods/DslComponent.java | 2 +- .../lookup/AbstractBrooklynResourceLookup.java | 2 +- .../lookup/AbstractTemplateBrooklynLookup.java | 2 +- .../spi/lookup/AssemblyBrooklynLookup.java | 2 +- .../lookup/AssemblyTemplateBrooklynLookup.java | 2 +- .../brooklyn/spi/lookup/BrooklynUrlLookup.java | 2 +- .../lookup/PlatformComponentBrooklynLookup.java | 2 +- ...PlatformComponentTemplateBrooklynLookup.java | 2 +- .../platform/BrooklynImmutableCampPlatform.java | 2 +- .../camp/brooklyn/AbstractYamlRebindTest.java | 4 +- .../camp/brooklyn/AbstractYamlTest.java | 4 +- .../BrooklynYamlTypeInstantiatorTest.java | 2 +- .../camp/brooklyn/DslAndRebindYamlTest.java | 2 +- .../camp/brooklyn/EntitiesYamlTest.java | 2 +- ...aWebAppWithDslYamlRebindIntegrationTest.java | 4 +- .../brooklyn/JavaWebAppsIntegrationTest.java | 4 +- .../camp/brooklyn/JavaWebAppsMatchingTest.java | 2 +- .../brooklyn/camp/brooklyn/ObjectsYamlTest.java | 4 +- .../brooklyn/ReloadBrooklynPropertiesTest.java | 2 +- .../brooklyn/VanillaBashNetcatYamlTest.java | 2 +- .../main/java/org/apache/brooklyn/cli/Main.java | 6 +- .../BrooklynJavascriptGuiLauncherTest.java | 2 +- .../brooklyn/launcher/BrooklynLauncher.java | 12 +- .../launcher/BrooklynServerDetails.java | 2 +- .../brooklyn/launcher/BrooklynWebServer.java | 2 +- .../camp/BrooklynCampPlatformLauncher.java | 2 +- .../BrooklynEntityMirrorIntegrationTest.java | 4 +- .../brooklynnode/BrooklynNodeRestTest.java | 2 +- .../BrooklynLauncherHighAvailabilityTest.java | 6 +- .../BrooklynLauncherRebindTestFixture.java | 4 +- .../BrooklynLauncherRebindTestToFiles.java | 4 +- ...lynLauncherRebindToCloudObjectStoreTest.java | 2 +- .../brooklyn/launcher/BrooklynLauncherTest.java | 2 +- .../launcher/SimpleYamlLauncherForTests.java | 2 +- .../blueprints/AbstractBlueprintTest.java | 2 +- .../SoftlayerObtainPrivateLiveTest.java | 2 +- .../org/apache/brooklyn/qa/load/LoadTest.java | 4 +- .../org/apache/brooklyn/rest/api/ServerApi.java | 4 +- .../ApplicationResourceIntegrationTest.java | 2 +- .../rest/client/BrooklynApiRestClientTest.java | 2 +- .../BrooklynPropertiesSecurityFilter.java | 2 +- .../rest/filter/HaHotCheckResourceFilter.java | 4 +- .../rest/filter/HaMasterCheckFilter.java | 4 +- .../resources/AbstractBrooklynRestResource.java | 2 +- .../rest/resources/ActivityResource.java | 4 +- .../rest/resources/ApplicationResource.java | 2 +- .../rest/resources/EffectorResource.java | 2 +- .../brooklyn/rest/resources/EntityResource.java | 2 +- .../brooklyn/rest/resources/ServerResource.java | 16 +- ...nUserWithRandomPasswordSecurityProvider.java | 2 +- .../provider/DelegatingSecurityProvider.java | 2 +- .../provider/ExplicitUsersSecurityProvider.java | 2 +- .../security/provider/LdapSecurityProvider.java | 2 +- .../transform/HighAvailabilityTransformer.java | 4 +- .../rest/transform/LocationTransformer.java | 2 +- .../rest/transform/TaskTransformer.java | 4 +- .../rest/util/BrooklynRestResourceUtils.java | 4 +- .../brooklyn/rest/util/EntityLocationUtils.java | 2 +- .../rest/util/ManagementContextProvider.java | 2 +- .../rest/util/json/BidiSerialization.java | 2 +- .../util/json/BrooklynJacksonJsonProvider.java | 2 +- .../brooklynnode/DeployBlueprintTest.java | 2 +- .../brooklyn/rest/BrooklynRestApiLauncher.java | 2 +- .../BrooklynRestApiLauncherTestFixture.java | 2 +- .../apache/brooklyn/rest/HaHotCheckTest.java | 6 +- .../brooklyn/rest/HaMasterCheckFilterTest.java | 8 +- .../brooklyn/rest/domain/ApplicationTest.java | 2 +- .../brooklyn/rest/domain/SensorSummaryTest.java | 2 +- .../rest/resources/ScriptResourceTest.java | 2 +- .../SensorResourceIntegrationTest.java | 2 +- .../ServerResourceIntegrationTest.java | 2 +- .../rest/resources/ServerResourceTest.java | 2 +- .../rest/resources/ServerShutdownTest.java | 4 +- .../rest/testing/BrooklynRestApiTest.java | 2 +- .../json/BrooklynJacksonSerializerTest.java | 2 +- .../apache/brooklyn/test/EntityTestUtils.java | 2 +- 506 files changed, 2599 insertions(+), 2599 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/2e2de8e4/api/src/main/java/brooklyn/location/LocationDefinition.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/brooklyn/location/LocationDefinition.java b/api/src/main/java/brooklyn/location/LocationDefinition.java index 44296e4..3a20a24 100644 --- a/api/src/main/java/brooklyn/location/LocationDefinition.java +++ b/api/src/main/java/brooklyn/location/LocationDefinition.java @@ -20,7 +20,7 @@ package brooklyn.location; import java.util.Map; -import org.apache.brooklyn.management.ManagementContext; +import org.apache.brooklyn.api.management.ManagementContext; /** * Defines a location, where the {@link #getSpec()} is like a serialized representation http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/2e2de8e4/api/src/main/java/brooklyn/location/LocationResolver.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/brooklyn/location/LocationResolver.java b/api/src/main/java/brooklyn/location/LocationResolver.java index 908936c..bcd32b6 100644 --- a/api/src/main/java/brooklyn/location/LocationResolver.java +++ b/api/src/main/java/brooklyn/location/LocationResolver.java @@ -20,7 +20,7 @@ package brooklyn.location; import java.util.Map; -import org.apache.brooklyn.management.ManagementContext; +import org.apache.brooklyn.api.management.ManagementContext; import com.google.common.annotations.Beta; http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/2e2de8e4/api/src/main/java/brooklyn/location/LocationSpec.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/brooklyn/location/LocationSpec.java b/api/src/main/java/brooklyn/location/LocationSpec.java index d13b7d1..d91ca93 100644 --- a/api/src/main/java/brooklyn/location/LocationSpec.java +++ b/api/src/main/java/brooklyn/location/LocationSpec.java @@ -24,7 +24,7 @@ import java.util.Collections; import java.util.Map; import org.apache.brooklyn.api.basic.AbstractBrooklynObjectSpec; -import org.apache.brooklyn.management.Task; +import org.apache.brooklyn.api.management.Task; import org.slf4j.Logger; import org.slf4j.LoggerFactory; http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/2e2de8e4/api/src/main/java/org/apache/brooklyn/api/entity/Application.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/org/apache/brooklyn/api/entity/Application.java b/api/src/main/java/org/apache/brooklyn/api/entity/Application.java index 21e0800..af71cf3 100644 --- a/api/src/main/java/org/apache/brooklyn/api/entity/Application.java +++ b/api/src/main/java/org/apache/brooklyn/api/entity/Application.java @@ -18,7 +18,7 @@ */ package org.apache.brooklyn.api.entity; -import org.apache.brooklyn.management.ManagementContext; +import org.apache.brooklyn.api.management.ManagementContext; /** http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/2e2de8e4/api/src/main/java/org/apache/brooklyn/api/entity/Entity.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/org/apache/brooklyn/api/entity/Entity.java b/api/src/main/java/org/apache/brooklyn/api/entity/Entity.java index 29a69f1..5f1b1aa 100644 --- a/api/src/main/java/org/apache/brooklyn/api/entity/Entity.java +++ b/api/src/main/java/org/apache/brooklyn/api/entity/Entity.java @@ -26,7 +26,7 @@ import javax.annotation.Nullable; import org.apache.brooklyn.api.basic.BrooklynObject; import org.apache.brooklyn.api.entity.proxying.EntitySpec; import org.apache.brooklyn.api.event.AttributeSensor; -import org.apache.brooklyn.management.Task; +import org.apache.brooklyn.api.management.Task; import org.apache.brooklyn.policy.Enricher; import org.apache.brooklyn.policy.EnricherSpec; import org.apache.brooklyn.policy.Policy; http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/2e2de8e4/api/src/main/java/org/apache/brooklyn/api/entity/basic/EntityLocal.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/org/apache/brooklyn/api/entity/basic/EntityLocal.java b/api/src/main/java/org/apache/brooklyn/api/entity/basic/EntityLocal.java index db0c813..f16d867 100644 --- a/api/src/main/java/org/apache/brooklyn/api/entity/basic/EntityLocal.java +++ b/api/src/main/java/org/apache/brooklyn/api/entity/basic/EntityLocal.java @@ -27,10 +27,10 @@ import org.apache.brooklyn.api.event.AttributeSensor; import org.apache.brooklyn.api.event.Sensor; import org.apache.brooklyn.api.event.SensorEvent; import org.apache.brooklyn.api.event.SensorEventListener; -import org.apache.brooklyn.management.SubscriptionContext; -import org.apache.brooklyn.management.SubscriptionHandle; -import org.apache.brooklyn.management.SubscriptionManager; -import org.apache.brooklyn.management.Task; +import org.apache.brooklyn.api.management.SubscriptionContext; +import org.apache.brooklyn.api.management.SubscriptionHandle; +import org.apache.brooklyn.api.management.SubscriptionManager; +import org.apache.brooklyn.api.management.Task; import brooklyn.config.ConfigKey; import brooklyn.config.ConfigKey.HasConfigKey; http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/2e2de8e4/api/src/main/java/org/apache/brooklyn/api/entity/proxying/EntitySpec.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/org/apache/brooklyn/api/entity/proxying/EntitySpec.java b/api/src/main/java/org/apache/brooklyn/api/entity/proxying/EntitySpec.java index 0d10956..b55a2d1 100644 --- a/api/src/main/java/org/apache/brooklyn/api/entity/proxying/EntitySpec.java +++ b/api/src/main/java/org/apache/brooklyn/api/entity/proxying/EntitySpec.java @@ -30,7 +30,7 @@ import javax.annotation.Nullable; import org.apache.brooklyn.api.basic.AbstractBrooklynObjectSpec; import org.apache.brooklyn.api.entity.Entity; import org.apache.brooklyn.api.entity.Group; -import org.apache.brooklyn.management.Task; +import org.apache.brooklyn.api.management.Task; import org.apache.brooklyn.policy.Enricher; import org.apache.brooklyn.policy.EnricherSpec; import org.apache.brooklyn.policy.Policy; http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/2e2de8e4/api/src/main/java/org/apache/brooklyn/api/entity/rebind/RebindManager.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/org/apache/brooklyn/api/entity/rebind/RebindManager.java b/api/src/main/java/org/apache/brooklyn/api/entity/rebind/RebindManager.java index 891a6e0..577fb58 100644 --- a/api/src/main/java/org/apache/brooklyn/api/entity/rebind/RebindManager.java +++ b/api/src/main/java/org/apache/brooklyn/api/entity/rebind/RebindManager.java @@ -25,7 +25,7 @@ import java.util.concurrent.TimeoutException; import javax.annotation.Nullable; import org.apache.brooklyn.api.entity.Application; -import org.apache.brooklyn.management.ha.ManagementNodeState; +import org.apache.brooklyn.api.management.ha.ManagementNodeState; import org.apache.brooklyn.mementos.BrooklynMementoPersister; import org.apache.brooklyn.mementos.BrooklynMementoRawData; http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/2e2de8e4/api/src/main/java/org/apache/brooklyn/api/entity/trait/Configurable.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/org/apache/brooklyn/api/entity/trait/Configurable.java b/api/src/main/java/org/apache/brooklyn/api/entity/trait/Configurable.java index aebb657..9a7680f 100644 --- a/api/src/main/java/org/apache/brooklyn/api/entity/trait/Configurable.java +++ b/api/src/main/java/org/apache/brooklyn/api/entity/trait/Configurable.java @@ -18,7 +18,7 @@ */ package org.apache.brooklyn.api.entity.trait; -import org.apache.brooklyn.management.Task; +import org.apache.brooklyn.api.management.Task; import brooklyn.config.ConfigKey; import brooklyn.config.ConfigKey.HasConfigKey; http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/2e2de8e4/api/src/main/java/org/apache/brooklyn/api/management/AccessController.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/org/apache/brooklyn/api/management/AccessController.java b/api/src/main/java/org/apache/brooklyn/api/management/AccessController.java new file mode 100644 index 0000000..1342d3b --- /dev/null +++ b/api/src/main/java/org/apache/brooklyn/api/management/AccessController.java @@ -0,0 +1,66 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.brooklyn.api.management; + +import org.apache.brooklyn.api.entity.Entity; + +import brooklyn.location.Location; + +import com.google.common.annotations.Beta; + +@Beta +public interface AccessController { + + // TODO Expect this class' methods to change, e.g. including the user doing the + // provisioning or the provisioning parameters such as jurisdiction + + public static class Response { + private static final Response ALLOWED = new Response(true, ""); + + public static Response allowed() { + return ALLOWED; + } + + public static Response disallowed(String msg) { + return new Response(false, msg); + } + + private final boolean allowed; + private final String msg; + + private Response(boolean allowed, String msg) { + this.allowed = allowed; + this.msg = msg; + } + + public boolean isAllowed() { + return allowed; + } + + public String getMsg() { + return msg; + } + } + + public Response canProvisionLocation(Location provisioner); + + public Response canManageLocation(Location loc); + + public Response canManageEntity(Entity entity); +} http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/2e2de8e4/api/src/main/java/org/apache/brooklyn/api/management/EntityManager.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/org/apache/brooklyn/api/management/EntityManager.java b/api/src/main/java/org/apache/brooklyn/api/management/EntityManager.java new file mode 100644 index 0000000..4120587 --- /dev/null +++ b/api/src/main/java/org/apache/brooklyn/api/management/EntityManager.java @@ -0,0 +1,126 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.brooklyn.api.management; + +import java.util.Collection; +import java.util.Map; + +import javax.annotation.Nullable; + +import org.apache.brooklyn.api.entity.Application; +import org.apache.brooklyn.api.entity.Entity; +import org.apache.brooklyn.api.entity.proxying.EntitySpec; +import org.apache.brooklyn.api.entity.proxying.EntityTypeRegistry; +import org.apache.brooklyn.policy.Enricher; +import org.apache.brooklyn.policy.EnricherSpec; +import org.apache.brooklyn.policy.Policy; +import org.apache.brooklyn.policy.PolicySpec; + +import com.google.common.base.Predicate; + +/** + * For managing and querying entities. + */ +public interface EntityManager { + + /** + * Returns the type registry, used to identify the entity implementation when instantiating an + * entity of a given type. + * + * @see EntityManager.createEntity(EntitySpec) + */ + EntityTypeRegistry getEntityTypeRegistry(); + + /** + * Creates a new (unmanaged) entity. + * + * @param spec + * @return A proxy to the created entity (rather than the actual entity itself). + */ + <T extends Entity> T createEntity(EntitySpec<T> spec); + + /** + * Convenience (particularly for groovy code) to create an entity. + * Equivalent to {@code createEntity(EntitySpec.create(type).configure(config))} + * + * @see createEntity(EntitySpec) + */ + <T extends Entity> T createEntity(Map<?,?> config, Class<T> type); + + /** + * Creates a new policy (not managed; not associated with any entity). + * + * @param spec + */ + <T extends Policy> T createPolicy(PolicySpec<T> spec); + + /** + * Creates a new enricher (not managed; not associated with any entity). + * + * @param spec + */ + <T extends Enricher> T createEnricher(EnricherSpec<T> spec); + + /** + * All entities under control of this management plane + */ + Collection<Entity> getEntities(); + + /** + * All entities managed as part of the given application + */ + Collection<Entity> getEntitiesInApplication(Application application); + + /** + * All entities under control of this management plane that match the given filter + */ + Collection<Entity> findEntities(Predicate<? super Entity> filter); + + /** + * All entities managed as part of the given application that match the given filter + */ + Collection<Entity> findEntitiesInApplication(Application application, Predicate<? super Entity> filter); + + /** + * Returns the entity with the given identifier (may be a full instance, or a proxy to one which is remote), + * or null. + */ + @Nullable Entity getEntity(String id); + + /** whether the entity is under management by this management context */ + boolean isManaged(Entity entity); + + /** + * Begins management for the given entity and its children, recursively. + * + * depending on the implementation of the management context, + * this might push it out to one or more remote management nodes. + * Manage an entity. + */ + // TODO manage and unmanage without arguments should be changed to take an explicit ManagementTransitionMode + // (but that class is not currently in the API project) + void manage(Entity e); + + /** + * Causes the given entity and its children, recursively, to be removed from the management plane + * (for instance because the entity is no longer relevant) + */ + void unmanage(Entity e); + +} http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/2e2de8e4/api/src/main/java/org/apache/brooklyn/api/management/ExecutionContext.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/org/apache/brooklyn/api/management/ExecutionContext.java b/api/src/main/java/org/apache/brooklyn/api/management/ExecutionContext.java new file mode 100644 index 0000000..0adb149 --- /dev/null +++ b/api/src/main/java/org/apache/brooklyn/api/management/ExecutionContext.java @@ -0,0 +1,67 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.brooklyn.api.management; + +import java.util.Map; +import java.util.Set; +import java.util.concurrent.Callable; +import java.util.concurrent.Executor; + +import org.apache.brooklyn.api.entity.Entity; + +/** + * This is a Brooklyn extension to the Java {@link Executor}. + * + * The "context" could, for example, be an {@link Entity} so that tasks executed + * can be annotated as executing in that context. + */ +public interface ExecutionContext extends Executor { + + /** + * Get the tasks executed through this context (returning an immutable set). + */ + Set<Task<?>> getTasks(); + + /** + * See {@link ExecutionManager#submit(Map, TaskAdaptable)} for properties that can be passed in. + */ + Task<?> submit(Map<?,?> properties, Runnable runnable); + + /** + * See {@link ExecutionManager#submit(Map, TaskAdaptable)} for properties that can be passed in. + */ + <T> Task<T> submit(Map<?,?> properties, Callable<T> callable); + + /** {@link ExecutionManager#submit(Runnable) */ + Task<?> submit(Runnable runnable); + + /** {@link ExecutionManager#submit(Callable) */ + <T> Task<T> submit(Callable<T> callable); + + /** See {@link ExecutionManager#submit(Map, TaskAdaptable)}. */ + <T> Task<T> submit(TaskAdaptable<T> task); + + /** + * See {@link ExecutionManager#submit(Map, TaskAdaptable)} for properties that can be passed in. + */ + <T> Task<T> submit(Map<?,?> properties, TaskAdaptable<T> task); + + boolean isShutdown(); + +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/2e2de8e4/api/src/main/java/org/apache/brooklyn/api/management/ExecutionManager.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/org/apache/brooklyn/api/management/ExecutionManager.java b/api/src/main/java/org/apache/brooklyn/api/management/ExecutionManager.java new file mode 100644 index 0000000..3e192d2 --- /dev/null +++ b/api/src/main/java/org/apache/brooklyn/api/management/ExecutionManager.java @@ -0,0 +1,117 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.brooklyn.api.management; + +import java.util.Collection; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutorService; + +import org.apache.brooklyn.api.entity.Entity; + +/** + * This class manages the execution of a number of jobs with tags. + * + * It is like an executor service (and it ends up delegating to one) but adds additional support + * where jobs can be: + * <ul> + * <li>Tracked with tags/buckets + * <li>Be {@link Runnable}s, {@link Callable}s, or {@link groovy.lang.Closure}s + * <li>Remembered after completion + * <li>Treated as {@link Task} instances (see below) + * <li>Given powerful synchronization capabilities + * </ul> + * <p> + * The advantage of treating them as {@link Task} instances include: + * <ul> + * <li>Richer status information + * <li>Started-by, contained-by relationships automatically remembered + * <li>Runtime metadata (start, stop, etc) + * <li>Grid and multi-machine support) + * </ul> + * <p> + * For usage instructions see {@link #submit(Map, TaskAdaptable)}, and for examples see the various + * {@code ExecutionTest} and {@code TaskTest} instances. + * <p> + * It has been developed for multi-location provisioning and management to track work being + * done by each {@link Entity}. + * <p> + * Note the use of the environment variable {@code THREAD_POOL_SIZE} which is used to size + * the {@link ExecutorService} thread pool. The default is calculated as twice the number + * of CPUs in the system plus two, giving 10 for a four core system, 18 for an eight CPU + * server and so on. + */ +public interface ExecutionManager { + public boolean isShutdown(); + + /** returns the task with the given ID, or null if none */ + public Task<?> getTask(String id); + + /** returns all tasks with the given tag (immutable) */ + public Set<Task<?>> getTasksWithTag(Object tag); + + /** returns all tasks that have any of the given tags (immutable) */ + public Set<Task<?>> getTasksWithAnyTag(Iterable<?> tags); + + /** returns all tasks that have all of the given tags (immutable) */ + public Set<Task<?>> getTasksWithAllTags(Iterable<?> tags); + + /** returns all tags known to this manager (immutable) */ + public Set<Object> getTaskTags(); + +// /** returns all tasks known to this manager (immutable) */ +// public Set<Task<?>> getAllTasks(); + + /** see {@link #submit(Map, TaskAdaptable)} */ + public Task<?> submit(Runnable r); + + /** see {@link #submit(Map, TaskAdaptable)} */ + public <T> Task<T> submit(Callable<T> c); + + /** see {@link #submit(Map, TaskAdaptable)} */ + public <T> Task<T> submit(TaskAdaptable<T> task); + + /** see {@link #submit(Map, TaskAdaptable)} */ + public Task<?> submit(Map<?, ?> flags, Runnable r); + + /** see {@link #submit(Map, TaskAdaptable)} */ + public <T> Task<T> submit(Map<?, ?> flags, Callable<T> c); + + /** + * Submits the given {@link Task} for execution in the context associated with this manager. + * + * The following optional flags supported (in the optional map first arg): + * <ul> + * <li><em>tag</em> - A single object to be used as a tag for looking up the task + * <li><em>tags</em> - A {@link Collection} of object tags each of which the task should be associated, + * used for associating with contexts, mutex execution, and other purposes + * <li><em>synchId</em> - A string, or {@link Collection} of strings, representing a category on which an object should own a synch lock + * <li><em>synchObj</em> - A string, or {@link Collection} of strings, representing a category on which an object should own a synch lock + * <li><em>newTaskStartCallback</em> - A {@link groovy.lang.Closure} that will be invoked just before the task starts if it starts as a result of this call + * <li><em>newTaskEndCallback</em> - A {@link groovy.lang.Closure} that will be invoked when the task completes if it starts as a result of this call + * </ul> + * Callbacks run in the task's thread, and if the callback is a {@link groovy.lang.Closure} it is passed the task for convenience. The closure can be any of the + * following types; either a {@link groovy.lang.Closure}, {@link Runnable} or {@link Callable}. + * <p> + * If a Map is supplied it must be modifiable (currently; may allow immutable maps in future). + */ + public <T> Task<T> submit(Map<?, ?> flags, TaskAdaptable<T> task); + +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/2e2de8e4/api/src/main/java/org/apache/brooklyn/api/management/HasTaskChildren.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/org/apache/brooklyn/api/management/HasTaskChildren.java b/api/src/main/java/org/apache/brooklyn/api/management/HasTaskChildren.java new file mode 100644 index 0000000..33e890e --- /dev/null +++ b/api/src/main/java/org/apache/brooklyn/api/management/HasTaskChildren.java @@ -0,0 +1,39 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.brooklyn.api.management; + +import com.google.common.annotations.Beta; + +/** + * Interface marks tasks which have explicit children, + * typically where the task defines the ordering of running those children tasks + * <p> + * The {@link Task#getSubmittedByTask()} on the child will typically return the parent, + * but note there are other means of submitting tasks (e.g. background, in the same {@link ExecutionContext}), + * where the submitter has no API reference to the submitted tasks. + * <p> + * In general the children mechanism is preferred as it is easier to navigate + * (otherwise you have to scan the {@link ExecutionContext} to find tasks submitted by a task). + */ +@Beta // in 0.6.0 +public interface HasTaskChildren { + + public Iterable<Task<?>> getChildren(); + +} http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/2e2de8e4/api/src/main/java/org/apache/brooklyn/api/management/LocationManager.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/org/apache/brooklyn/api/management/LocationManager.java b/api/src/main/java/org/apache/brooklyn/api/management/LocationManager.java new file mode 100644 index 0000000..a6fed43 --- /dev/null +++ b/api/src/main/java/org/apache/brooklyn/api/management/LocationManager.java @@ -0,0 +1,87 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.brooklyn.api.management; + +import java.util.Collection; +import java.util.Map; + +import brooklyn.location.Location; +import brooklyn.location.LocationSpec; + +/** + * For managing and querying entities. + */ +public interface LocationManager { + + /** + * Creates a new location, which is tracked by the management context. + * + * @param spec + */ + <T extends Location> T createLocation(LocationSpec<T> spec); + + /** + * Convenience (particularly for groovy code) to create a location. + * Equivalent to {@code createLocation(LocationSpec.create(type).configure(config))} + * + * @see #createLocation(LocationSpec) + */ + <T extends Location> T createLocation(Map<?,?> config, Class<T> type); + + /** + * All locations under control of this management plane. + * + * This returns a snapshot of the current locations; it will not reflect future changes in the locations. + * If no locations are found, the collection will be empty (i.e. null is never returned). + */ + Collection<Location> getLocations(); + + /** + * Returns the location under management (e.g. in use) with the given identifier + * (e.g. random string; and different to the LocationDefinition id). + * May return a full instance, or a proxy to one which is remote. + * If no location found with that id, returns null. + */ + Location getLocation(String id); + + /** whether the location is under management by this management context */ + boolean isManaged(Location loc); + + /** + * Begins management for the given location and its children, recursively. + * + * depending on the implementation of the management context, + * this might push it out to one or more remote management nodes. + * Manage a location. + * + * @since 0.6.0 (added only for backwards compatibility, where locations are being created directly). + * @deprecated in 0.6.0; use {@link #createLocation(LocationSpec)} instead. + */ + Location manage(Location loc); + + /** + * Causes the given location and its children, recursively, to be removed from the management plane + * (for instance because the location is no longer relevant). + * + * If the given location is not managed (e.g. it has already been unmanaged) then this is a no-op + * (though it may be logged so duplicate calls are best avoided). + */ + void unmanage(Location loc); + +} http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/2e2de8e4/api/src/main/java/org/apache/brooklyn/api/management/ManagementContext.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/org/apache/brooklyn/api/management/ManagementContext.java b/api/src/main/java/org/apache/brooklyn/api/management/ManagementContext.java new file mode 100644 index 0000000..404aa56 --- /dev/null +++ b/api/src/main/java/org/apache/brooklyn/api/management/ManagementContext.java @@ -0,0 +1,255 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.brooklyn.api.management; + +import java.io.Serializable; +import java.net.URI; +import java.util.Collection; + +import org.apache.brooklyn.api.basic.BrooklynObject; +import org.apache.brooklyn.api.catalog.BrooklynCatalog; +import org.apache.brooklyn.api.entity.Application; +import org.apache.brooklyn.api.entity.Entity; +import org.apache.brooklyn.api.entity.drivers.DriverDependentEntity; +import org.apache.brooklyn.api.entity.drivers.EntityDriverManager; +import org.apache.brooklyn.api.entity.drivers.downloads.DownloadResolverManager; +import org.apache.brooklyn.api.entity.rebind.RebindManager; +import org.apache.brooklyn.api.management.entitlement.EntitlementManager; +import org.apache.brooklyn.api.management.ha.HighAvailabilityManager; + +import brooklyn.config.StringConfigMap; +import brooklyn.location.LocationRegistry; +import brooklyn.util.guava.Maybe; + +import com.google.common.annotations.Beta; + +/** + * This is the entry point for accessing and interacting with a realm of applications and their entities in Brooklyn. + * + * For example, policies and the management console(s) (web-app, etc) can use this to interact with entities; + * policies, web-app, and entities share the realm for subscribing to events, executing tasks, and generally co-existing. + * <p> + * It may refer to several applications, and it refers to all the entities descended from those applications. + */ +public interface ManagementContext { + + // TODO Consider separating out into a ConfigManager for methods like: + // - getConfig() + // - reloadBrooklynProperties(); + // - addPropertiesReloadListener + // - removePropertiesReloadListener + // - interface PropertiesReloadListener + + /** + * UID for the Brooklyn management plane which this {@link ManagementContext} node is a part of. + * <p> + * Each Brooklyn entity is actively managed by a unique management plane + * whose ID which should not normally change for the duration of that entity, + * even though the nodes in that plane might, and the plane may go down and come back up. + * In other words the value of {@link Application#getManagementContext()#getManagementPlaneId()} + * will generally be constant (in contrast to {@link #getManagementNodeId()}). + * <p> + * This value should not be null unless the management context is a non-functional + * (non-deployment) instance. */ + String getManagementPlaneId(); + + /** + * UID for this {@link ManagementContext} node (as part of a single management plane). + * <p> + * No two instances of {@link ManagementContext} should ever have the same node UID. + * The value of {@link Application#getManagementContext()#getManagementNodeId()} may + * change many times (in contrast to {@link #getManagementPlaneId()}). + * <p> + * This value should not be null unless the management context is a non-functional + * (non-deployment) instance. */ + String getManagementNodeId(); + + /** + * The URI that this management node's REST API is available at, or absent if the node's + * API is unavailable. + */ + Maybe<URI> getManagementNodeUri(); + + /** + * All applications under control of this management plane + */ + Collection<Application> getApplications(); + + /** + * Returns the {@link EntityManager} instance for managing/querying entities. + */ + EntityManager getEntityManager(); + + /** + * Returns the {@link ExecutionManager} instance for entities and users in this management realm + * to submit tasks and to observe what tasks are occurring + */ + ExecutionManager getExecutionManager(); + + /** + * Returns an {@link ExecutionContext} within the {@link ExecutionManager} for tasks + * associated to the Brooklyn node's operation (not any entities). + **/ + ExecutionContext getServerExecutionContext(); + + /** + * Returns the {@link EntityDriverManager} entities can use to create drivers. This + * manager can also be used to programmatically customize which driver type to use + * for entities in different locations. + * + * The default strategy for choosing a driver is to use a naming convention: + * {@link DriverDependentEntity#getDriverInterface()} returns the interface that the + * driver must implement; its name should end in "Driver". For example, this suffix is + * replaced with "SshDriver" for SshMachineLocation, for example. + */ + EntityDriverManager getEntityDriverManager(); + + /** + * Returns the {@link DownloadResolverManager} for resolving things like which URL to download an installer from. + * + * The default {@link DownloadResolverManager} will retrieve {@code entity.getAttribute(Attributes.DOWNLOAD_URL)}, + * and substitute things like "${version}" etc. + * + * However, additional resolvers can be registered to customize this behaviour (e.g. to always go to an + * enterprise's repository). + */ + DownloadResolverManager getEntityDownloadsManager(); + + /** + * Returns the {@link SubscriptionManager} instance for entities and users of this management realm + * to subscribe to sensor events (and, in the case of entities, to emit sensor events) + */ + SubscriptionManager getSubscriptionManager(); + + //TODO (Alex) I'm not sure the following two getXxxContext methods are needed on the interface; + //I expect they will only be called once, in AbstractEntity, and fully capable + //there of generating the respective contexts from the managers + //(Litmus test will be whether there is anything in FederatedManagementContext + //which requires a custom FederatedExecutionContext -- or whether BasicEC + //works with FederatedExecutionManager) + /** + * Returns an {@link ExecutionContext} instance representing tasks + * (from the {@link ExecutionManager}) associated with this entity, and capable + * of conveniently running such tasks which will be associated with that entity + */ + ExecutionContext getExecutionContext(Entity entity); + + /** + * Returns a {@link SubscriptionContext} instance representing subscriptions + * (from the {@link SubscriptionManager}) associated with this entity, and capable + * of conveniently subscribing on behalf of that entity + */ + SubscriptionContext getSubscriptionContext(Entity entity); + + @Beta // method may move to an internal interface; brooklyn users should not need to call this directly + RebindManager getRebindManager(); + + /** + * @since 0.7.0 + */ + @Beta // method may move to an internal interface; brooklyn users should not need to call this directly + HighAvailabilityManager getHighAvailabilityManager(); + + /** + * Returns the ConfigMap (e.g. BrooklynProperties) applicable to this management context. + * Defaults to reading ~/.brooklyn/brooklyn.properties but configurable in the management context. + */ + StringConfigMap getConfig(); + + /** + * Whether the management context has been initialized and not yet terminated. + * This does not mean startup is entirely completed. See also {@link #isStartupComplete()}. + */ + // TODO should we replace this with isNotYetTerminated() ?? + // and perhaps introduce isFullyRunning() which does (isStartupComplete() && isRunning()), + // and/or move to a MgmtContextStatus subclass where errors can also be stored? + public boolean isRunning(); + + /** + * Whether all startup tasks have completed. Previous to this point the management context is still usable + * (and hence {@link #isRunning()} returns true immediately after construction) + * but some subsystems (e.g. persistence, OSGi, webapps, entities started at startup) + * may not be available until this returns true. + * <p> + * Also see {@link #isStartupComplete()}. + */ + @Beta // see comment on isRunning() as items might move to a status handler + public boolean isStartupComplete(); + + /** Record of configured locations and location resolvers */ + LocationRegistry getLocationRegistry(); + + /** Record of configured Brooklyn entities (and templates and policies) which can be loaded */ + BrooklynCatalog getCatalog(); + + /** Returns the class loader to be used to load items. + * Temporary routine while catalog supports classloader-based and OSGi-based classloading. */ + @Beta + ClassLoader getCatalogClassLoader(); + + LocationManager getLocationManager(); + + /** + * For controlling access to operations - can be queried to find if an operation is allowed. + * Callers should *not* cache the result of this method, but should instead always call + * again to get the {@link AccessController}. + */ + AccessController getAccessController(); + + /** + * Reloads locations from {@code brooklyn.properties}. Any changes will apply only to newly created applications + */ + void reloadBrooklynProperties(); + + /** + * Listener for {@code brooklyn.properties} reload events. + * + * @see {@link #raddPropertiesReloadListenerPropertiesReloadListener)} + * @see {@link #removePropertiesReloadListener(PropertiesReloadListener)} + */ + interface PropertiesReloadListener extends Serializable { + + /** Called when {@code brooklyn.properties} is reloaded. */ + void reloaded(); + + } + + /** + * Registers a listener to be notified when brooklyn.properties is reloaded + */ + void addPropertiesReloadListener(PropertiesReloadListener listener); + + /** + * Deregisters a listener from brooklyn.properties reload notifications + */ + void removePropertiesReloadListener(PropertiesReloadListener listener); + + /** + * Active entitlements checker instance. + */ + EntitlementManager getEntitlementManager(); + + /** As {@link #lookup(String, Class)} but not constraining the return type */ + public BrooklynObject lookup(String id); + + /** Finds an entity with the given ID known at this management context */ + // TODO in future support policies etc + public <T extends BrooklynObject> T lookup(String id, Class<T> type); + +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/2e2de8e4/api/src/main/java/org/apache/brooklyn/api/management/SubscriptionContext.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/org/apache/brooklyn/api/management/SubscriptionContext.java b/api/src/main/java/org/apache/brooklyn/api/management/SubscriptionContext.java new file mode 100644 index 0000000..04ccd12 --- /dev/null +++ b/api/src/main/java/org/apache/brooklyn/api/management/SubscriptionContext.java @@ -0,0 +1,66 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.brooklyn.api.management; + +import java.util.Map; +import java.util.Set; + +import org.apache.brooklyn.api.entity.Entity; +import org.apache.brooklyn.api.entity.Group; +import org.apache.brooklyn.api.event.Sensor; +import org.apache.brooklyn.api.event.SensorEvent; +import org.apache.brooklyn.api.event.SensorEventListener; + +/** + * This is the context through which an {@link Entity} can manage its subscriptions. + */ +public interface SubscriptionContext { + /** + * As {@link SubscriptionManager#subscribe(Map, Entity, Sensor, SensorEventListener)} with default subscription parameters for this context + */ + <T> SubscriptionHandle subscribe(Map<String, Object> flags, Entity producer, Sensor<T> sensor, SensorEventListener<? super T> listener); + + /** @see #subscribe(Map, Entity, Sensor, SensorEventListener) */ + <T> SubscriptionHandle subscribe(Entity producer, Sensor<T> sensor, SensorEventListener<? super T> listener); + + /** @see #subscribe(Map, Entity, Sensor, SensorEventListener) */ + <T> SubscriptionHandle subscribeToChildren(Map<String, Object> flags, Entity parent, Sensor<T> sensor, SensorEventListener<? super T> listener); + + /** @see #subscribe(Map, Entity, Sensor, SensorEventListener) */ + <T> SubscriptionHandle subscribeToChildren(Entity parent, Sensor<T> sensor, SensorEventListener<? super T> listener); + + /** @see #subscribe(Map, Entity, Sensor, SensorEventListener) */ + <T> SubscriptionHandle subscribeToMembers(Map<String, Object> flags, Group parent, Sensor<T> sensor, SensorEventListener<? super T> listener); + + /** @see #subscribe(Map, Entity, Sensor, SensorEventListener) */ + <T> SubscriptionHandle subscribeToMembers(Group parent, Sensor<T> sensor, SensorEventListener<? super T> listener); + + /** @see SubscriptionManager#unsubscribe(SubscriptionHandle) */ + boolean unsubscribe(SubscriptionHandle subscriptionId); + + /** causes all subscriptions to be deregistered + * @return number of subscriptions removed */ + int unsubscribeAll(); + + /** @see SubscriptionManager#publish(SensorEvent) */ + <T> void publish(SensorEvent<T> event); + + /** Return the subscriptions associated with this context */ + Set<SubscriptionHandle> getSubscriptions(); +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/2e2de8e4/api/src/main/java/org/apache/brooklyn/api/management/SubscriptionHandle.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/org/apache/brooklyn/api/management/SubscriptionHandle.java b/api/src/main/java/org/apache/brooklyn/api/management/SubscriptionHandle.java new file mode 100644 index 0000000..72a1609 --- /dev/null +++ b/api/src/main/java/org/apache/brooklyn/api/management/SubscriptionHandle.java @@ -0,0 +1,27 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.brooklyn.api.management; + +/** + * A "receipt" returned by {@link SubscriptionContext} and {@link SubscriptionManager}'s {@code subscribe()} + * methods. It can be used to unsubscribe - see {@link SubscriptionContext#unsubscribe(SubscriptionHandle)} + * and {@link SubscriptionManager#unsubscribe(SubscriptionHandle)}. + */ +public interface SubscriptionHandle { +} http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/2e2de8e4/api/src/main/java/org/apache/brooklyn/api/management/SubscriptionManager.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/org/apache/brooklyn/api/management/SubscriptionManager.java b/api/src/main/java/org/apache/brooklyn/api/management/SubscriptionManager.java new file mode 100644 index 0000000..520dbc9 --- /dev/null +++ b/api/src/main/java/org/apache/brooklyn/api/management/SubscriptionManager.java @@ -0,0 +1,112 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.brooklyn.api.management; + +import java.util.Map; +import java.util.Set; + +import org.apache.brooklyn.api.entity.Entity; +import org.apache.brooklyn.api.entity.Group; +import org.apache.brooklyn.api.event.Sensor; +import org.apache.brooklyn.api.event.SensorEvent; +import org.apache.brooklyn.api.event.SensorEventListener; + +/** + * The management interface for subscriptions. + * + * Different implementations will handle entities subscribing and unsubscribing to {@link SensorEvent}s + * and their delivery. + * + * @see SubscriptionContext + */ +public interface SubscriptionManager { + /** + * Subscribe to {@link Sensor} data changes and events on a given {@link Entity}, supplying the {@link SensorEventListener} + * to invoke when they occur. + * + * The method returns an id which can be used to {@link #unsubscribe(SubscriptionHandle)} later. + * <p> + * The listener callback is in-order single-threaded and synchronized on this object. The flags + * parameters can include the following: + * <ul> + * <li>subscriber - object to identify the subscriber (e.g. entity, or console session uid) + * <li><i>in future</i> - control parameters for the subscription (period, minimum delta for updates, etc) + * </ul> + * + * @param flags optional parameters to be associated with the subscription + * @param producer entity to listen to, or null to listen to all entities + * @param sensor sensor channel of events to listen to, or null for all sensors from the given producer(s) + * @param listener callback to invoke when an event occurs + * @return an id for this subscription + * + * @see #unsubscribe(SubscriptionHandle) + */ + <T> SubscriptionHandle subscribe(Map<String, Object> flags, Entity producer, Sensor<T> sensor, SensorEventListener<? super T> listener); + + /** @see #subscribe(Map, Entity, Sensor, SensorEventListener) */ + <T> SubscriptionHandle subscribe(Entity producer, Sensor<T> sensor, SensorEventListener<? super T> listener); + + /** + * Subscribe to {@link Sensor} data changes and events on all children of a given {@link Entity}, supplying the + * {@link SensorEventListener} to invoke when they occur. + * + * The subscriptions will be created recursively for all children, and the same listener callback will be invoked for each + * sensor datum. The semantics are otherwise identical to the {@link #subscribe(Map, Entity, Sensor, SensorEventListener)} method. + * + * @see #subscribe(Map, Entity, Sensor, SensorEventListener) + */ + <T> SubscriptionHandle subscribeToChildren(Map<String, Object> flags, Entity parent, Sensor<T> sensor, SensorEventListener<? super T> listener); + + /** @see #subscribeToChildren(Map, Entity, Sensor, SensorEventListener) */ + <T> SubscriptionHandle subscribeToChildren(Entity parent, Sensor<T> sensor, SensorEventListener<? super T> listener); + + /** + * Subscribe to {@link Sensor} data changes and events on all members of a given {@link Group}, supplying the + * {@link SensorEventListener} to invoke when they occur. + * + * The subscriptions will be created recursively for all children, and the same listener callback will be invoked for each + * sensor datum. The semantics are otherwise identical to the {@link #subscribe(Map, Entity, Sensor, SensorEventListener)} method. + * + * @see #subscribe(Map, Entity, Sensor, SensorEventListener) + */ + <T> SubscriptionHandle subscribeToMembers(Map<String, Object> flags, Group parent, Sensor<T> sensor, SensorEventListener<? super T> listener); + + /** @see #subscribeToMembers(Map, Group, Sensor, SensorEventListener) */ + <T> SubscriptionHandle subscribeToMembers(Group parent, Sensor<T> sensor, SensorEventListener<? super T> listener); + + /** + * Unsubscribe the given subscription id. + * + * @return true if such a subscription was present (and it will now be removed) + * + * @see #subscribe(Map, Entity, Sensor, SensorEventListener) + */ + boolean unsubscribe(SubscriptionHandle subscriptionId); + + /** + * Deliver a {@link SensorEvent} to all subscribed listeners. + */ + <T> void publish(SensorEvent<T> event); + + /** Return the subscriptions requested by a given subscriber */ + Set<SubscriptionHandle> getSubscriptionsForSubscriber(Object subscriber); + + /** Return the subscriptions on a given source-sensor pair */ + Set<SubscriptionHandle> getSubscriptionsForEntitySensor(Entity source, Sensor<?> sensor); +}
