[LOG4J2-1132] Do not use MongoDB driver 2.13.3 deprecated methods.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/3791207d Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/3791207d Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/3791207d Branch: refs/heads/LOG4J2-1136 Commit: 3791207d5a6a87b8e019d83583dc4410455d5e23 Parents: 20b8bc9 Author: ggregory <[email protected]> Authored: Thu Sep 24 01:16:16 2015 -0700 Committer: Ralph Goers <[email protected]> Committed: Sun Sep 27 10:47:29 2015 -0700 ---------------------------------------------------------------------- .../nosql/appender/AbstractNoSqlConnection.java | 48 ++++++ .../appender/couchdb/CouchDbConnection.java | 145 +++++++++---------- .../appender/mongodb/MongoDbConnection.java | 19 +-- .../log4j/nosql/appender/MongoDbTest.java | 4 +- src/changes/changes.xml | 6 + 5 files changed, 131 insertions(+), 91 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/3791207d/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/AbstractNoSqlConnection.java ---------------------------------------------------------------------- diff --git a/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/AbstractNoSqlConnection.java b/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/AbstractNoSqlConnection.java new file mode 100644 index 0000000..ac52eba --- /dev/null +++ b/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/AbstractNoSqlConnection.java @@ -0,0 +1,48 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache license, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the license for the specific language governing permissions and + * limitations under the license. + */ + +package org.apache.logging.log4j.nosql.appender; + +import java.util.concurrent.atomic.AtomicBoolean; + +/** + * Facilitates implementations of {@link NoSqlConnection}. + * + * @param <W> + * See {@link NoSqlConnection}. + * @param <T>See + * {@link NoSqlConnection}. + */ +public abstract class AbstractNoSqlConnection<W, T extends NoSqlObject<W>> implements NoSqlConnection<W, T> { + + private final AtomicBoolean closed = new AtomicBoolean(false); + + @Override + public void close() { + if (this.closed.compareAndSet(false, true)) { + closeImpl(); + } + } + + protected abstract void closeImpl(); + + @Override + public boolean isClosed() { + return this.closed.get(); + } + +} http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/3791207d/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/couchdb/CouchDbConnection.java ---------------------------------------------------------------------- diff --git a/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/couchdb/CouchDbConnection.java b/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/couchdb/CouchDbConnection.java index dd77d38..2494a5c 100644 --- a/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/couchdb/CouchDbConnection.java +++ b/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/couchdb/CouchDbConnection.java @@ -1,76 +1,69 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache license, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the license for the specific language governing permissions and - * limitations under the license. - */ -package org.apache.logging.log4j.nosql.appender.couchdb; - -import java.util.Map; -import java.util.concurrent.atomic.AtomicBoolean; - -import org.apache.logging.log4j.core.appender.AppenderLoggingException; -import org.apache.logging.log4j.nosql.appender.DefaultNoSqlObject; -import org.apache.logging.log4j.nosql.appender.NoSqlConnection; -import org.apache.logging.log4j.nosql.appender.NoSqlObject; -import org.apache.logging.log4j.util.Strings; -import org.lightcouch.CouchDbClient; -import org.lightcouch.Response; - -/** - * The Apache CouchDB implementation of {@link NoSqlConnection}. - */ -public final class CouchDbConnection implements NoSqlConnection<Map<String, Object>, DefaultNoSqlObject> { - private final CouchDbClient client; - private final AtomicBoolean closed = new AtomicBoolean(false); - - public CouchDbConnection(final CouchDbClient client) { - this.client = client; - } - - @Override - public DefaultNoSqlObject createObject() { - return new DefaultNoSqlObject(); - } - - @Override - public DefaultNoSqlObject[] createList(final int length) { - return new DefaultNoSqlObject[length]; - } - - @Override - public void insertObject(final NoSqlObject<Map<String, Object>> object) { - try { - final Response response = this.client.save(object.unwrap()); - if (Strings.isNotEmpty(response.getError())) { - throw new AppenderLoggingException("Failed to write log event to CouchDB due to error: " + - response.getError() + '.'); - } - } catch (final Exception e) { - throw new AppenderLoggingException("Failed to write log event to CouchDB due to error: " + e.getMessage(), - e); - } - } - - @Override - public void close() { - if (this.closed.compareAndSet(false, true)) { - this.client.shutdown(); - } - } - - @Override - public boolean isClosed() { - return this.closed.get(); - } -} +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache license, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the license for the specific language governing permissions and + * limitations under the license. + */ +package org.apache.logging.log4j.nosql.appender.couchdb; + +import java.util.Map; + +import org.apache.logging.log4j.core.appender.AppenderLoggingException; +import org.apache.logging.log4j.nosql.appender.AbstractNoSqlConnection; +import org.apache.logging.log4j.nosql.appender.DefaultNoSqlObject; +import org.apache.logging.log4j.nosql.appender.NoSqlConnection; +import org.apache.logging.log4j.nosql.appender.NoSqlObject; +import org.apache.logging.log4j.util.Strings; +import org.lightcouch.CouchDbClient; +import org.lightcouch.Response; + +/** + * The Apache CouchDB implementation of {@link NoSqlConnection}. + */ +public final class CouchDbConnection extends AbstractNoSqlConnection<Map<String, Object>, DefaultNoSqlObject> { + private final CouchDbClient client; + + public CouchDbConnection(final CouchDbClient client) { + this.client = client; + } + + @Override + public DefaultNoSqlObject createObject() { + return new DefaultNoSqlObject(); + } + + @Override + public DefaultNoSqlObject[] createList(final int length) { + return new DefaultNoSqlObject[length]; + } + + @Override + public void insertObject(final NoSqlObject<Map<String, Object>> object) { + try { + final Response response = this.client.save(object.unwrap()); + if (Strings.isNotEmpty(response.getError())) { + throw new AppenderLoggingException( + "Failed to write log event to CouchDB due to error: " + response.getError() + '.'); + } + } catch (final Exception e) { + throw new AppenderLoggingException("Failed to write log event to CouchDB due to error: " + e.getMessage(), + e); + } + } + + @Override + protected void closeImpl() { + this.client.shutdown(); + } + +} http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/3791207d/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbConnection.java ---------------------------------------------------------------------- diff --git a/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbConnection.java b/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbConnection.java index a803378..6b65fc3 100644 --- a/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbConnection.java +++ b/log4j-nosql/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbConnection.java @@ -19,6 +19,7 @@ package org.apache.logging.log4j.nosql.appender.mongodb; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.core.appender.AppenderLoggingException; +import org.apache.logging.log4j.nosql.appender.AbstractNoSqlConnection; import org.apache.logging.log4j.nosql.appender.NoSqlConnection; import org.apache.logging.log4j.nosql.appender.NoSqlObject; import org.apache.logging.log4j.status.StatusLogger; @@ -28,14 +29,13 @@ import org.bson.Transformer; import com.mongodb.BasicDBObject; import com.mongodb.DB; import com.mongodb.DBCollection; -import com.mongodb.Mongo; import com.mongodb.MongoException; import com.mongodb.WriteConcern; /** * The MongoDB implementation of {@link NoSqlConnection}. */ -public final class MongoDbConnection implements NoSqlConnection<BasicDBObject, MongoDbObject> { +public final class MongoDbConnection extends AbstractNoSqlConnection<BasicDBObject, MongoDbObject> { private static final Logger LOGGER = StatusLogger.getLogger(); @@ -52,11 +52,9 @@ public final class MongoDbConnection implements NoSqlConnection<BasicDBObject, M } private final DBCollection collection; - private final Mongo mongo; private final WriteConcern writeConcern; public MongoDbConnection(final DB database, final WriteConcern writeConcern, final String collectionName) { - this.mongo = database.getMongo(); this.collection = database.getCollection(collectionName); this.writeConcern = writeConcern; } @@ -82,15 +80,10 @@ public final class MongoDbConnection implements NoSqlConnection<BasicDBObject, M } @Override - public void close() { - // there's no need to call this.mongo.close() since that literally - // closes the connection - // MongoDBClient uses internal connection pooling - // for more details, see LOG4J2-591 + public void closeImpl() { + // there's no need to call this.mongo.close() since that literally closes the connection. + // MongoDBClient uses internal connection pooling. + // For more details, see LOG4J2-591. } - @Override - public boolean isClosed() { - return !this.mongo.getConnector().isOpen(); - } } http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/3791207d/log4j-nosql/src/test/java/org/apache/logging/log4j/nosql/appender/MongoDbTest.java ---------------------------------------------------------------------- diff --git a/log4j-nosql/src/test/java/org/apache/logging/log4j/nosql/appender/MongoDbTest.java b/log4j-nosql/src/test/java/org/apache/logging/log4j/nosql/appender/MongoDbTest.java index 2513526..44d3d21 100644 --- a/log4j-nosql/src/test/java/org/apache/logging/log4j/nosql/appender/MongoDbTest.java +++ b/log4j-nosql/src/test/java/org/apache/logging/log4j/nosql/appender/MongoDbTest.java @@ -23,11 +23,11 @@ import org.junit.ClassRule; import org.junit.Ignore; import org.junit.Test; -@Ignore("Requires a running MongoDB server") +//@Ignore("Requires a running MongoDB server") public class MongoDbTest { @ClassRule - public static LoggerContextRule context = new LoggerContextRule("log4j2-mongodb.xml"); + public static LoggerContextRule context = new LoggerContextRule("log4j2-mongodb-auth.xml"); @Test public void test() { http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/3791207d/src/changes/changes.xml ---------------------------------------------------------------------- diff --git a/src/changes/changes.xml b/src/changes/changes.xml index ff8f590..146b4e2 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -30,6 +30,12 @@ <action issue="LOG4J2-1127" dev="ggregory" type="fix"> log4j2.xml cannot be parsed on Oracle Weblogic 12c </action> + <action issue="LOG4J2-1132" dev="ggregory" type="fix"> + Do not use MongoDB driver 2.13.3 deprecated methods. + </action> + <action issue="LOG4J2-1040" dev="ggregory" type="update"> + Update MongoDB driver from 2.13.3 to 3.0.4. + </action> <action issue="LOG4J2-1128" dev="ggregory" type="update"> Reuse StringBuilder to improve performance for String-based layouts: CSV, GELF, HTML, RFC524, Syslog. </action>
