[wildfly-dev] A few questions about the NoSQL MongoDB client subsystem configuration...

Gunnar Morling gunnar at hibernate.org
Fri Jun 10 01:46:20 EDT 2016


> We cannot include hostname + port numbers directly, instead we reference
host names/port pairs defined in the outbound-socket-binding section of
standalone.xml.

Why is that? Some general principle in WF config?

In OGM, we recently had the feature request to support a custom socket
factory (see MongoClientOptions#setSocketFactory()); The user wanted to set
a SSLSocketFactory configured with a custom trust store. Would that still
be possible?


2016-06-09 22:23 GMT+02:00 Scott Marlow <smarlow at redhat.com>:

>
>
> On 06/09/2016 06:27 AM, Gunnar Morling wrote:
>
>> Hi,
>>
>> My concern with the current proposal and its usage of dedicated
>> elements/attributes for specific options such as write concern is that
>> it easily leads into a catch-up game with datastore vendors as they keep
>> adding new options. That might create a constant effort for maintaining
>> this subsystem.
>>
>> How about having a more generic approach which only has typed elements
>> for common properties/settings such as user, password, database name and
>> then allows to set custom things as part of the connection URL:
>>
>>     <subsystem xmlns="urn:jboss:domain:nosql:1.0">
>>         <nosql-datasource jndi-name="java:jboss/nosql/mongodb_test">
>>
>>
>> <connection-url>nosql:mongdb:localhost:27017,otherhost:27017/somedatabase?writeConcern=ACKNOWLEDGED&readPreference=MAJORITY&...</connection-url>
>>             <security>
>>                 <user-name>bob</user-name>
>>                 <password>secret</password>
>>             </security>
>>         </datasource>
>>     </subsystem>
>>
>> Here, the connection-url would be analyzed to load the right driver and
>> pass any configured settings to it.
>>
>> While compact, that URL syntax might be confused with existing URI
>> schemes of specific stores, so an alternative might be this (a bit more
>> verbose, though):
>>
>>     <subsystem xmlns="urn:jboss:domain:nosql:1.0">
>>         <nosql-datasource jndi-name="java:jboss/nosql/mongodb_test">
>>             <driver>mongodb</driver>
>>             <end-points>localhost:27017,otherhost:27017</end-points>
>>
>
> We cannot include hostname + port numbers directly, instead we reference
> host names/port pairs defined in the outbound-socket-binding section of
> standalone.xml.
>
>             <database>somedatabase</database>
>>             <security>
>>                 <user-name>bob</user-name>
>>                 <password>secret</password>
>>             </security>
>>             <properties>
>>                 <property name="writeConcern">ACKNOWLEDGED</property>
>>                 <property name="readPreference">MAJORITY</property>
>>             </properties>
>>         </datasource>
>>     </subsystem>
>>
>>
> +1 for the separate properties idea!
>
> Both alternatives don't address custom write concerns, but I think you
>> foresee CDI producer methods for more advanced customizations, so that
>> might be fine. That'd also be needed for some other non-primitive
>> options (dbDecoderFactory, codecRegistry etc.), unless you provide a way
>> to configure classes here and have them instantiated.
>>
>
> I'm still learning more about how to use advance customizations in the CDI
> producer but yes, we definitely want to do this, to simplify application
> program use of NoSQL.
>
>
>> These more generic approaches will make it more robust towards new
>> options being added, but of course you also loose type-safety and I
>> suppose usability in the console which might provide dedicated editors
>> for real types such as boolean etc.
>>
>
> I think that about summarizes the difference.  Eventually, when the
> configuration options stabilize, it might be better to switch to dedicated
> editors, which would be a big one-off upgrade, I think.  If we used
> dedicated editors now, we will have several big (NoSQL subsystem
> configuration) upgrades, as the NoSQL database options may change over time.
>
> Thanks,
> Scott
>
>
>> --Gunnar
>>
>>
>>
>>
>> 2016-06-08 22:18 GMT+02:00 Brian Stansberry <brian.stansberry at redhat.com
>> <mailto:brian.stansberry at redhat.com>>:
>>
>>     On 6/8/16 9:44 AM, Jesper Pedersen wrote:
>>     > On 06/08/2016 10:39 AM, Scott Marlow wrote:
>>     >> For those not reading [1], we also can support one of the
>> predefined
>>     >> write-concern constants via:
>>     >>
>>     >> <mongo ... write-concern="ACKNOWLEDGED">
>>     >>     ...
>>     >> </mongo>
>>     >>
>>     >
>>     > I would choose this approach, and support the predefined constants.
>>     >
>>     > Exposing MongoDB internal API details in the configuration seems to
>> be
>>     > overkill, and put extra effort on your part when they change the
>> API.
>>     >
>>
>>     This is good input. If this ends up in WildFly or EAP, we have
>> stringent
>>     compatibility guarantees, so be cautious about exposing things in
>>     your API.
>>
>>     >
>>     > _______________________________________________
>>     > wildfly-dev mailing list
>>     > wildfly-dev at lists.jboss.org <mailto:wildfly-dev at lists.jboss.org>
>>     > https://lists.jboss.org/mailman/listinfo/wildfly-dev
>>     >
>>
>>
>>     --
>>     Brian Stansberry
>>     Senior Principal Software Engineer
>>     JBoss by Red Hat
>>     _______________________________________________
>>     wildfly-dev mailing list
>>     wildfly-dev at lists.jboss.org <mailto:wildfly-dev at lists.jboss.org>
>>     https://lists.jboss.org/mailman/listinfo/wildfly-dev
>>
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/wildfly-dev/attachments/20160610/17a318d0/attachment.html 


More information about the wildfly-dev mailing list