All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.avaje.ebeaninternal.server.cluster.SerialiseTransactionHelper Maven / Gradle / Ivy

package com.avaje.ebeaninternal.server.cluster;

import com.avaje.ebeaninternal.api.SpiEbeanServer;
import com.avaje.ebeaninternal.server.transaction.RemoteTransactionEvent;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.util.List;

/**
 * Mechanism to convert RemoteTransactionEvent to/from byte[] content.
 */
public abstract class SerialiseTransactionHelper {

  private static final Logger logger = LoggerFactory.getLogger(SerialiseTransactionHelper.class);

  private final PacketWriter packetWriter;

  public SerialiseTransactionHelper() {
    packetWriter = new PacketWriter(Integer.MAX_VALUE);
  }

  public abstract SpiEbeanServer getEbeanServer(String serverName);

  /**
   * Convert the RemoteTransactionEvent to byte[] content.
   */
  public DataHolder createDataHolder(RemoteTransactionEvent transEvent) throws IOException {

    List packetList = packetWriter.write(transEvent);
    if (packetList.size() != 1) {
      throw new RuntimeException("Always expecting 1 Packet but got " + packetList.size());
    }
    byte[] data = packetList.get(0).getBytes();
    return new DataHolder(data);
  }

  /**
   * Convert the byte[] content to RemoteTransactionEvent.
   */
  public RemoteTransactionEvent read(DataHolder dataHolder) throws IOException {

    ByteArrayInputStream bi = new ByteArrayInputStream(dataHolder.getData());
    DataInputStream dataInput = new DataInputStream(bi);

    Packet header = Packet.readHeader(dataInput);

    SpiEbeanServer server = getEbeanServer(header.getServerName());
    if (server == null) {
      logger.error("server [{}] not found/registered?", header.getServerName());
    }

    PacketTransactionEvent tranEventPacket = PacketTransactionEvent.forRead(header, server);
    tranEventPacket.read(dataInput);
    return tranEventPacket.getEvent();
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy