Search in sources :

Example 1 with DataChannel

use of org.apache.cayenne.DataChannel in project cayenne by apache.

the class CommitLogFilter method onSync.

@Override
public GraphDiff onSync(ObjectContext originatingContext, GraphDiff beforeDiff, int syncType, DataChannelFilterChain filterChain) {
    // process commits only; skip rollback
    if (syncType != DataChannel.FLUSH_CASCADE_SYNC && syncType != DataChannel.FLUSH_NOCASCADE_SYNC) {
        return filterChain.onSync(originatingContext, beforeDiff, syncType);
    }
    // don't collect changes if there are no listeners
    if (listeners.isEmpty()) {
        return filterChain.onSync(originatingContext, beforeDiff, syncType);
    }
    MutableChangeMap changes = new MutableChangeMap();
    // passing DataDomain, not ObjectContext to speed things up
    // and avoid capturing changed state when fetching snapshots
    DataChannel channel = originatingContext.getChannel();
    beforeCommit(changes, channel, beforeDiff);
    GraphDiff afterDiff = filterChain.onSync(originatingContext, beforeDiff, syncType);
    afterCommit(changes, channel, beforeDiff, afterDiff);
    notifyListeners(originatingContext, changes);
    return afterDiff;
}
Also used : DataChannel(org.apache.cayenne.DataChannel) GraphDiff(org.apache.cayenne.graph.GraphDiff) MutableChangeMap(org.apache.cayenne.commitlog.model.MutableChangeMap)

Example 2 with DataChannel

use of org.apache.cayenne.DataChannel in project cayenne by apache.

the class ServerModule method configure.

