Thanks Andrus, constructing my own DataRowStore did the trick :).

For anyone stumbling across this thread, here’s a method that will do this for 
you.

        /**
         * Workaround for Cayenne not having an easy way to set the size of the 
snapshot cache in code.
         * It depends on the snapshotCache being lazily created, thus we can 
create a new cache before it has been accessed.
         * 
         * This will be fixed in a future version of Cayenne (4.0.M5 is current 
when this is written)
         */
        private static void setSizeOfSnapshotCache( DataDomain dataDomain, 
Integer size ) {
                Map<String,String> properties = dataDomain.getProperties();
                properties.put( DataRowStore.SNAPSHOT_CACHE_SIZE_PROPERTY, 
size.toString() );
                DataRowStore snapshotCache = new DataRowStore( 
dataDomain.getName(), properties, dataDomain.getEventManager() );
                dataDomain.setSharedSnapshotCache( snapshotCache );             
        }

Cheers,
- hugi


> On 21. feb. 2017, at 19:10, Andrus Adamchik <and...@objectstyle.org> wrote:
> 
> Hmm.. Custom modules used to override builder modules in the past. Looks like 
> this is no longer the case since M4 (and I no longer remember what was the 
> motivation for such reordering).
> 
> Anyways, since DataRowStore is initialized lazily, you can create 
> DataRowStore on your own after Cayenne startup and use 
> DataDomain.setSharedSnapshotCache(..). Not ideal, but should work.
> 
> Note to self:
> 
> * We need to port property-based init flow for DataDomain into DI.
> * SyntheticNodeDataDomainProvider should be folded in the main 
> DataDomainProvider (though we need to distinguish a case of "disconnected" 
> stack and a stack that has a known DataSource, and simply needs an implicit 
> DataNode).
> 
> Andrus
> 
>> On Feb 21, 2017, at 2:12 PM, Hugi Thordarson <h...@godurkodi.is> wrote:
>> 
>> I created a custom DataDomainProvider, but it never gets used. The reason is 
>> that I’m using serverRuntimeBuilder.dataSource( DataSource ) to set the 
>> DataSource. This causes ServerRuntimeBuilder to set it’s dataSourceFactory, 
>> which then causes it to bind it’s own SyntheticNodeDataDomainProvider when 
>> it invokes it’s builderModules() method at build time, overriding my own 
>> DataDomainProvider.
>> 
>> <PastedGraphic-1.png>
>> 
>> How best to get around this?
>> 
>> - hugi
>> 
>> 
>> 
>>> On 17. feb. 2017, at 06:59, Andrus Adamchik <and...@objectstyle.org> wrote:
>>> 
>>> Only properties defined in org.apache.cayenne.configuration.Constants are 
>>> recognized by DI. DataRowStore.SNAPSHOT_CACHE_SIZE_PROPERTY is not one of 
>>> them. 
>>> 
>>> We were actually going to bring the whole DataDomain configuration process 
>>> into DI form the Modeler (perhaps right after M5). For now your best bet is 
>>> overriding DataDomainProvider.
>>> 
>>> Andrus
>>> 
>>> 
>>> 
>>>> On Feb 16, 2017, at 11:06 PM, Hugi Thordarson <h...@karlmenn.is> wrote:
>>>> 
>>>> Can’t do that, the signature for put is ( String, <? extends String> ).
>>>> I've also tried a different method:
>>>> 
>>>> builder.addModule( binder -> binder.bindMap( Constants.PROPERTIES_MAP 
>>>> ).put( DataRowStore.SNAPSHOT_CACHE_SIZE_PROPERTY, 123456 ) );
>>>> 
>>>> …where I used an int, doesn’t work either.
>>>> 
>>>> - hugi
>>>> 
>>>> 
>>>>> On 16. feb. 2017, at 20:03, John Huss <johnth...@gmail.com> wrote:
>>>>> 
>>>>> Maybe try using an int instead of the string "123456"?
>>>>> 
>>>>> On Thu, Feb 16, 2017 at 2:00 PM Hugi Thordarson <h...@karlmenn.is> wrote:
>>>>> 
>>>>>> Hi all,
>>>>>> I’m attempting to change the size of the snapshot cache in code (not in
>>>>>> the project xml-file). It seems this should be set through a property,
>>>>>> right? Well, I’m just not managing to set properties in code. I’ve set
>>>>>> properties in code previously using something like the below, but they 
>>>>>> just
>>>>>> don’t seem to take?
>>>>>> 
>>>>>> builder.addModule( binder -> ServerModule.contributeProperties( binder
>>>>>> ).put( DataRowStore.SNAPSHOT_CACHE_SIZE_PROPERTY, "123456" ) )
>>>>>> 
>>>>>> Any ideas?
>>>>>> 
>>>>>> - hugi
>>>> 
>>> 
>> 
> 

Reply via email to