Powered by powerful database abstraction layer and for asynchronous communication
Configuration
To configure Connection follow instruction for given integration
Message Channel
To create Dbal Backed , we need to create .
class MessagingConfiguration
{
#[ServiceContext]
public function orderChannel()
{
return DbalBackedMessageChannelBuilder::create("orders");
}
}
Now orders channel will be available in our Messaging System.
Message Channel Configuration
DbalBackedMessageChannelBuilder::create("orders")
->withAutoDeclare(false) // do not auto declare queue
->withDefaultTimeToLive(1000) // limit TTL of messages
Transactions
class DbalConfiguration
{
#[ServiceContext]
public function registerTransactions() : array
{
return [
DbalConfiguration::createWithDefaults()
->withTransactionOnCommandBus(true) // Turn for running command bus
->withTransactionOnAsynchronousEndpoints(true) // for all asynchronous endpoints
->withoutTransactionOnAsynchronousEndpoints(["notifications"]) // turn off for list of asynchronous endpoint
->withDefaultConnectionReferenceNames([
"Enqueue\Dbal\DbalConnectionFactory",
"AnotherDbalConnectionFactory"
])
];
}
}
If we disable global transactions, it make sense to enable transactions on specific endpoint.
To do it all we need to do is to mark it with Ecotone\Dbal\DbalTransaction\DbalTransaction attribute.
#[CommandHandler]
#[DbalTransaction]
public function sellProduct(SellProduct $command) : void
{
// do something with $command
}
Document Store
Standard Aggregate Repository
#[ServiceContext]
public function getDbalConfiguration(): DbalConfiguration
{
return DbalConfiguration::createWithDefaults()
->withDocumentStore(enableDocumentStoreAggregateRepository: true);
}
In Memory Document Store
For testing purposes you may want to enable In Memory implementation.
#[ServiceContext]
public function configuration()
{
return DbalConfiguration::createWithDefaults()
->withDocumentStore(inMemoryDocumentStore: true);
}
Document Store related Aggregates
To enable specific Aggregates for Document Store Repository:
#[ServiceContext]
public function getDbalConfiguration(): DbalConfiguration
{
return DbalConfiguration::createWithDefaults()
->withDocumentStore(
enableDocumentStoreAggregateRepository: true,
documentStoreRelatedAggregates: [Ticket::class]
);
}
Table initialization
Table will be create for you, however this comes with extra SQL cost, to verify before adding new document, if table exists.
After releasing you may want to disable the check, as you know, that the table already exists.
#[ServiceContext]
public function getDbalConfiguration(): DbalConfiguration
{
return DbalConfiguration::createWithDefaults()
->withDocumentStore(initializeDatabaseTable: false);
}
By default Ecotoneenables transactions for all and Command Bus. You may use of to turn off this configuration. You may also add more connections to be handled.
DBAL provides support for , which is enabled by default.
Every document is stored inside the "ecotone_document_store" table.