public void configure(Binder binder) {
    // configure global stack properties
    contributeProperties(binder).put(Constants.SERVER_MAX_ID_QUALIFIER_SIZE_PROPERTY, String.valueOf(DEFAULT_MAX_ID_QUALIFIER_SIZE));
    contributeProperties(binder).put(Constants.SERVER_CONTEXTS_SYNC_PROPERTY, String.valueOf(false));
    binder.bind(JdbcEventLogger.class).to(Slf4jJdbcEventLogger.class);
    binder.bind(ClassLoaderManager.class).to(DefaultClassLoaderManager.class);
    binder.bind(AdhocObjectFactory.class).to(DefaultAdhocObjectFactory.class);
    // configure known DbAdapter detectors in reverse order of popularity.
    // Users can add their own to install custom adapters automatically
    contributeAdapterDetectors(binder).add(FirebirdSniffer.class).add(OpenBaseSniffer.class).add(FrontBaseSniffer.class).add(IngresSniffer.class).add(SQLiteSniffer.class).add(DB2Sniffer.class).add(H2Sniffer.class).add(HSQLDBSniffer.class).add(SybaseSniffer.class).add(DerbySniffer.class).add(SQLServerSniffer.class).add(OracleSniffer.class).add(PostgresSniffer.class).add(MySQLSniffer.class).add(MariaDBSniffer.class);
    // installing Pk for adapters
    binder.bind(PkGeneratorFactoryProvider.class).to(PkGeneratorFactoryProvider.class);
    binder.bind(PkGenerator.class).to(JdbcPkGenerator.class);
    // set PkGenerators for current Adapters
    contributePkGenerators(binder).put(DB2Adapter.class.getName(), DB2PkGenerator.class).put(DerbyAdapter.class.getName(), DerbyPkGenerator.class).put(FrontBaseAdapter.class.getName(), FrontBasePkGenerator.class).put(H2Adapter.class.getName(), H2PkGenerator.class).put(IngresAdapter.class.getName(), IngresPkGenerator.class).put(MySQLAdapter.class.getName(), MySQLPkGenerator.class).put(OpenBaseAdapter.class.getName(), OpenBasePkGenerator.class).put(OracleAdapter.class.getName(), OraclePkGenerator.class).put(Oracle8Adapter.class.getName(), OraclePkGenerator.class).put(PostgresAdapter.class.getName(), PostgresPkGenerator.class).put(SQLServerAdapter.class.getName(), SybasePkGenerator.class).put(SybaseAdapter.class.getName(), SybasePkGenerator.class);
    // configure a filter chain with only one TransactionFilter as default
    contributeDomainFilters(binder);
    contributeDomainQueryFilters(binder);
    contributeDomainSyncFilters(binder).add(TransactionFilter.class);
    // init listener list
    contributeDomainListeners(binder);
    // configure extended types
    contributeDefaultTypes(binder).add(new VoidType()).add(new BigDecimalType()).add(new BooleanType()).add(new ByteType(false)).add(new CharType(false, true)).add(new DoubleType()).add(new FloatType()).add(new IntegerType()).add(new LongType()).add(new ShortType(false)).add(new ByteArrayType(false, true)).add(new DateType()).add(new TimeType()).add(new TimestampType()).add(new DurationType()).add(new UtilDateType()).add(new CalendarType<>(GregorianCalendar.class)).add(new CalendarType<>(Calendar.class)).add(GeoJsonType.class).add(WktType.class);
    contributeUserTypes(binder);
    contributeTypeFactories(binder).add(new InternalUnsupportedTypeFactory());
    // Custom ValueObjects types contribution
    contributeValueObjectTypes(binder).add(BigIntegerValueType.class).add(BigDecimalValueType.class).add(UUIDValueType.class).add(LocalDateValueType.class).add(LocalTimeValueType.class).add(LocalDateTimeValueType.class).add(PeriodValueType.class).add(CharacterValueType.class);
    binder.bind(ValueObjectTypeRegistry.class).to(DefaultValueObjectTypeRegistry.class);
    binder.bind(ValueComparisonStrategyFactory.class).to(DefaultValueComparisonStrategyFactory.class);
    // configure explicit configurations
    contributeProjectLocations(binder);
    binder.bind(ConfigurationNameMapper.class).to(DefaultConfigurationNameMapper.class);
    binder.bind(EventManager.class).toProvider(EventManagerProvider.class);
    binder.bind(QueryCache.class).toProvider(MapQueryCacheProvider.class);
    binder.bind(EventBridge.class).toProvider(NoopEventBridgeProvider.class);
    binder.bind(DataRowStoreFactory.class).to(DefaultDataRowStoreFactory.class);
    // a service to provide the main stack DataDomain
    binder.bind(DataDomain.class).toProvider(DataDomainProvider.class);
    binder.bind(DataNodeFactory.class).to(DefaultDataNodeFactory.class);
    // will return DataDomain for request for a DataChannel
    binder.bind(DataChannel.class).toProvider(DomainDataChannelProvider.class);
    binder.bind(ObjectContextFactory.class).to(DataContextFactory.class);
    binder.bind(TransactionFactory.class).to(DefaultTransactionFactory.class);
    // a service to load project XML descriptors
    binder.bind(DataChannelDescriptorLoader.class).to(XMLDataChannelDescriptorLoader.class);
    binder.bind(DataChannelDescriptorMerger.class).to(DefaultDataChannelDescriptorMerger.class);
    // a service to load DataMap XML descriptors
    binder.bind(DataMapLoader.class).to(XMLDataMapLoader.class);
    // a locator of resources, such as XML descriptors
    binder.bind(ResourceLocator.class).to(ClassLoaderResourceLocator.class);
    binder.bind(Key.get(ResourceLocator.class, Constants.SERVER_RESOURCE_LOCATOR)).to(ClassLoaderResourceLocator.class);
    // a global properties object
    binder.bind(RuntimeProperties.class).to(DefaultRuntimeProperties.class);
    // a service to load DataSourceFactories. DelegatingDataSourceFactory
    // will attempt to find the actual worker factory dynamically on each
    // call depending on DataNodeDescriptor data and the environment
    binder.bind(DataSourceFactory.class).to(DelegatingDataSourceFactory.class);
    binder.bind(SchemaUpdateStrategyFactory.class).to(DefaultSchemaUpdateStrategyFactory.class);
    // a default DBAdapterFactory used to load custom and automatic DbAdapters
    binder.bind(DbAdapterFactory.class).to(DefaultDbAdapterFactory.class);
    // binding AshwoodEntitySorter without scope, as this is a stateful object and is
    // configured by the owning domain
    binder.bind(EntitySorter.class).to(AshwoodEntitySorter.class).withoutScope();
    binder.bind(BatchTranslatorFactory.class).to(DefaultBatchTranslatorFactory.class);
    binder.bind(SelectTranslatorFactory.class).to(DefaultSelectTranslatorFactory.class);
    // a default ObjectMapRetainStrategy used to create objects map for
    // ObjectStore
    binder.bind(ObjectMapRetainStrategy.class).to(DefaultObjectMapRetainStrategy.class);
    // a default ObjectStoreFactory used to create ObjectStores for contexts
    binder.bind(ObjectStoreFactory.class).to(DefaultObjectStoreFactory.class);
    binder.bind(TransactionManager.class).to(DefaultTransactionManager.class);
    binder.bind(RowReaderFactory.class).to(DefaultRowReaderFactory.class);
    binder.bind(SQLTemplateProcessor.class).to(CayenneSQLTemplateProcessor.class);
    binder.bind(TemplateContextFactory.class).to(DefaultTemplateContextFactory.class);
    binder.bind(HandlerFactory.class).to(DefaultHandlerFactory.class);
    binder.bind(DataChannelMetaData.class).to(NoopDataChannelMetaData.class);
    binder.bind(XMLReader.class).toProviderInstance(new XMLReaderProvider(false)).withoutScope();
    binder.bind(DataDomainFlushActionFactory.class).to(DefaultDataDomainFlushActionFactory.class);
    binder.bind(DbRowOpSorter.class).to(DefaultDbRowOpSorter.class);
}
Also used : SchemaUpdateStrategyFactory(org.apache.cayenne.access.dbsync.SchemaUpdateStrategyFactory) DefaultSchemaUpdateStrategyFactory(org.apache.cayenne.access.dbsync.DefaultSchemaUpdateStrategyFactory) QueryCache(org.apache.cayenne.cache.QueryCache) FrontBasePkGenerator(org.apache.cayenne.dba.frontbase.FrontBasePkGenerator) PeriodValueType(org.apache.cayenne.access.types.PeriodValueType) ValueComparisonStrategyFactory(org.apache.cayenne.reflect.generic.ValueComparisonStrategyFactory) DefaultValueComparisonStrategyFactory(org.apache.cayenne.reflect.generic.DefaultValueComparisonStrategyFactory) DefaultDataDomainFlushActionFactory(org.apache.cayenne.access.flush.DefaultDataDomainFlushActionFactory) DataDomainFlushActionFactory(org.apache.cayenne.access.flush.DataDomainFlushActionFactory) EventBridge(org.apache.cayenne.event.EventBridge) ByteType(org.apache.cayenne.access.types.ByteType) FloatType(org.apache.cayenne.access.types.FloatType) DataChannelDescriptorMerger(org.apache.cayenne.configuration.DataChannelDescriptorMerger) DefaultDataChannelDescriptorMerger(org.apache.cayenne.configuration.DefaultDataChannelDescriptorMerger) XMLReaderProvider(org.apache.cayenne.configuration.xml.XMLReaderProvider) HandlerFactory(org.apache.cayenne.configuration.xml.HandlerFactory) DefaultHandlerFactory(org.apache.cayenne.configuration.xml.DefaultHandlerFactory) NoopDataChannelMetaData(org.apache.cayenne.configuration.xml.NoopDataChannelMetaData) DataChannelMetaData(org.apache.cayenne.configuration.xml.DataChannelMetaData) UtilDateType(org.apache.cayenne.access.types.UtilDateType) UtilDateType(org.apache.cayenne.access.types.UtilDateType) DateType(org.apache.cayenne.access.types.DateType) DB2PkGenerator(org.apache.cayenne.dba.db2.DB2PkGenerator) DefaultRuntimeProperties(org.apache.cayenne.configuration.DefaultRuntimeProperties) RuntimeProperties(org.apache.cayenne.configuration.RuntimeProperties) DataRowStoreFactory(org.apache.cayenne.access.DataRowStoreFactory) DefaultDataRowStoreFactory(org.apache.cayenne.access.DefaultDataRowStoreFactory) ResourceLocator(org.apache.cayenne.resource.ResourceLocator) ClassLoaderResourceLocator(org.apache.cayenne.resource.ClassLoaderResourceLocator) DerbySniffer(org.apache.cayenne.dba.derby.DerbySniffer) OracleAdapter(org.apache.cayenne.dba.oracle.OracleAdapter) DataDomain(org.apache.cayenne.access.DataDomain) GeoJsonType(org.apache.cayenne.access.types.GeoJsonType) ShortType(org.apache.cayenne.access.types.ShortType) ObjectMapRetainStrategy(org.apache.cayenne.access.ObjectMapRetainStrategy) DefaultObjectMapRetainStrategy(org.apache.cayenne.access.DefaultObjectMapRetainStrategy) MySQLSniffer(org.apache.cayenne.dba.mysql.MySQLSniffer) DB2Sniffer(org.apache.cayenne.dba.db2.DB2Sniffer) ByteArrayType(org.apache.cayenne.access.types.ByteArrayType) TransactionManager(org.apache.cayenne.tx.TransactionManager) DefaultTransactionManager(org.apache.cayenne.tx.DefaultTransactionManager) DefaultTransactionFactory(org.apache.cayenne.tx.DefaultTransactionFactory) TransactionFactory(org.apache.cayenne.tx.TransactionFactory) XMLDataChannelDescriptorLoader(org.apache.cayenne.configuration.xml.XMLDataChannelDescriptorLoader) DataChannelDescriptorLoader(org.apache.cayenne.configuration.DataChannelDescriptorLoader) CharType(org.apache.cayenne.access.types.CharType) BigDecimalType(org.apache.cayenne.access.types.BigDecimalType) IngresSniffer(org.apache.cayenne.dba.ingres.IngresSniffer) VoidType(org.apache.cayenne.access.types.VoidType) DerbyAdapter(org.apache.cayenne.dba.derby.DerbyAdapter) LongType(org.apache.cayenne.access.types.LongType) IngresPkGenerator(org.apache.cayenne.dba.ingres.IngresPkGenerator) ObjectStoreFactory(org.apache.cayenne.configuration.ObjectStoreFactory) DefaultObjectStoreFactory(org.apache.cayenne.configuration.DefaultObjectStoreFactory) OraclePkGenerator(org.apache.cayenne.dba.oracle.OraclePkGenerator) DataMapLoader(org.apache.cayenne.configuration.DataMapLoader) XMLDataMapLoader(org.apache.cayenne.configuration.xml.XMLDataMapLoader) ValueObjectTypeRegistry(org.apache.cayenne.access.types.ValueObjectTypeRegistry) DefaultValueObjectTypeRegistry(org.apache.cayenne.access.types.DefaultValueObjectTypeRegistry) DerbyPkGenerator(org.apache.cayenne.dba.derby.DerbyPkGenerator) OraclePkGenerator(org.apache.cayenne.dba.oracle.OraclePkGenerator) H2PkGenerator(org.apache.cayenne.dba.h2.H2PkGenerator) PostgresPkGenerator(org.apache.cayenne.dba.postgres.PostgresPkGenerator) OpenBasePkGenerator(org.apache.cayenne.dba.openbase.OpenBasePkGenerator) MySQLPkGenerator(org.apache.cayenne.dba.mysql.MySQLPkGenerator) IngresPkGenerator(org.apache.cayenne.dba.ingres.IngresPkGenerator) DB2PkGenerator(org.apache.cayenne.dba.db2.DB2PkGenerator) JdbcPkGenerator(org.apache.cayenne.dba.JdbcPkGenerator) PkGenerator(org.apache.cayenne.dba.PkGenerator) FrontBasePkGenerator(org.apache.cayenne.dba.frontbase.FrontBasePkGenerator) SybasePkGenerator(org.apache.cayenne.dba.sybase.SybasePkGenerator) BigIntegerValueType(org.apache.cayenne.access.types.BigIntegerValueType) TimeType(org.apache.cayenne.access.types.TimeType) UUIDValueType(org.apache.cayenne.access.types.UUIDValueType) AshwoodEntitySorter(org.apache.cayenne.ashwood.AshwoodEntitySorter) Slf4jJdbcEventLogger(org.apache.cayenne.log.Slf4jJdbcEventLogger) JdbcEventLogger(org.apache.cayenne.log.JdbcEventLogger) ConfigurationNameMapper(org.apache.cayenne.configuration.ConfigurationNameMapper) DefaultConfigurationNameMapper(org.apache.cayenne.configuration.DefaultConfigurationNameMapper) TimestampType(org.apache.cayenne.access.types.TimestampType) H2Adapter(org.apache.cayenne.dba.h2.H2Adapter) DefaultTemplateContextFactory(org.apache.cayenne.template.DefaultTemplateContextFactory) TemplateContextFactory(org.apache.cayenne.template.TemplateContextFactory) DurationType(org.apache.cayenne.access.types.DurationType) OpenBasePkGenerator(org.apache.cayenne.dba.openbase.OpenBasePkGenerator) InternalUnsupportedTypeFactory(org.apache.cayenne.access.types.InternalUnsupportedTypeFactory) EventManager(org.apache.cayenne.event.EventManager) LocalTimeValueType(org.apache.cayenne.access.types.LocalTimeValueType) GregorianCalendar(java.util.GregorianCalendar) Calendar(java.util.Calendar) BooleanType(org.apache.cayenne.access.types.BooleanType) RowReaderFactory(org.apache.cayenne.access.jdbc.reader.RowReaderFactory) DefaultRowReaderFactory(org.apache.cayenne.access.jdbc.reader.DefaultRowReaderFactory) DefaultDbRowOpSorter(org.apache.cayenne.access.flush.operation.DefaultDbRowOpSorter) DbRowOpSorter(org.apache.cayenne.access.flush.operation.DbRowOpSorter) PostgresAdapter(org.apache.cayenne.dba.postgres.PostgresAdapter) ObjectContextFactory(org.apache.cayenne.configuration.ObjectContextFactory) IntegerType(org.apache.cayenne.access.types.IntegerType) MySQLAdapter(org.apache.cayenne.dba.mysql.MySQLAdapter) DataChannel(org.apache.cayenne.DataChannel) OpenBaseSniffer(org.apache.cayenne.dba.openbase.OpenBaseSniffer) SybasePkGenerator(org.apache.cayenne.dba.sybase.SybasePkGenerator) SybaseAdapter(org.apache.cayenne.dba.sybase.SybaseAdapter) DoubleType(org.apache.cayenne.access.types.DoubleType) DefaultBatchTranslatorFactory(org.apache.cayenne.access.translator.batch.DefaultBatchTranslatorFactory) BatchTranslatorFactory(org.apache.cayenne.access.translator.batch.BatchTranslatorFactory) DefaultClassLoaderManager(org.apache.cayenne.di.spi.DefaultClassLoaderManager) ClassLoaderManager(org.apache.cayenne.di.ClassLoaderManager) CayenneSQLTemplateProcessor(org.apache.cayenne.template.CayenneSQLTemplateProcessor) SQLTemplateProcessor(org.apache.cayenne.access.jdbc.SQLTemplateProcessor) DefaultAdhocObjectFactory(org.apache.cayenne.di.spi.DefaultAdhocObjectFactory) AdhocObjectFactory(org.apache.cayenne.di.AdhocObjectFactory) OracleSniffer(org.apache.cayenne.dba.oracle.OracleSniffer) HSQLDBSniffer(org.apache.cayenne.dba.hsqldb.HSQLDBSniffer) CalendarType(org.apache.cayenne.access.types.CalendarType) DefaultSelectTranslatorFactory(org.apache.cayenne.access.translator.select.DefaultSelectTranslatorFactory) SelectTranslatorFactory(org.apache.cayenne.access.translator.select.SelectTranslatorFactory)

