2

ネットワークで遅延の問題が発生しています。接続、セッション、プロデューサーの作成ごとに 1 ミリ秒のペナルティがあります。これが、jms 接続、セッション、および MessageProducer をステートレス EJB インスタンス変数にキャッシュしたい理由です。

@PostConstruct でそれらを作成できますが、安全に作成できますか?

@Stateless
public class MyEJB {
    @Resource(mappedName = Messaging.LOCAL_JNDI_CONN_FACTORY)
    private ConnectionFactory connectionFactory;

    @Resource(mappedName = AutoRecolteIndexerConsumer.QUEUE_NAME)
    private Queue queue;

    private Connection connection;
    private Session session;
    private MessageProducer producer;


    @PostConstruct
    public void init() {
        connection = connectionFactory.createConnection();// 1ms
        session = connection.createSession(true, Session.SESSION_TRANSACTED);// 1ms
        producer = session.createProducer(queue); //1ms
    }

    public void send(Object data) {
        ObjectMessage obj = session.createObjectMessage();
        obj.setObject(data);
        producer.send(obj);
    }

}
4

1 に答える 1