ネットワークで遅延の問題が発生しています。接続、セッション、プロデューサーの作成ごとに 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);
}
}