com.mongodb.MongoWriteException Java Examples

The following examples show how to use com.mongodb.MongoWriteException. You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: ReactiveMongoClientTest.java    From quarkus with Apache License 2.0 6 votes vote down vote up
@Test
void testInsertionFailedWhenDocumentExist() {
    String collection = randomCollection();
    ReactiveMongoDatabase database = client.getDatabase(DATABASE);
    ReactiveMongoCollection<Document> myCollection = database.getCollection(collection);
    Document doc = createDoc();
    ObjectId value = new ObjectId();
    doc.put("_id", value);
    myCollection.insertOne(doc).await().indefinitely();
    try {
        myCollection.insertOne(doc).await().indefinitely();
        fail("Write Exception expected");
    } catch (Exception e) {
        assertThat(e).isInstanceOf(MongoWriteException.class);
    }
}
 
Example #2
Source File: DAO.java    From Babler with Apache License 2.0 6 votes vote down vote up
/**
 * Saves an entry to file
 * @param entry
 * @param dbName usually scrapig
 * @return true if success
 */
public static boolean saveEntry(DBEntry entry, String dbName){

    if(entry == null || !entry.isValid())
        return false;

    Logger log = Logger.getLogger(DAO.class);

    MongoDatabase db = MongoDB.INSTANCE.getDatabase(dbName);

    String collectionName = getCollectionName(entry);


    MongoCollection collection = db.getCollection(collectionName,BasicDBObject.class);

    try {
        collection.insertOne(entry);
        return true;
    }
    catch (MongoWriteException ex){
        if (ex.getCode() != 11000) // Ignore errors about duplicates
            log.error(ex.getError().getMessage());
        return false;
    }

}
 
Example #3
Source File: LockDao.java    From mongobee with Apache License 2.0 6 votes vote down vote up
public boolean acquireLock(MongoDatabase db) {

    Document insertObj = new Document(KEY_PROP_NAME, LOCK_ENTRY_KEY_VAL).append("status", "LOCK_HELD");

    // acquire lock by attempting to insert the same value in the collection - if it already exists (i.e. lock held)
    // there will be an exception
    try {
      db.getCollection(lockCollectionName).insertOne(insertObj);
    } catch (MongoWriteException ex) {
      if (ex.getError().getCategory() == ErrorCategory.DUPLICATE_KEY) {
        logger.warn("Duplicate key exception while acquireLock. Probably the lock has been already acquired.");
      }
      return false;
    }
    return true;
  }
 
Example #4
Source File: ChronoElement.java    From epcis with Apache License 2.0 6 votes vote down vote up
/**
 * Un-assigns a key/value property from the element. The object value of the
 * removed property is returned.
 *
 * @param key the key of the property to remove from the element
 * @return the object value associated with that key prior to removal. Should be
 *         instance of BsonValue
 */
@Override
public <T> T removeProperty(final String key) {
	try {
		BsonValue value = getProperty(key);
		BsonDocument filter = new BsonDocument();
		filter.put(Tokens.ID, new BsonString(this.id));
		BsonDocument update = new BsonDocument();
		update.put("$unset", new BsonDocument(key, new BsonNull()));
		if (this instanceof ChronoVertex) {
			graph.getVertexCollection().updateOne(filter, update, new UpdateOptions().upsert(true));
			return (T) value;
		} else {
			graph.getEdgeCollection().updateOne(filter, update, new UpdateOptions().upsert(true));
			return (T) value;
		}
	} catch (MongoWriteException e) {
		throw e;
	}
}
 
Example #5
Source File: TestDocumentValidation.java    From morphia with Apache License 2.0 6 votes vote down vote up
@Test
public void createValidation() {
    getMapper().map(DocumentValidation.class);
    getDs().enableDocumentValidation();
    assertEquals(Document.parse(DocumentValidation.class.getAnnotation(Validation.class).value()), getValidator());

    try {
        getDs().save(new DocumentValidation("John", 1, new Date()));
        fail("Document should have failed validation");
    } catch (MongoWriteException e) {
        assertTrue(e.getMessage().contains("Document failed validation"));
    }

    getDs().save(new DocumentValidation("Harold", 100, new Date()));

}
 
Example #6
Source File: TestDocumentValidation.java    From morphia with Apache License 2.0 6 votes vote down vote up
@Test
public void testBypassDocumentValidation() {
    getMapper().map(User.class);
    getDs().enableDocumentValidation();

    final User user = new User("Jim Halpert", new Date());
    user.age = 5;

    try {
        getDs().save(user);
        fail("Document validation should have rejected the document");
    } catch (MongoWriteException ignored) {
    }

    getDs().save(user, new InsertOneOptions().bypassDocumentValidation(true));

    Assert.assertEquals(1, getDs().find(User.class).count());
}
 
Example #7
Source File: TestBlogPosts.java    From Babler with Apache License 2.0 5 votes vote down vote up
@Test(expected = MongoWriteException.class)
public void noDuplicatesAllowed() {
    String data = "this is a blog post !";
    String url = "http://www.columbia.edu";
    BlogPost post = new BlogPost(data,"tst",null,"source",url,"GUID231253423","");
    posts.insertOne(post);
    String data2 = "this is a blog post !";
    String url2 = "http://www.columbia.edu";
    BlogPost post2 = new BlogPost(data,"tst",null,"source",url,"GUID231253423","");
    posts.insertOne(post2);
}
 
