[wildfly-dev] update on WildFly NoSQL prototype integration...
Scott Marlow
smarlow at redhat.com
Tue May 10 10:17:33 EDT 2016
On 05/10/2016 05:26 AM, Stefano Maestri wrote:
>
>
> On Thu, May 5, 2016 at 7:48 PM, Jesper
> Pedersen <jesper.pedersen at redhat.com
> <mailto:jesper.pedersen at redhat.com>> 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 <http://org.jboss.as/> to org.wildfly
>
>
> +1
>
>
> - Maybe use version identifiers in the package name since NoSQL APIs
> change a lot
>
>
> Well even if it is different we had bad experience on this w/ IJ and
> removed those version identifier from package name. I think package name
> should not have version ids, even if it could be acceptable in this
> first phase we should try to hide this kind of infos to users of OURS
> API even if APIs from NoSQL impl would be dependents from specific release.
>
>
> - Add some additional asserts to the test cases to verify input / output
> from the stores
>
> > 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.
>
>
> Yup it would be a good start, even if the other question is "why a user
> should use WF integration instead of direct use of various
> implementation?". One of the possible answer could be "to have a common
> connection management" for sure. So the (final) effort should be to have
> a common connection management.
I wonder if any of the NoSQL database development communities would be
interested in establishing a common connection management client API.
>
>
>
> 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.
>
>
> Yup exactly.
>
>
>
> 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).
>
>
> Yes it's another possible question to "why use WF integration?"
>
>
>
> > 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.
>
>
> Agree 100%. And it gives us also another requirement: should be easily
> to upgrade this Wildfly subsystem (or at least underlying NoSQL
> implementations) because NoSQL users would expect to use latest "cool"
> features of their NoSQL impl and don't want to wait for WildFLy (or EAP)
> release cycle.
>
>
>
>
> > 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.
>
> 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).
>
>
> We implemented those in IJ (even if in much more standard JCA
> environment), and maybe we could share and eventually copy/paste some
> code.
Check out "MongoDB integration test with compensating transactions"
https://github.com/scottmarlow/wildfly/commit/9bd67964a9259416add73cac47328cec5127d25c,
which is a good start. We can work forward from what we have and ideas
from IJ.
>
>
>
>
> > 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.
>
>
> Maybe a plugin approach could be taken as we did for datasource and RA
> subsystems reading statistics available during deployment and runtime
> and exposing them as pure runtime metrics in DMR.
Great idea and great examples.
>
> Just my 2 cents.
>
> Best regards
> S.
>
>
> _______________________________________________
> 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