Example 3 with DataChannel

use of org.apache.cayenne.DataChannel in project cayenne by apache.

the class ServerRuntimeTest method testGetObjectContext_CustomModule.

@Test
public void testGetObjectContext_CustomModule() {
    final ObjectContext context = new DataContext();
    final ObjectContextFactory factory = new ObjectContextFactory() {

        public ObjectContext createContext(DataChannel parent) {
            return context;
        }

        public ObjectContext createContext() {
            return context;
        }
    };
    Module module = binder -> binder.bind(ObjectContextFactory.class).toInstance(factory);
    ServerRuntime runtime = new ServerRuntime(Collections.singleton(module));
    assertSame(context, runtime.newContext());
    assertSame(context, runtime.newContext());
}
Also used : ArgumentMatchers.any(org.mockito.ArgumentMatchers.any) ObjectContext(org.apache.cayenne.ObjectContext) Arrays(java.util.Arrays) DataContext(org.apache.cayenne.access.DataContext) Module(org.apache.cayenne.di.Module) BaseTransaction(org.apache.cayenne.tx.BaseTransaction) EntityResolver(org.apache.cayenne.map.EntityResolver) Arrays.asList(java.util.Arrays.asList) GraphDiff(org.apache.cayenne.graph.GraphDiff) TransactionFactory(org.apache.cayenne.tx.TransactionFactory) Key(org.apache.cayenne.di.Key) Collection(java.util.Collection) Constants(org.apache.cayenne.configuration.Constants) Test(org.junit.Test) Mockito.when(org.mockito.Mockito.when) DataChannel(org.apache.cayenne.DataChannel) Query(org.apache.cayenne.query.Query) TransactionDescriptor(org.apache.cayenne.tx.TransactionDescriptor) List(java.util.List) ObjectContextFactory(org.apache.cayenne.configuration.ObjectContextFactory) EventManager(org.apache.cayenne.event.EventManager) QueryResponse(org.apache.cayenne.QueryResponse) TransactionalOperation(org.apache.cayenne.tx.TransactionalOperation) Assert(org.junit.Assert) Collections(java.util.Collections) Mockito.mock(org.mockito.Mockito.mock) DataContext(org.apache.cayenne.access.DataContext) DataChannel(org.apache.cayenne.DataChannel) ObjectContext(org.apache.cayenne.ObjectContext) Module(org.apache.cayenne.di.Module) ObjectContextFactory(org.apache.cayenne.configuration.ObjectContextFactory) Test(org.junit.Test)

