
io.vertx.ext.stomp.impl.Transaction Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of vertx-stomp Show documentation
Show all versions of vertx-stomp Show documentation
Stomp support for Vert.x 3
/*
* Copyright (c) 2011-2015 The original author or authors
* ------------------------------------------------------
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* and Apache License v2.0 which accompanies this distribution.
*
* The Eclipse Public License is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* The Apache License v2.0 is available at
* http://www.opensource.org/licenses/apache2.0.php
*
* You may elect to redistribute this code under either of these licenses.
*/
package io.vertx.ext.stomp.impl;
import io.vertx.ext.stomp.Frame;
import io.vertx.ext.stomp.StompServerConnection;
import java.util.ArrayList;
import java.util.List;
/**
* Represents a STOMP transaction.
* This class is thread safe.
*
* @author Clement Escoffier
*/
public class Transaction {
private final List frames;
private final String id;
private final StompServerConnection connection;
public Transaction(StompServerConnection connection, String id) {
this.connection = connection;
this.id = id;
this.frames = new ArrayList<>();
}
/**
* @return the connection
*/
public StompServerConnection connection() {
return connection;
}
/**
* @return the transaction id
*/
public String id() {
return id;
}
/**
* Adds a frame to the transaction. As stated in the STOMP specification, only {@code SEND, ACK and NACK} frames
* can be in transactions.
*
* @param frame the frame to add
* @return {@code true} if the frame was added to the transaction, {@code false otherwise}. Main failure reason is the number of
* frames stored in the transaction that have exceed the number of allowed frames in transaction.
*/
public synchronized boolean addFrameToTransaction(Frame frame) {
return frames.size() < connection.server().options().getMaxFrameInTransaction() && frames.add(frame);
}
/**
* Clears the list of frames added to the transaction.
*
* @return the current {@link Transaction}
*/
public synchronized Transaction clear() {
frames.clear();
return this;
}
/**
* @return the ordered list of frames added to the transaction. To avoid concurrency issue, a copy is returned.
*/
public synchronized List getFrames() {
return new ArrayList<>(frames);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy