On Wed, Apr 6, 2016 at 5:27 PM, Sanne Grinovero <sa...@infinispan.org> wrote:
> On 6 April 2016 at 15:01, Galder Zamarreño <gal...@redhat.com> wrote:
>>
>> --
>> Galder Zamarreño
>> Infinispan, Red Hat
>>
>>> On 6 Apr 2016, at 12:29, Gustavo Fernandes <gust...@infinispan.org> wrote:
>>>
>>>
>>>
>>> On Wed, Apr 6, 2016 at 10:26 AM, Galder Zamarreño <gal...@redhat.com> wrote:
>>> Hi all,
>>>
>>> I've been looking at [1] and the way I see it, there are two ways to solve 
>>> this:
>>>
>>> 1. A key benefit of JCache/JCacheManager is that you can construct 
>>> JCacheManager instances using standard APIs, e.g. calling 
>>> Cachie.getCachingProvider().getCacheManager(...). One way to solve this 
>>> issue would be if we exposed a propietary way to create an Infinispan 
>>> remote JCacheManager, e.g.
>>>
>>> new org.infinispan.jcache.remote.JCacheManager(RemoteCacheManager) or
>>> new org.infinispan.jcache.remote.JCacheManager(ConfigurationBuilder)
>>> ...etc, or similar solutions
>>>
>>> The problem with this approach is that we force users to create 
>>> JCacheManager instances using implementation detail APIs.
>>>
>>> 2. The only way you can pass in implementation specific configuration 
>>> options to JCacheManager instances using standard APIs is via a Properties 
>>> file. So, the other solution is to have the missing client configuration 
>>> options available as being able to configure them via Properties. The main 
>>> limitation here is that property values must be String values. According to 
>>> Tristan, this could limit some security configuration for options that can 
>>> be converted into String values. Looking at 
>>> org.infinispan.client.hotrod.configuration.SslConfigurationBuilder, the 
>>> only configuration option that might have such issue is passing in a 
>>> javax.net.ssl.SSLContext instance, but I don't see the sslContext() method 
>>> used anywhere...? The rest of SSL options take either a String or char[] so 
>>> those would not be problematic.
>>>
>>> Thoughts?
>>>
>>>
>>> Regardless of JCache, I think a HotRod client should be configurable via 
>>> properties only (this is needed for [2]) as described in [1], maybe we 
>>> could introduce factories for non-String based configs?
>>
>> Interesting idea about using factories for non-String configs but not sure 
>> that will work? I mean, you'd provide the FQN of the factory class, which 
>> would be instantiated with reflection an an empty constructor. What about if 
>> that factory relied on some kind of initialization? IOW, if the thing you're 
>> building comes from something else?
>
> +1 to stick to use only properties for Hot Rod so I can embed them all
> in configuration files for Hibernate OGM ;)
>
> In Hibernate it's common to allow passing such a factory within the
> configuration Map.
> If the value of the properties map is a String, then it's interpreted
> as a FQN and started via reflection; if it's not a String it verifies
> that it is an _instance_ of the required contract, and takes the
> instance as is. So integrating frameworks can inject more complex
> stuff by simple reference.

Our standard configuration API also allows custom implementations that
can be provided either as an instance or as a class name. Usually it's
the actual implementation, not a factory.

The limitation with JSR-107 is that we want it to work with
Caching.getCachingProvider().getCacheManager(...), which can take in
only a Properties instance and pass that to the cache manager.
So far, we assumed all the Properties values must be Strings. However,
it looks like Properties extends Hashtable<Object,Object>, so it
should be possible to stick any object in there. The only gotcha is
that the caller must use Properties.put(k, v) instead of
Properties.setProperty(k, v).

>
> That's for example how WildFly injects stuff into Hibernate ORM to use
> in most cases; in some cases it still uses the "old style" approach of
> defining a jndi lookup convention, but most such JNDI names area also
> injected, if it's not injecting the "lookup strategy" by FQN: having
> both gives you lots of flexibility.

I also suggested JNDI, but I was quickly reminded that JNDI isn't
always available, and we don't want to make it a required dependency.

We could also have a singleton map for "injectables", and replace JNDI
references with keys in our injectables map. Still, I'm always wary
about static stuff, so I like the "hack" of storing non-String values
in a Properties instance better.

Cheers
Dan

>
> Thanks,
> Sanne
>
>>
>> I don't know the SSLContext use case enough to know if your suggestion would 
>> work. Maybe @Tristan can chime in?
>>
>> Cheers,
>>
>>>
>>> [2] https://issues.jboss.org/browse/ISPRK-16
>>>
>>>
>>> Gustavo
>>>
>>>
>>>
>>> [1] https://issues.jboss.org/browse/ISPN-6438
>>> --
>>> Galder Zamarreño
>>> Infinispan, Red Hat
>>>
>>>
>>> _______________________________________________
>>> infinispan-dev mailing list
>>> infinispan-dev@lists.jboss.org
>>> https://lists.jboss.org/mailman/listinfo/infinispan-dev
>>>
>>> _______________________________________________
>>> infinispan-dev mailing list
>>> infinispan-dev@lists.jboss.org
>>> https://lists.jboss.org/mailman/listinfo/infinispan-dev
>>
>>
>> _______________________________________________
>> infinispan-dev mailing list
>> infinispan-dev@lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/infinispan-dev
>
> _______________________________________________
> infinispan-dev mailing list
> infinispan-dev@lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/infinispan-dev

_______________________________________________
infinispan-dev mailing list
infinispan-dev@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/infinispan-dev

Reply via email to