You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@logging.apache.org by "David Obber (Jira)" <ji...@apache.org> on 2019/10/24 16:04:00 UTC
[jira] [Created] (LOG4J2-2715) JDBCAppender commits to the DB a JTA
RollbackOnly transaction and causes DB inconsistency
David Obber created LOG4J2-2715:
-----------------------------------
Summary: JDBCAppender commits to the DB a JTA RollbackOnly transaction and causes DB inconsistency
Key: LOG4J2-2715
URL: https://issues.apache.org/jira/browse/LOG4J2-2715
Project: Log4j 2
Issue Type: Bug
Components: Appenders, JDBC
Affects Versions: 2.12.1, 2.9.1
Environment: Container Payara 5.183,
Application: EAR using EJB 3, Hibernate 5.3.6-FINAL
JDBC Driver: Oracle Driver ojdbc8
Reporter: David Obber
I'm using log4j2 in a Payara 5.183 server and I've enabled a JDBC Appender connected to a JNDI datasource.
<JDBC name="DBAppender" tableName="LOG_TABLE">
<DataSource jndiName="myJNDI"></DataSource>
<Column ..." />
<Column ..." />
</JDBC>
The same datasource is used by the application to talk with the db. If the application, that uses EJB3, marks the transaction to be rolled back (sessionContext.setRollbackOnly()), each statement sent to the database (flush(), executeUpdate()) inside the transaction must not be committed.
What happens is that using the *jdbc appender* causes a commit that *{color:#de350b}writes to the database everything{color}*, *causing database inconsistency*.
Using DriverManager instead of a JNDI works fine, but I don't know if I can set a connection pool with it.
When log4j is inside a JTA transaction it should use another JDBC connection to log.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)