Here is the initial setup that I quickly threw together along with some
example test cases. I feel like this might get a little complicated but I
think it's doable.

https://github.com/pollend/micronaut-ignite/blob/feature/rework-1/ignite-core/src/main/java/io/micronaut/ignite/configuration/DefaultIgniteConfiguration.java
along with some relevant test:
https://github.com/pollend/micronaut-ignite/blob/feature/rework-1/ignite-core/src/test/groovy/io/micronaut/ignite/IgniteConfigurationSpec.groovy#L55-L73

On Tue, Aug 18, 2020 at 11:49 PM Michael Pollind <mpoll...@gmail.com> wrote:

>
>
> The main reason why I was using the spring bean definition was mainly for
> convenience and I'm not sure what fields are the most relevant. Will have
> to be kind of specific since the configuration might get a little
> complicated. The other thing you can do is use
> https://docs.micronaut.io/latest/api/io/micronaut/core/convert/format/MapFormat.html
> which will just map fields and values and you can pass that to somewhere
> else to be manage it.
>
> so you will need to do something like this as follows:
>
> private final String name;
> @ConfigurationBuilder()
> private IgniteConfiguration igniteConfiguration = new IgniteConfiguration();
> @ConfigurationBuilder(value = "communicationSpi")
> private TcpCommunicationSpi communicationSpi = new TcpCommunicationSpi();
>
> [image: image.png]
>
>
> On Tue, Aug 18, 2020 at 11:05 PM Michael Pollind <mpoll...@gmail.com>
> wrote:
>
>> Its whatever is setup by default when the object is declared. I think we
>> will have to define multiple ConfigurationBuilders If i'm not mistaken for
>> the IgniteConfiguration.  you don't need to provide the name since that is
>> provided by the key for each configuration under EachProperty. The name is
>> the qualified name that refers to that bean and also the same qualifier for
>> the Ignite instance. For the most part will just use the primary bean for
>> most part. I think you can only have one cache instance active at a time.
>> The current way I have it setup is the primary bean is used by default so
>> you won't be able to use micronaut-cache with anything but the default
>> bean. I guess one can override the other if the configuration is present.
>> One problem I see is micronaut-cache. We can only use one instance of
>> DynamicCache but I need to verify how that works again. By default the
>> thick client instance will replace the thin-client DynamicCache if that
>> would be ok?
>>
>> ignite:
>>   thick-clients:
>>    default: <--- primary bean
>>      ...
>>    second-bean:
>>     ...
>>  thin-clients:
>>    default: <--- primary bean
>>     ...
>>    second-bean:
>>    ....
>>
>>
>>
>> https://docs.micronaut.io/latest/api/io/micronaut/context/annotation/Requires.html
>>
>> On Tue, Aug 18, 2020 at 10:13 PM Denis Magda <dma...@apache.org> wrote:
>>
>>> >
>>> > oh, so we probably don't need to work with multiple instances. This is
>>> what
>>> > I have in the current master branch.
>>>
>>>
>>> In most cases, people start a single instance of a thick or thin client
>>> per
>>> application. The clients are multi-threaded and can utilize all the CPUs
>>> effectively. However, it's not harmful to have the ability to configure
>>> several clients per application. As far as I understand, Micronaut
>>> distinguishes clients per the "IgniteClientConfiguration.name" property,
>>> right?
>>>
>>> So what defaults are set for IgniteConfiguration?
>>>
>>>
>>> Does it matter to Micronaut what those defaults are? By looking at the
>>> IgniteThinClientConfiguration
>>> <
>>> https://micronaut-projects.github.io/micronaut-ignite/snapshot/api/io/micronaut/ignite/configuration/IgniteThinClientConfiguration.html
>>> >,
>>> that defines org.apache.ignite.configuration.ClientConfiguration property
>>> (under the name of "configuration"), I see that Micronaut could
>>> introspect
>>> all the fields of the ClientConfiguration and prepared these properties
>>> table
>>> <
>>> https://micronaut-projects.github.io/micronaut-ignite/snapshot/guide/#io.micronaut.ignite.configuration.IgniteThinClientConfiguration
>>> >.
>>> For me, it means that whenever I am configuring the thin client in a YAML
>>> file, Micronaut will create an instance of the ClientConfiguration
>>> (Ignite
>>> sets the defaults), and then I can override some settings such as
>>> "addresses" or "enablePartitionAwareness". Does this sound accurate
>>> concerning Micronaut?
>>>
>>> Jumping back to the IgniteConfiguration, I would just swap the "path"
>>> that
>>> is the String with the "config" that is IgniteConfiguration. Then let
>>> Ignite take care of the IgniteConfiguration defaults and allow a
>>> developer
>>> to override some defaults (such as discoverySPI.ipFinder or memory
>>> settings). Just in case, you can find IgniteConfiguration defaults here
>>> <
>>> https://github.com/apache/ignite/blob/master/modules/core/src/main/java/org/apache/ignite/configuration/IgniteConfiguration.java
>>> >
>>> .
>>>
>>> -
>>> Denis
>>>
>>>
>>> On Tue, Aug 18, 2020 at 8:59 PM Michael Pollind <mpoll...@gmail.com>
>>> wrote:
>>>
>>> > oh, so we probably don't need to work with multiple instances. This is
>>> what
>>> > I have in the current master branch. I believe I was originally trying
>>> to
>>> > set-up the configuration with the default ignite instance but found I
>>> > couldn't cover enough of the configuration. So what defaults are set
>>> for
>>> > IgniteConfiguration? some of those factory items can't be covered with
>>> how
>>> > micronaut sets up configurations. @ConfigurationProperty can only be
>>> > defined on a known factory, there are ways to have multiple factories
>>> and
>>> > label them optional but that easily gets overwhelming.  In this
>>> situation
>>> > providing your own bean would probably be more ideal in this situation
>>> when
>>> > I think about it.  I was worrying that I wouldn't be able to cover
>>> enough
>>> > of the configuration with
>>> >
>>> > ignite:  enabled: true  thin-clients:    default:      address:      -
>>> > "127.0.0.1:10800"      - "127.0.0.1:10801"
>>> >
>>> >     thin-client-2:
>>> >       address:      - "127.0.0.1:10800"      - "127.0.0.1:10801"
>>> >
>>> >
>>> > you can see it in the current snapshot documentation:
>>> > https://micronaut-projects.github.io/micronaut-ignite/snapshot/guide/
>>> >
>>> > On Tue, Aug 18, 2020 at 4:16 PM Denis Magda <dma...@apache.org> wrote:
>>> >
>>> > > Michael, thanks for filling out the wiki page.
>>> > >
>>> > > I'm looking at the Auto-Configuration wiki section and the current
>>> > version
>>> > > of the io.micronaut.ignite.configuration.IgniteClientConfiguration
>>> > > <
>>> > >
>>> >
>>> https://github.com/micronaut-projects/micronaut-ignite/blob/master/ignite-core/src/main/java/io/micronaut/ignite/configuration/IgniteClientConfiguration.java
>>> > > >
>>> > > class,
>>> > > and wonder if we can perform the following changes:
>>> > >
>>> > >    1. Rename the IgniteClientConfiguration to IgniteConfiguration
>>> (or, to
>>> > >    avoid ambiguity, even to DefaultIgniteConfiguration as it's done
>>> for
>>> > the
>>> > >    Mongo driver
>>> > >    <
>>> > >
>>> >
>>> https://micronaut-projects.github.io/micronaut-mongodb/latest/api/io/micronaut/configuration/mongo/reactive/DefaultMongoConfiguration.html
>>> > > >).
>>> > >    The rationale for this change is that the developers might need to
>>> > > start an embedded
>>> > >    Ignite server node
>>> > >    <
>>> > >
>>> >
>>> https://www.gridgain.com/docs/latest/installation-guide/deployment-modes#embedded-deployment
>>> > > >.
>>> > >    So, I would not limit the integration scope to the Ignite clients
>>> > only.
>>> > >    2. Presently,
>>> > > io.micronaut.ignite.configuration.IgniteClientConfiguration
>>> > >    supports two parameters - the "name" and "path". I would replace
>>> the
>>> > > "path"
>>> > >    parameter with the "config" one that instantiates
>>> > >    org.apache.ignite.IgniteConfiguration. If we do that, then the
>>> > > developers
>>> > >    will be able to set any property of the IgniteConfiguration
>>> straight
>>> > in
>>> > > the
>>> > >    main YAML file. See how it's done for the Ignite Spring Boot
>>> > >    Auto-Configuration
>>> > >    <
>>> > >
>>> >
>>> https://apacheignite-mix.readme.io/docs/spring-boot#set-ignite-up-via-spring-boot-configuration
>>> > > >.
>>> > >    Guess, we can do the same with Micronaut.
>>> > >    3. If the previous modification is feasible, then I would rework
>>> the
>>> > >    Ignite thin client configuration similarly, taking our Spring Boot
>>> > >    integration for the thin client
>>> > >    <
>>> > >
>>> >
>>> https://apacheignite-mix.readme.io/docs/spring-boot#set-thin-client-up-via-spring-boot-configuration
>>> > > >
>>> > >    as a reference. As I see, the current version of
>>> > >    IgniteThinClientConfiguration
>>> > >    <
>>> > >
>>> >
>>> https://github.com/micronaut-projects/micronaut-ignite/blob/master/ignite-core/src/main/java/io/micronaut/ignite/configuration/IgniteThinClientConfiguration.java
>>> > > >
>>> > > already
>>> > >    adopts this approach. I would only rename "configuration" to
>>> "config",
>>> > > and
>>> > >    remove the "transaction" field since you can pass the
>>> transactional
>>> > >    settings via the YAML following the format below:
>>> > >
>>> > > ignite-thin-client:
>>> > >     name:
>>> > >     config:
>>> > >         addresses: <IP_addresses>
>>> > >         partitionAwarenessEnabled: true
>>> > >         transactionConfiguration:
>>> > >             defaultTxConcurrency:...
>>> > >             defaultTxTimeout
>>> > >
>>> > > -
>>> > > Denis
>>> > >
>>> > >
>>> > > On Mon, Aug 17, 2020 at 6:50 PM Michael Pollind <mpoll...@gmail.com>
>>> > > wrote:
>>> > >
>>> > > > oh, that makes more sense. so those methods get wrapped into a
>>> > > > micronaut-aop intercept. Below I've listed the relevant sections of
>>> > code
>>> > > > that would handle each annotation along with the methods that get
>>> > called
>>> > > > from the ignite branch I'm working from. Hopefully this helps. The
>>> key
>>> > is
>>> > > > specified from the CacheConfig annotation but this can be changed
>>> if
>>> > > there
>>> > > > is a better way to represent the key. By default it uses this
>>> > > > DefaultCacheKeyGenerator(
>>> > > >
>>> > > >
>>> > >
>>> >
>>> https://github.com/micronaut-projects/micronaut-cache/blob/master/cache-core/src/main/java/io/micronaut/cache/interceptor/DefaultCacheKeyGenerator.java
>>> > > > ).
>>> > > >
>>> > > >
>>> > > > I also finished up this document on sunday:
>>> > > >
>>> >
>>> https://cwiki.apache.org/confluence/display/IGNITE/Micronaut+Integration
>>> > > .
>>> > > > Any suggestions with what I could expand on and how this could be
>>> > > adjusted.
>>> > > >
>>> > > > Cacheable:
>>> > > >
>>> > > > For Cacheable it will run a get and issue a put if the value is not
>>> > > present
>>> > > > in the cache.
>>> > > >
>>> > > > -> micronaut-cache:
>>> > > >
>>> > > >
>>> > >
>>> >
>>> https://github.com/micronaut-projects/micronaut-cache/blob/master/cache-core/src/main/java/io/micronaut/cache/interceptor/CacheInterceptor.java#L163-L170
>>> > > > -> ignite-cache:
>>> > > >   get:
>>> > > >
>>> > > >
>>> > >
>>> >
>>> https://github.com/pollend/micronaut-ignite/blob/feature/rework/ignite-cache/src/main/java/io/micronaut/ignite/IgniteSyncCache.java#L60-L70
>>> > > >
>>> > > > CachePut:
>>> > > >
>>> > > > For cache put it will invalidate if the return is null else it will
>>> > > issue a
>>> > > > put. I think there might be a mistake in my code because I use
>>> > > putIfAbsent
>>> > > > for both cases. I need to investigate that closer and write some
>>> > > additional
>>> > > > test cases to verify the behaviour.
>>> > > >
>>> > > > --> micronaut-cache:
>>> > > >
>>> > > >
>>> > >
>>> >
>>> https://github.com/micronaut-projects/micronaut-cache/blob/master/cache-core/src/main/java/io/micronaut/cache/interceptor/CacheInterceptor.java#L510-L525
>>> > > > -> ignite-cache:
>>> > > > put:
>>> > > >
>>> > > >
>>> > >
>>> >
>>> https://github.com/pollend/micronaut-ignite/blob/feature/rework/ignite-cache/src/main/java/io/micronaut/ignite/IgniteSyncCache.java#L83-L88
>>> > > > invalidate:
>>> > > >
>>> > > >
>>> > >
>>> >
>>> https://github.com/pollend/micronaut-ignite/blob/feature/rework/ignite-cache/src/main/java/io/micronaut/ignite/IgniteSyncCache.java#L91-L95
>>> > > >
>>> > > > CacheInvalidate:
>>> > > >
>>> > > > for cache invalidation it will just be removed by the key.
>>> > > >
>>> > > > --> micronaut-cache:
>>> > > >
>>> > > >
>>> > >
>>> >
>>> https://github.com/micronaut-projects/micronaut-cache/blob/master/cache-core/src/main/java/io/micronaut/cache/interceptor/CacheInterceptor.java#L590-L596
>>> > > > -> ignite-cache:
>>> > > > invalidate:
>>> > > >
>>> > > >
>>> > >
>>> >
>>> https://github.com/pollend/micronaut-ignite/blob/feature/rework/ignite-cache/src/main/java/io/micronaut/ignite/IgniteSyncCache.java#L91-L95
>>> > > >
>>> > > >
>>> > > >
>>> > > > On Mon, Aug 17, 2020 at 5:23 PM Saikat Maitra <
>>> saikat.mai...@gmail.com
>>> > >
>>> > > > wrote:
>>> > > >
>>> > > > > Hi Michael,
>>> > > > >
>>> > > > > In the Example Cacheable Object you are using @CachePut,
>>> @Cacheable
>>> > > > > annotations and @CacheInvalidate annotations and I was trying to
>>> > > > understand
>>> > > > > when user use these annotation then what would be the underlying
>>> > Ignite
>>> > > > > operation that will happen? and how those operations are
>>> performed?
>>> > > > >
>>> > > > > An example like when user call this below method then how the
>>> result
>>> > of
>>> > > > > getValue is cached?
>>> > > > >
>>> > > > > @Cacheable
>>> > > > >     int getValue(String name) {
>>> > > > >         return counters.computeIfAbsent(name, { 0 })
>>> > > > >     }
>>> > > > >
>>> > > > >
>>> > > > > Regards,
>>> > > > > Saikat
>>> > > > >
>>> > > > > On Sat, Aug 15, 2020 at 7:21 PM Michael Pollind <
>>> mpoll...@gmail.com>
>>> > > > > wrote:
>>> > > > >
>>> > > > > > when you mean these annotations do you mean this would need to
>>> be
>>> > > > > > implemented in ignite?
>>> > > > > >
>>> > > > > > The project at the moment is split into multiple modules.
>>> > > ignite-core,
>>> > > > > > ignite-cache, etc ... The plan was to also have ignite-data but
>>> > that
>>> > > > will
>>> > > > > > take a bit of work to get working correctly but the basic
>>> config is
>>> > > > > mostly
>>> > > > > > done. The plan is also to verify the API described in the wiki
>>> and
>>> > > make
>>> > > > > > sure this is what would work best. At the moment I'm missing an
>>> > > > > > implementation for the thin-cache and how that would fit into
>>> this
>>> > > > > scheme.
>>> > > > > > I've removed it due to the added complexity but I'm sure
>>> something
>>> > > > could
>>> > > > > be
>>> > > > > > arranged that would work.
>>> > > > > >
>>> > > > > > For Ignite-cache, I have it as a separate module that can be
>>> > > optionally
>>> > > > > > included in a micronaut project where this module also has a
>>> > > dependency
>>> > > > > on
>>> > > > > > micronaut-cache. The AsyncCache and SyncCache are the two
>>> > interfaces
>>> > > > that
>>> > > > > > micronaut-cache defines. There are two ways to define the
>>> > > > implementation,
>>> > > > > > you can either provide beans for AsyncCache and SyncCache but
>>> they
>>> > > also
>>> > > > > > define a DynamicCacheManager that will use the name of the
>>> instance
>>> > > to
>>> > > > > > refer to the name of the cache used. In the documentation I
>>> believe
>>> > > for
>>> > > > > > Teracotta you give a list of caches you want and Hazelcast
>>> > implements
>>> > > > the
>>> > > > > > DynamicCacheManager. you can see that in the yaml
>>> configuration in
>>> > > > > > micronaut documentation where a list of cache names are
>>> provided
>>> > > along
>>> > > > > with
>>> > > > > > a configuration. Something similar can also be setup where a
>>> list
>>> > of
>>> > > > > > implementations from the yaml can be mapped to a configuration
>>> if
>>> > > that
>>> > > > > > would be more ideal.
>>> > > > > >
>>> > > > > >
>>> > > > > >
>>> > > > >
>>> > > >
>>> > >
>>> >
>>> https://github.com/pollend/micronaut-ignite/tree/feature/rework/ignite-cache/src/main/java/io/micronaut/ignite
>>> > > > > >
>>> > > > > > On Sat, Aug 15, 2020 at 4:10 PM Saikat Maitra <
>>> > > saikat.mai...@gmail.com
>>> > > > >
>>> > > > > > wrote:
>>> > > > > >
>>> > > > > > > Hi Michael,
>>> > > > > > >
>>> > > > > > > Welcome to the Ignite community!!!
>>> > > > > > >
>>> > > > > > > Please feel free to reach out if you have any questions with
>>> > > respect
>>> > > > to
>>> > > > > > > Ignite Integration.
>>> > > > > > >
>>> > > > > > > I had a question specific to integration and wanted to ask if
>>> > these
>>> > > > > > > annotations also need to be implemented for the
>>> micronaut-ignite
>>> > > > > > > integration.
>>> > > > > > >
>>> > > > > > > @Cacheable - Indicates a method is cacheable within the given
>>> > cache
>>> > > > > name
>>> > > > > > > @CachePut - Indicates that the return value of a method
>>> > invocation
>>> > > > > should
>>> > > > > > > be cached. Unlike @Cacheable the original operation is never
>>> > > skipped.
>>> > > > > > > @CacheInvalidate - Indicates the invocation of a method
>>> should
>>> > > cause
>>> > > > > the
>>> > > > > > > invalidation of one or many caches.
>>> > > > > > >
>>> > > > > > > Denis - Thank you for sharing the details in dev list, it
>>> great
>>> > to
>>> > > > > learn
>>> > > > > > > about micronaut-ignite module.
>>> > > > > > >
>>> > > > > > > Regards,
>>> > > > > > > Saikat
>>> > > > > > >
>>> > > > > > > On Sat, Aug 15, 2020 at 12:35 AM Michael Pollind <
>>> > > mpoll...@gmail.com
>>> > > > >
>>> > > > > > > wrote:
>>> > > > > > >
>>> > > > > > > > Here is the page that i've stubbed out:
>>> > > > > > > >
>>> > > > > >
>>> > > >
>>> >
>>> https://cwiki.apache.org/confluence/display/IGNITE/Micronaut+Integration
>>> > > > > > > >
>>> > > > > > > > I'll start trying to fill out some of the details over the
>>> next
>>> > > few
>>> > > > > > days
>>> > > > > > > > and we can go from there.
>>> > > > > > > >
>>> > > > > > > > On Fri, Aug 14, 2020 at 2:47 PM Denis Magda <
>>> dma...@apache.org
>>> > >
>>> > > > > wrote:
>>> > > > > > > >
>>> > > > > > > > > You're in, now you can create wiki pages in the Ignite
>>> > > namespace.
>>> > > > > > > > >
>>> > > > > > > > > Also, please subscribe to the list by sending a note to
>>> the
>>> > > > > > > > > dev-subscr...@ignite.apache.org address. Otherwise, we
>>> need
>>> > to
>>> > > > > > approve
>>> > > > > > > > > every email you send.
>>> > > > > > > > >
>>> > > > > > > > > -
>>> > > > > > > > > Denis
>>> > > > > > > > >
>>> > > > > > > > >
>>> > > > > > > > > On Fri, Aug 14, 2020 at 2:43 PM Michael Pollind <
>>> > > > > mpoll...@gmail.com>
>>> > > > > > > > > wrote:
>>> > > > > > > > >
>>> > > > > > > > >>
>>> > > > > > > > >>
>>> > > > > > > > >> here is the link:
>>> > > > > > > > >>
>>> > > > > > > > >>
>>> > > > > > > >
>>> > > > > > >
>>> > > > > >
>>> > > > >
>>> > > >
>>> > >
>>> >
>>> https://cwiki.apache.org/confluence/users/viewuserprofile.action?username=mpollind
>>> > > > > > > > >>
>>> > > > > > > > >> Here is the work in progress pull request that I've put
>>> > > > together:
>>> > > > > > > > >>
>>> > > https://github.com/micronaut-projects/micronaut-ignite/pull/33
>>> > > > > > > > >>
>>> > > > > > > > >>
>>> > > > > > > > >>
>>> > > > > > > > >> --
>>> > > > > > > > >> Sent from:
>>> > > > http://apache-ignite-developers.2346864.n4.nabble.com/
>>> > > > > > > > >>
>>> > > > > > > > >
>>> > > > > > > >
>>> > > > > > >
>>> > > > > >
>>> > > > >
>>> > > >
>>> > >
>>> >
>>>
>>

Reply via email to