WebsocketTxManager.java

  1. /*
  2.  * The coLAB project
  3.  * Copyright (C) 2021-2023 AlbaSim, MEI, HEIG-VD, HES-SO
  4.  *
  5.  * Licensed under the MIT License
  6.  */
  7. package ch.colabproject.colab.api.controller;

  8. import java.io.Serializable;
  9. import javax.annotation.PostConstruct;
  10. import javax.annotation.Resource;
  11. import javax.inject.Inject;
  12. import javax.transaction.TransactionScoped;
  13. import javax.transaction.TransactionSynchronizationRegistry;
  14. import org.slf4j.Logger;
  15. import org.slf4j.LoggerFactory;

  16. /**
  17.  * To synchronize websockets with JTA session
  18.  *
  19.  * @author maxence
  20.  */
  21. @TransactionScoped
  22. public class WebsocketTxManager implements Serializable {

  23.     private static final long serialVersionUID = 1L;

  24.     /** logger */
  25.     private static final Logger logger = LoggerFactory.getLogger(WebsocketTxManager.class);

  26.     /**
  27.      * Tx sync registry
  28.      */
  29.     @Resource
  30.     private transient TransactionSynchronizationRegistry jtaSyncRegistry;

  31.     /**
  32.      * The bag
  33.      */
  34.     @Inject
  35.     private EntityGatheringBagForPropagation bean;

  36.     /**
  37.      * make sure bean exists
  38.      */
  39.     public void touch() {
  40.         logger.trace("Touch WsTxManager");
  41.     }

  42.     /**
  43.      * Called each time a new transaction is created.
  44.      */
  45.     @PostConstruct
  46.     public void construct() {
  47.         logger.trace("NEW TRANSACTION BEANLIFE CYCLE");
  48.         if (jtaSyncRegistry != null) {
  49.             WebsocketTxSync synchronizer = bean.getSynchronizer();
  50.             if (synchronizer == null) {
  51.                 logger.trace("Create Sync");
  52.                 synchronizer = new WebsocketTxSync(bean);
  53.                 bean.setSynchronizer(synchronizer);
  54.                 jtaSyncRegistry.registerInterposedSynchronization(synchronizer);
  55.             } else {
  56.                 logger.trace("Synchronizer already registered");
  57.             }
  58.         } else {
  59.             logger.error(" * NULL -> NO-CONTEXT");
  60.         }
  61.     }

  62. }