diff --git a/packages/Ecotone/src/Lite/EcotoneLite.php b/packages/Ecotone/src/Lite/EcotoneLite.php index b6a28fd34..b34450a6f 100644 --- a/packages/Ecotone/src/Lite/EcotoneLite.php +++ b/packages/Ecotone/src/Lite/EcotoneLite.php @@ -17,7 +17,6 @@ use Ecotone\Messaging\Config\ModulePackageList; use Ecotone\Messaging\Config\ProxyGenerator; use Ecotone\Messaging\Config\ServiceConfiguration; -use Ecotone\Messaging\Config\StubConfiguredMessagingSystem; use Ecotone\Messaging\Handler\ClassDefinition; use Ecotone\Messaging\Handler\TypeDescriptor; use Ecotone\Messaging\InMemoryConfigurationVariableService; @@ -181,9 +180,11 @@ private static function prepareConfiguration(ContainerInterface|array $container } } - $messagingSystem = $messagingConfiguration->buildMessagingSystemFromConfiguration( - new PsrContainerReferenceSearchService($container, ['logger' => new NullLogger(), ConfiguredMessagingSystem::class => new StubConfiguredMessagingSystem()]) - ); + $referenceSearchService = new PsrContainerReferenceSearchService($container, ['logger' => new NullLogger()]); + + $messagingSystem = $messagingConfiguration->buildMessagingSystemFromConfiguration($referenceSearchService); + + $referenceSearchService->setConfiguredMessagingSystem($messagingSystem); if ($allowGatewaysToBeRegisteredInContainer) { $container->set(ConfiguredMessagingSystem::class, $messagingSystem); diff --git a/packages/Ecotone/src/Lite/EcotoneLiteConfiguration.php b/packages/Ecotone/src/Lite/EcotoneLiteConfiguration.php index 4c4f538eb..6220a4172 100644 --- a/packages/Ecotone/src/Lite/EcotoneLiteConfiguration.php +++ b/packages/Ecotone/src/Lite/EcotoneLiteConfiguration.php @@ -7,7 +7,6 @@ use Ecotone\Messaging\Config\ConfiguredMessagingSystem; use Ecotone\Messaging\Config\MessagingSystemConfiguration; use Ecotone\Messaging\Config\ServiceConfiguration; -use Ecotone\Messaging\Config\StubConfiguredMessagingSystem; use Ecotone\Messaging\Handler\Logger\EchoLogger; use Ecotone\Messaging\InMemoryConfigurationVariableService; use Psr\Container\ContainerInterface; @@ -27,13 +26,16 @@ public static function create(string $rootProjectDirectoryPath, ContainerInterfa public static function createWithConfiguration(string $rootProjectDirectoryPath, ContainerInterface|GatewayAwareContainer $container, ServiceConfiguration $serviceConfiguration, array $configurationVariables, bool $useCachedVersion, array $classesToRegister = []): ConfiguredMessagingSystem { + $referenceSearchService = new PsrContainerReferenceSearchService($container, ['logger' => new EchoLogger()]); $configuredMessagingSystem = MessagingSystemConfiguration::prepare( realpath($rootProjectDirectoryPath), InMemoryConfigurationVariableService::create($configurationVariables), $serviceConfiguration, $useCachedVersion, $classesToRegister - )->buildMessagingSystemFromConfiguration(new PsrContainerReferenceSearchService($container, ['logger' => new EchoLogger(), ConfiguredMessagingSystem::class => new StubConfiguredMessagingSystem()])); + )->buildMessagingSystemFromConfiguration($referenceSearchService); + + $referenceSearchService->setConfiguredMessagingSystem($configuredMessagingSystem); if ($container instanceof GatewayAwareContainer) { foreach ($configuredMessagingSystem->getGatewayList() as $gatewayReference) { diff --git a/packages/Ecotone/src/Lite/PsrContainerReferenceSearchService.php b/packages/Ecotone/src/Lite/PsrContainerReferenceSearchService.php index e50ecc283..acb87c47c 100644 --- a/packages/Ecotone/src/Lite/PsrContainerReferenceSearchService.php +++ b/packages/Ecotone/src/Lite/PsrContainerReferenceSearchService.php @@ -4,6 +4,8 @@ namespace Ecotone\Lite; +use Ecotone\Messaging\Config\ConfiguredMessagingSystem; +use Ecotone\Messaging\Config\LazyConfiguredMessagingSystem; use Ecotone\Messaging\Handler\ReferenceNotFoundException; use Ecotone\Messaging\Handler\ReferenceSearchService; use Psr\Container\ContainerInterface; @@ -13,10 +15,13 @@ class PsrContainerReferenceSearchService implements ReferenceSearchService private ContainerInterface $container; private array $defaults; + private LazyConfiguredMessagingSystem $lazyConfiguredMessagingSystem; + public function __construct(ContainerInterface $container, array $defaults = []) { $this->container = $container; $this->defaults = $defaults; + $this->lazyConfiguredMessagingSystem = new LazyConfiguredMessagingSystem(); } /** @@ -28,6 +33,9 @@ public function get(string $reference): object if (array_key_exists($reference, $this->defaults)) { return $this->defaults[$reference]; } + if ($reference === ConfiguredMessagingSystem::class) { + return $this->lazyConfiguredMessagingSystem; + } if ($this->container->has($reference . self::POSSIBLE_REFERENCE_SUFFIX)) { return $this->container->get($reference . self::POSSIBLE_REFERENCE_SUFFIX); @@ -51,4 +59,14 @@ public function has(string $referenceName): bool return true; } + + public function setConfiguredMessagingSystem(ConfiguredMessagingSystem $configuredMessagingSystem): void + { + $this->lazyConfiguredMessagingSystem->replaceWith($configuredMessagingSystem); + } + + public static function getServiceNameWithSuffix(string $referenceName) + { + return $referenceName . self::POSSIBLE_REFERENCE_SUFFIX; + } } diff --git a/packages/Ecotone/src/Messaging/Config/LazyConfiguredMessagingSystem.php b/packages/Ecotone/src/Messaging/Config/LazyConfiguredMessagingSystem.php index dbdb3900f..1edea3d39 100644 --- a/packages/Ecotone/src/Messaging/Config/LazyConfiguredMessagingSystem.php +++ b/packages/Ecotone/src/Messaging/Config/LazyConfiguredMessagingSystem.php @@ -17,7 +17,9 @@ */ class LazyConfiguredMessagingSystem implements ConfiguredMessagingSystem { - public function __construct(private ContainerInterface $container) + private ?ConfiguredMessagingSystem $configuredMessagingSystem = null; + + public function __construct() { } @@ -48,9 +50,7 @@ public function run(string $endpointId, ?ExecutionPollingMetadata $executionPoll public function getServiceFromContainer(string $referenceName): object { - Assert::isTrue($this->container->has($referenceName), "Service with reference {$referenceName} does not exists"); - - return $this->container->get($referenceName); + return $this->getConfiguredSystem()->getServiceFromContainer($referenceName); } public function getCommandBus(): CommandBus @@ -90,11 +90,14 @@ public function runConsoleCommand(string $commandName, array $parameters): mixed public function replaceWith(ConfiguredMessagingSystem $messagingSystem): void { - $this->getConfiguredSystem()->replaceWith($messagingSystem); + $this->configuredMessagingSystem = $messagingSystem; } private function getConfiguredSystem(): ConfiguredMessagingSystem { - return $this->container->get(LazyConfiguredMessagingSystem::class); + if (!$this->configuredMessagingSystem) { + throw new \InvalidArgumentException("Configured messaging system was not set"); + } + return $this->configuredMessagingSystem; } } diff --git a/packages/Ecotone/src/Messaging/Config/StubConfiguredMessagingSystem.php b/packages/Ecotone/src/Messaging/Config/StubConfiguredMessagingSystem.php deleted file mode 100644 index ab3ae7cc5..000000000 --- a/packages/Ecotone/src/Messaging/Config/StubConfiguredMessagingSystem.php +++ /dev/null @@ -1,84 +0,0 @@ -withSkippedModulePackageNames(ModulePackageList::allPackages()) + ->withEnvironment("test") + ); + + $ecotone->runConsoleCommand("ecotone:list", []); + $this->expectNotToPerformAssertions(); + } +} \ No newline at end of file diff --git a/packages/Laravel/src/EcotoneProvider.php b/packages/Laravel/src/EcotoneProvider.php index ba3ca87be..660799086 100644 --- a/packages/Laravel/src/EcotoneProvider.php +++ b/packages/Laravel/src/EcotoneProvider.php @@ -2,6 +2,7 @@ namespace Ecotone\Laravel; +use Ecotone\Lite\PsrContainerReferenceSearchService; use const DIRECTORY_SEPARATOR; use Ecotone\Messaging\Config\ConfiguredMessagingSystem; @@ -166,15 +167,11 @@ function (ConfiguredMessagingSystem $configuredMessagingSystem) { $this->app->singleton( ConfiguredMessagingSystem::class, - function () { - return new LazyConfiguredMessagingSystem($this->app); - } - ); - - $this->app->singleton( - LazyConfiguredMessagingSystem::class, function () use ($configuration) { - return $configuration->buildMessagingSystemFromConfiguration(new LaravelReferenceSearchService($this->app)); + $referenceSearchService = new PsrContainerReferenceSearchService($this->app); + $messagingSystem = $configuration->buildMessagingSystemFromConfiguration($referenceSearchService); + $referenceSearchService->setConfiguredMessagingSystem($messagingSystem); + return $messagingSystem; } ); } diff --git a/packages/Laravel/src/LaravelReferenceSearchService.php b/packages/Laravel/src/LaravelReferenceSearchService.php deleted file mode 100644 index 9ba072126..000000000 --- a/packages/Laravel/src/LaravelReferenceSearchService.php +++ /dev/null @@ -1,29 +0,0 @@ -application = $application; - } - - public function get(string $reference): object - { - return $this->application->get($reference); - } - - public function has(string $referenceName): bool - { - return $this->application->has($referenceName); - } -} diff --git a/packages/Laravel/tests/LaravelReferenceSearchServiceTest.php b/packages/Laravel/tests/LaravelReferenceSearchServiceTest.php deleted file mode 100644 index 998b0f45d..000000000 --- a/packages/Laravel/tests/LaravelReferenceSearchServiceTest.php +++ /dev/null @@ -1,39 +0,0 @@ -getMockBuilder(Application::class)->getMock(); - $mockContainer - ->expects($this->once()) - ->method('get') - ->with('config') - ->willReturn($this->app->get('config')); - - $service = new LaravelReferenceSearchService($mockContainer); - $service->get('config'); - } - - public function test_it_checks_for_items_in_the_laravel_container() - { - $mockContainer = $this->getMockBuilder(Application::class)->getMock(); - $mockContainer - ->expects($this->once()) - ->method('has') - ->with('config') - ->willReturn($this->app->has('config')); - - $service = new LaravelReferenceSearchService($mockContainer); - $service->has('config'); - } -} diff --git a/packages/Symfony/DepedencyInjection/Compiler/EcotoneCompilerPass.php b/packages/Symfony/DepedencyInjection/Compiler/EcotoneCompilerPass.php index 32abf8636..e0a633dae 100644 --- a/packages/Symfony/DepedencyInjection/Compiler/EcotoneCompilerPass.php +++ b/packages/Symfony/DepedencyInjection/Compiler/EcotoneCompilerPass.php @@ -2,6 +2,7 @@ namespace Ecotone\SymfonyBundle\DepedencyInjection\Compiler; +use Ecotone\Lite\PsrContainerReferenceSearchService; use Ecotone\Messaging\Config\Configuration; use Ecotone\Messaging\Config\MessagingSystemConfiguration; use Ecotone\Messaging\Config\ProxyGenerator; @@ -111,10 +112,13 @@ public function process(ContainerBuilder $container) $container->setDefinition(CacheCleaner::class, $definition); $definition = new Definition(); - $definition->setClass(SymfonyReferenceSearchService::class); + $definition->setClass(PsrContainerReferenceSearchService::class); $definition->setPublic(true); $definition->addArgument(new Reference('service_container')); - $container->setDefinition('symfonyReferenceSearchService', $definition); + $container->setDefinition(ReferenceSearchService::class, $definition); + + // TODO: Remove this alias used for backward compatibility ? + $container->setAlias('symfonyReferenceSearchService', ReferenceSearchService::class)->setPublic(true); foreach ($messagingConfiguration->getRegisteredGateways() as $gatewayProxyBuilder) { $definition = new Definition(); @@ -136,7 +140,7 @@ public function process(ContainerBuilder $container) continue; } - $alias = $container->setAlias(SymfonyReferenceSearchService::getServiceNameWithSuffix($requiredReference), $requiredReference); + $alias = $container->setAlias(PsrContainerReferenceSearchService::getServiceNameWithSuffix($requiredReference), $requiredReference); if ($alias) { $alias->setPublic(true); @@ -145,7 +149,7 @@ public function process(ContainerBuilder $container) foreach ($messagingConfiguration->getOptionalReferences() as $requiredReference) { if ($container->has($requiredReference)) { - $alias = $container->setAlias(SymfonyReferenceSearchService::getServiceNameWithSuffix($requiredReference), $requiredReference); + $alias = $container->setAlias(PsrContainerReferenceSearchService::getServiceNameWithSuffix($requiredReference), $requiredReference); if ($alias) { $alias->setPublic(true); diff --git a/packages/Symfony/DepedencyInjection/Compiler/SymfonyReferenceSearchService.php b/packages/Symfony/DepedencyInjection/Compiler/SymfonyReferenceSearchService.php deleted file mode 100644 index 746f4d3ec..000000000 --- a/packages/Symfony/DepedencyInjection/Compiler/SymfonyReferenceSearchService.php +++ /dev/null @@ -1,30 +0,0 @@ -container->get(self::getServiceNameWithSuffix($referenceName)); - } - - public function has(string $referenceName): bool - { - return $this->container->has(self::getServiceNameWithSuffix($referenceName)); - } - - public static function getServiceNameWithSuffix(string $referenceName): string - { - return $referenceName . self::REFERENCE_SUFFIX; - } -} diff --git a/packages/Symfony/SymfonyBundle/EcotoneSymfonyBundle.php b/packages/Symfony/SymfonyBundle/EcotoneSymfonyBundle.php index eaffe6b6d..5eb041cea 100644 --- a/packages/Symfony/SymfonyBundle/EcotoneSymfonyBundle.php +++ b/packages/Symfony/SymfonyBundle/EcotoneSymfonyBundle.php @@ -3,15 +3,14 @@ namespace Ecotone\SymfonyBundle; use Ecotone\Messaging\Config\ConfiguredMessagingSystem; -use Ecotone\Messaging\Config\LazyConfiguredMessagingSystem; use Ecotone\Messaging\Handler\ExpressionEvaluationService; +use Ecotone\Messaging\Handler\ReferenceSearchService; use Ecotone\Messaging\Handler\SymfonyExpressionEvaluationAdapter; use Ecotone\SymfonyBundle\DepedencyInjection\Compiler\EcotoneCompilerPass; use Ecotone\SymfonyBundle\DepedencyInjection\EcotoneExtension; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Definition; use Symfony\Component\DependencyInjection\Extension\ExtensionInterface; -use Symfony\Component\DependencyInjection\Reference; use Symfony\Component\ExpressionLanguage\ExpressionLanguage; use Symfony\Component\HttpKernel\Bundle\Bundle; @@ -22,6 +21,9 @@ */ class EcotoneSymfonyBundle extends Bundle { + /** + * @deprecated use ConfiguredMessagingSystem::class instead + */ public const CONFIGURED_MESSAGING_SYSTEM = ConfiguredMessagingSystem::class; public const APPLICATION_CONFIGURATION_CONTEXT = 'messaging_system_application_context'; @@ -31,17 +33,11 @@ public function build(ContainerBuilder $container) $this->setUpExpressionLanguage($container); - $definition = new Definition(); - $definition->setClass(LazyConfiguredMessagingSystem::class); - $definition->addArgument(new Reference('service_container')); - $definition->setPublic(true); - $container->setDefinition(ConfiguredMessagingSystem::class, $definition); - $definition = new Definition(); $definition->setClass(ConfiguredMessagingSystem::class); $definition->setSynthetic(true); $definition->setPublic(true); - $container->setDefinition(LazyConfiguredMessagingSystem::class, $definition); + $container->setDefinition(ConfiguredMessagingSystem::class, $definition); } /** @@ -67,9 +63,11 @@ public function boot() { $configuration = EcotoneCompilerPass::getMessagingConfiguration($this->container, true); - $messagingSystem = $configuration->buildMessagingSystemFromConfiguration($this->container->get('symfonyReferenceSearchService')); + $referenceSearchService = $this->container->get(ReferenceSearchService::class); + $messagingSystem = $configuration->buildMessagingSystemFromConfiguration($referenceSearchService); + $referenceSearchService->setConfiguredMessagingSystem($messagingSystem); - $this->container->set(LazyConfiguredMessagingSystem::class, $messagingSystem); + $this->container->set(ConfiguredMessagingSystem::class, $messagingSystem); } public function getContainerExtension(): ?ExtensionInterface