Example 4 with DataChannel

use of org.apache.cayenne.DataChannel in project cayenne by apache.

the class HttpRemoteService method createServerSession.

/**
 * Creates a new ServerSession based on a shared DataChannel. Returned ServerSession
 * is stored in HttpSession for future reuse.
 *
 * @param name shared session name used to lookup a shared DataChannel.
 */
@Override
protected ServerSession createServerSession(String name) {
    if (name == null) {
        throw new IllegalArgumentException("Name is null for shared session.");
    }
    HttpSession httpSession = getSession(true);
    DataChannel channel;
    synchronized (sharedChannels) {
        channel = getSharedChannel(name);
        if (channel == null) {
            channel = createChannel();
            saveSharedChannel(name, channel);
            logger.debug("Starting a new shared channel: " + name);
        } else {
            logger.debug("Joining existing shared channel: " + name);
        }
    }
    RemoteSession remoteSession = createRemoteSession(httpSession.getId(), name, true);
    ServerSession serverSession = new ServerSession(remoteSession, channel);
    httpSession.setAttribute(SESSION_ATTRIBUTE, serverSession);
    return serverSession;
}
Also used : DataChannel(org.apache.cayenne.DataChannel) HttpSession(javax.servlet.http.HttpSession) RemoteSession(org.apache.cayenne.remote.RemoteSession)

