[wildfly-dev] update on WildFly NoSQL prototype integration...

Scott Marlow smarlow at redhat.com
Tue May 10 09:58:55 EDT 2016

On 05/05/2016 01:48 PM, Jesper Pedersen wrote:
> Hi,
> On 05/04/2016 02:16 PM, Scott Marlow wrote:
>> Below is an update on the WildFly NoSQL integration project.  The goal
>> is for deployed applications to have access to NoSQL databases (via
>> Hibernate OGM or native APIs).  Items 1-4, should be finished in our
>> first pass, with as much of the others items as we can do as well.
> Some general comments:
> - Good start :)
> - Maybe refactor from org.jboss.as to org.wildfly

> - I think you can leave out the "subsystem" part of the package name

> - Maybe use version identifiers in the package name since NoSQL APIs
> change a lot
I'm not yet sure about versioning and about life cycle as well.

> - Add some additional asserts to the test cases to verify input / output
> from the stores

Will do.

>> 1. connection management will deal with obtaining NoSQL connections for
>> application use.
>>    - borrow/share Hibernate OGM connection configuration setup code
>>    - authentication integration
>>    - support transport level security
> Connection management is a huge area to tackle. I think it is best to
> start with what each NoSQL implementation offer.

It could be interesting to ping the various NoSQL communities to get 
some dialog going on how to do platform level connection management.

> The big question is if the connections should be truly managed which
> would give the option to no-op dangerous API calls out. There aren't any
> spec requirements for this, so it is really a matter of how the APIs
> should be presented.
> You may have to proxy some of the classes in order to pass the security
> information into the stores. I think people would expect to use WildFly
> security domains for this (SubjectFactory/Subject).

Good point, users will want to use WildFly security.

>> 2. CDI programming simplifications will make it easy to inject NoSQL
>> data into your application classes.
>>    - https://github.com/antoinesd/javaee-nosql is initial idea
>> 3. You will easily get a native NoSQL connection from the specified
>> NoSQL profile and use the native NOSQL (Cassandra/MongoDB/other) API in
>> your application.
> I think this is key, as the APIs change almost per release.
>> 4. You will also be able to easily use Hibernate OGM with the defined
>> NoSQL profiles (exactly how is TBD but will be awesome :-).
>>    - Hibernate OGM static module is included.
>>    - need to align with OGM dependencies (e.g. Hibernate ORM + other
>> dependencies).
>>    - as mentioned above, OGM already has some connection setup code,
>> which might be good to share for WildFly + standalone NoSQL use.
>>    - once WildFly has a common NoSQLSource (not a DataSource) that OGM
>> can use, OGM will be enhanced to use it.
>> 5. How best for the WildFly NoSQL subsystem to be optional?
>>    - Is it enough to not run the wildfly/testsuite/nosql tests by default?
>>    - Or do we need to start a separate https://github.com/wildfly/nosql
>> project for the NoSQL subsystems?
>> 6. transaction enlistment
> This will vary for each store, and there are many loopholes that you may
> want to plug, f.ex. sharing a connection between 2 transactions.
> For 1-phase, you will have to insert a LocalXAResource instance into the
> transaction when the "connection" is obtained, and return it on the
> boundary (afterCompletion). Same deal for 2-phase basically.
> The LocalXAResource implementation will of course be different for each
> store.

Any links to existing IronJacamar code to share here?  I think that we 
could prototype new transaction enlistment handling code, based on what 
we currently have.

> You may want a transaction option for the stores that supports this such
> that people can choose the "level" of enlistment (ala jta="false").
> One task I see is that people will have access to the transactional
> methods in the API, and you don't want them to call these methods in
> their apps unless the transaction setting allows this.
> I think you can leave out the corner-cases in the 1st iteration, like
> deferred enlistment (get connection, start transaction).
>> 7. compensating transactions
> Another huge area.
> I would let the use-cases from WildFly/Swarm drive this.
> A simple way to start is to have a SPI that apps can implement in case
> the transaction is MARKED_FOR_ROLLBACK (hooks to an enlisted XAResource).
>> 8. runtime application monitoring
> As each store is different I would only look into what the subsystem can
> expose, plus whatever the store can display.
>> 9. How soon can we make an evaluation distribution available for use on
>> OpenStack/OpenShift?
>>    - Would be great if we could do some load testing with all NoSQL
>> components.
>>    - Would be great if we could enable others to also test.
>> 10. Are there any problems with our WildFly NoSQL subsystem injecting
>> MongoDatabase connections via:
>>      @Resource(lookup = "java:jboss/mongodb/test") MongoDatabase db;
>>    - No @Resource support expected for standalone Java, TBD is whether a
>> runtime library can be used.
>>    - Any problems expected on other EE application servers if this
>> approach becomes popular?
> This ties into connection management. I like what you have now for the
> 1st pass.
>> 11. WIP topic branch is at
>> https://github.com/scottmarlow/wildfly/tree/nosql-dev9.  Note that every
>> once in a while, commits are squashed and pushed to nosql-devN+1.
>> 12. Add proper unit tests
>>    - multi-threaded NoSQL access to show that works at all.
>>    - use NoSQL from different EE components (e.g. JAX-RS).
>>    - other use cases that represent how NoSQL could be used from WildFly.
> I think you can look at test cases for EE components that support @Resource.

Using @Inject may be another way, once we have 
https://github.com/antoinesd/javaee-nosql going.  Will see which way 
survives the prototype stage to what is merged into WildFly. :-)

> Best regards,
>   Jesper
> _______________________________________________
> wildfly-dev mailing list
> wildfly-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/wildfly-dev

More information about the wildfly-dev mailing list