CollaborationPersistenceConfiguration.java
package org.hammer.audio.app;
import java.util.Objects;
import org.hammer.audio.infrastructure.workflow.collaboration.store.CollaborationPersistenceEntities;
import org.hammer.audio.infrastructure.workflow.collaboration.store.HibernateWorkflowOutboxRetentionStore;
import org.hammer.audio.infrastructure.workflow.collaboration.store.HibernateWorkflowOutboxStore;
import org.hammer.audio.infrastructure.workflow.collaboration.store.HibernateWorkflowSessionStateStore;
import org.hammer.audio.workflow.collaboration.retention.WorkflowOutboxRetentionStore;
import org.hammer.audio.workflow.collaboration.store.WorkflowOutboxStore;
import org.hammer.audio.workflow.collaboration.store.WorkflowSessionStateStore;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/** Wires Audio Analyzer collaboration entities into the shared Hibernate persistence context. */
@Configuration
@ConditionalOnProperty(name = "workbench.persistence.mode", havingValue = "hibernate")
public class CollaborationPersistenceConfiguration {
/** Registers application-owned collaboration mappings alongside shared JGit mappings. */
@Bean
public WorkflowPersistenceEntityContributor collaborationPersistenceEntities() {
return CollaborationPersistenceEntities::annotatedClasses;
}
/** Creates the durable collaboration state store over the shared application SessionFactory. */
@Bean
public WorkflowSessionStateStore workflowSessionStateStore(
@Qualifier("workflowPersistenceSessionFactory") SessionFactory sessionFactory) {
return new HibernateWorkflowSessionStateStore(
Objects.requireNonNull(sessionFactory, "sessionFactory"));
}
/** Creates leased outbox persistence over the same shared application SessionFactory. */
@Bean
public WorkflowOutboxStore workflowOutboxStore(
@Qualifier("workflowPersistenceSessionFactory") SessionFactory sessionFactory) {
return new HibernateWorkflowOutboxStore(
Objects.requireNonNull(sessionFactory, "sessionFactory"));
}
/** Creates conservative published-outbox retention over the shared SessionFactory. */
@Bean
public WorkflowOutboxRetentionStore workflowOutboxRetentionStore(
@Qualifier("workflowPersistenceSessionFactory") SessionFactory sessionFactory) {
return new HibernateWorkflowOutboxRetentionStore(
Objects.requireNonNull(sessionFactory, "sessionFactory"));
}
}