Example 5 with DataChannel

use of org.apache.cayenne.DataChannel in project cayenne by apache.

the class HttpRemoteService method createServerSession.

/**
 * Creates a new ServerSession with a dedicated DataChannel. Returned ServerSession is
 * stored in HttpSession for future reuse.
 */
@Override
protected ServerSession createServerSession() {
    HttpSession httpSession = getSession(true);
    DataChannel channel = createChannel();
    RemoteSession remoteSession = createRemoteSession(httpSession.getId(), null, false);
    ServerSession serverSession = new ServerSession(remoteSession, channel);
    httpSession.setAttribute(SESSION_ATTRIBUTE, serverSession);
    return serverSession;
}
Also used : DataChannel(org.apache.cayenne.DataChannel) HttpSession(javax.servlet.http.HttpSession) RemoteSession(org.apache.cayenne.remote.RemoteSession)

Aggregations

DataChannel (org.apache.cayenne.DataChannel)20 Test (org.junit.Test)13 ObjectContextFactory (org.apache.cayenne.configuration.ObjectContextFactory)8 HashMap (java.util.HashMap)6 ObjectContext (org.apache.cayenne.ObjectContext)5 Module (org.apache.cayenne.di.Module)5 EventManager (org.apache.cayenne.event.EventManager)5 Collection (java.util.Collection)4 Injector (org.apache.cayenne.di.Injector)4 GraphDiff (org.apache.cayenne.graph.GraphDiff)4 ClientConnection (org.apache.cayenne.remote.ClientConnection)4 Assert (org.junit.Assert)4 Mockito.mock (org.mockito.Mockito.mock)4 Collections (java.util.Collections)3 HttpSession (javax.servlet.http.HttpSession)3 DataContext (org.apache.cayenne.access.DataContext)3 Constants (org.apache.cayenne.configuration.Constants)3 Binder (org.apache.cayenne.di.Binder)3 DIBootstrap (org.apache.cayenne.di.DIBootstrap)3 ClientChannel (org.apache.cayenne.remote.ClientChannel)3