[wildfly-dev] (transaction enlistment for ACID but none for BASE...) update on WildFly NoSQL prototype integration...
Scott Marlow
smarlow at redhat.com
Fri Jul 8 12:24:18 EDT 2016
The NoSQL prototype now has transaction enlistment for Neo4j (one phase
wrapper).
Test example link [1] shows a CMT test bean method and [2] shows a BMT
test bean method.
Currently, in a JTA transaction the Neo4j Session survives ending the
JTA transaction. It might be better to close the Neo4j Session when the
JTA transaction ends, which would require the application to get a new
Session, this would ensure that applications don't forget to close the
session, with the down side that with BMT, application code would need
to call the Neo4j Driver.session(), to get a new Session instance after
each JTA transaction ends. After a session is closed, there is no
guarantee that another session can be obtained, as the next
Driver.session() may time out if the internal pool of Driver sessions,
is empty and the configured time limit
(neo4j.driver.acquireSessionTimeout) is exceeded (defaults to 30
seconds). So, there are costs to automatically closing Neo4j Sessions
at JTA transaction end time. Although, you could say that closing the
Session, after each transaction, gives other threads a change to use the
Session that isn't really closed, but instead is really returned to the
internal Driver sessions pool.
By the way, the Neo4j Session class, is what applications use to access
the database.
Thanks,
Scott
[1]
https://github.com/scottmarlow/wildfly/blob/nosql-dev9/testsuite/nosql/src/test/java/org/jboss/as/test/compat/nosql/neo4j/StatefulTestBean.java#L85
[2]
https://github.com/scottmarlow/wildfly/blob/nosql-dev9/testsuite/nosql/src/test/java/org/jboss/as/test/compat/nosql/neo4j/BMTStatefulTestBean.java#L54
On 06/29/2016 09:50 AM, Scott Marlow wrote:
> I think that we will move forward now and prototype the transaction
> enlistment for ACID NoSQL databases. This is important to nail down
> now, as we would like forward application compatibility. We need to
> choose now, whether MySLSB.myMethod() performs the Neo4j database update
> immediately when (#4) tx.close() is called or when the JTA transaction
> completes. By now, I mean that we need to decide before a release of
> WildFly that contains the NoSQL integration is released, so that we know
> that future releases will be compatible.
>
> I don't think that transaction enlistment should be allowed for BASE
> NoSQL databases, which is why I mentioned ACID above. With BASE
> databases, the application code is responsible for dealing with dirty
> data. As such, I think it would be misleading to enlist BASE operations
> into a JTA transaction. This means that BASE NoSQL database profiles
> will not allow 1-phase/2-phase transaction attribute to be specified.
>
> We started to write some design notes [1] for NoSQL integration. We
> will update the design notes after hearing more feedback on the above.
>
> Scott
>
> [1] https://developer.jboss.org/wiki/DesignNotesForNoSQLIntegrationOnWildFly
>
More information about the wildfly-dev
mailing list