Example #8
Source File: TestTweets.java    From Babler with Apache License 2.0 5 votes vote down vote up
@Test(expected = MongoWriteException.class)
public void noDuplicatesAllowed() {
        String data = "this is a tweet !";
        String url = "http://www.columbia.edu";
        Tweet tweet = new Tweet(data,data,"tst","test",null,"topsy",url,"123456","filename");
        tweets.insertOne(tweet);
        String data2 = "this is a tweet !";
        String url2 = "http://www.columbia.edu";
        Tweet tweet2 = new Tweet(data2,data,"tst","test",null,"topsy",url2,"123456","filename");
        tweets.insertOne(tweet2);
    }
 
Example #9
Source File: TestIndexed.java    From morphia with Apache License 2.0 5 votes vote down vote up
@Test(expected = MongoWriteException.class)
public void testUniqueIndexedEntity() {
    getMapper().map(List.of(UniqueIndexOnValue.class));
    getDs().ensureIndexes();
    assertThat(getIndexInfo(UniqueIndexOnValue.class), hasIndexNamed("l_ascending"));
    getDs().save(new UniqueIndexOnValue("a"));

    // this should throw...
    getDs().save(new UniqueIndexOnValue("v"));
}
 
Example #10
Source File: MongoEventStore.java    From enode with MIT License 4 votes vote down vote up
@Override
public CompletableFuture<List<DomainEventStream>> queryAggregateEventsAsync(String aggregateRootId, String aggregateRootTypeName, int minVersion, int maxVersion) {
    return IOHelper.tryIOFuncAsync(() -> {
        CompletableFuture<List<DomainEventStream>> future = new CompletableFuture<>();

        Bson filter = Filters.and(Filters.eq("aggregateRootId", aggregateRootId),
                Filters.gte("version", minVersion),
                Filters.lte("version", maxVersion));
        Bson sort = Sorts.ascending("version");
        mongoClient.getDatabase(mongoConfiguration.getDatabaseName()).getCollection(mongoConfiguration.getEventCollectionName())
                .find(filter).sort(sort).subscribe(new Subscriber<Document>() {
            final List<DomainEventStream> streams = Lists.newArrayList();

            @Override
            public void onSubscribe(Subscription s) {
                s.request(Long.MAX_VALUE);
            }

            @Override
            public void onNext(Document document) {
                DomainEventStream eventStream = new DomainEventStream(
                        document.getString("commandId"),
                        document.getString("aggregateRootId"),
                        document.getString("aggregateRootTypeName"),
                        document.get("gmtCreate", Date.class),
                        eventSerializer.deserialize(JsonTool.deserialize(document.getString("events"), Map.class), IDomainEvent.class),
                        Maps.newHashMap());
                streams.add(eventStream);
            }

            @Override
            public void onError(Throwable t) {
                future.completeExceptionally(t);
            }

            @Override
            public void onComplete() {
                streams.sort(Comparator.comparingInt(DomainEventStream::getVersion));
                future.complete(streams);
            }
        });
        return future.exceptionally(throwable -> {
            if (throwable instanceof MongoWriteException) {
                MongoWriteException ex = (MongoWriteException) throwable;
                String errorMessage = String.format("Failed to query aggregate events async, aggregateRootId: %s, aggregateRootType: %s", aggregateRootId, aggregateRootTypeName);
                logger.error(errorMessage, ex);
                throw new IORuntimeException(throwable);
            }
            logger.error("Failed to query aggregate events async, aggregateRootId: {}, aggregateRootType: {}", aggregateRootId, aggregateRootTypeName, throwable);
            throw new EnodeRuntimeException(throwable);
        });
    }, "QueryAggregateEventsAsync");
}
 
Example #11
Source File: DatastoreImpl.java    From morphia with Apache License 2.0 4 votes vote down vote up
private <T> boolean tryVersionedUpdate(final T entity, final MongoCollection collection, final InsertOneOptions options) {
    final MappedClass mc = mapper.getMappedClass(entity.getClass());
    if (mc.getVersionField() == null) {
        return false;
    }

    MappedField idField = mc.getIdField();
    final Object idValue = idField.getFieldValue(entity);
    final MappedField versionField = mc.getVersionField();

    Long oldVersion = (Long) versionField.getFieldValue(entity);
    long newVersion = oldVersion == null ? 1L : oldVersion + 1;
    ClientSession session = findSession(options);

    if (newVersion == 1) {
        try {
            updateVersion(entity, versionField, newVersion);
            if (session == null) {
                options.prepare(collection).insertOne(entity, options.getOptions());
            } else {
                options.prepare(collection).insertOne(session, entity, options.getOptions());
            }
        } catch (MongoWriteException e) {
            updateVersion(entity, versionField, oldVersion);
            throw new ConcurrentModificationException(Sofia.concurrentModification(entity.getClass().getName(), idValue));
        }
    } else if (idValue != null) {
        final UpdateResult res = find(collection.getNamespace().getCollectionName())
                                     .filter(eq("_id", idValue),
                                         eq(versionField.getMappedFieldName(), oldVersion))
                                     .update(UpdateOperators.set(entity))
                                     .execute(new UpdateOptions()
                                                  .bypassDocumentValidation(options.getBypassDocumentValidation())
                                                  .clientSession(session)
                                                  .writeConcern(options.writeConcern()));

        if (res.getModifiedCount() != 1) {
            throw new ConcurrentModificationException(Sofia.concurrentModification(entity.getClass().getName(), idValue));
        }
        updateVersion(entity, versionField, newVersion);
    }

    return true;
}