nablarch.fw.messaging.provider.JndiLookingUpJmsMessagingProvider Maven / Gradle / Ivy
package nablarch.fw.messaging.provider;
import nablarch.core.repository.jndi.JndiHelper;
import nablarch.core.util.StringUtil;
import nablarch.fw.messaging.MessagingContext;
import javax.jms.ConnectionFactory;
import javax.jms.Queue;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
/**
* {@link ConnectionFactory}および{@link Queue}をJNDIから取得する
* {@link nablarch.fw.messaging.MessagingProvider}実装クラス。
* リソースの取得をJNDIから行う以外は、{@link JmsMessagingProvider}と同様。
* 設定例をいかに示す。
*
* {@literal
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
* }
*
*
* @author T.Kawasaki
* @see JndiHelper
*/
public class JndiLookingUpJmsMessagingProvider extends JmsMessagingProvider {
/** JNDIヘルパークラス */
private JndiHelper jndiHelper;
/** {@link ConnectionFactory}のJNDI名 */
private String connectionFactoryJndiName;
/**
* key=キュー論理名、value=キューJNDI名をペアにしたMap。
*
* @see #lookUpQueues(java.util.Map)
*/
private Map destinationNamePairs;
/** {@inheritDoc} */
public MessagingContext createContext() {
prepareIfNecessary();
return super.createContext();
}
/**
* JNDIサポートクラスを設定する。
*
* @param jndiHelper JNDIサポートクラス
* @return 本インスタンス
*/
public JndiLookingUpJmsMessagingProvider setJndiHelper(JndiHelper jndiHelper) {
this.jndiHelper = jndiHelper;
return this;
}
/**
* key=キュー論理名、value=キューJNDI名をペアにしたMapを設定する。
* このMapは、{@link Queue}をJNDIから取得する際に使用される。
* value(キューJNDI名)から{@link Queue}がルックアップされ、
* key(キュー論理名)と紐付けられて、{@link JmsMessagingProvider}に設定される。
*
* @param pairs key=キュー論理名、value=キューJNDI名をペアにしたMap
* @return 本インスタンス
*/
public JndiLookingUpJmsMessagingProvider setDestinationNamePairs(Map pairs) {
this.destinationNamePairs = pairs;
return this;
}
/**
* {@link ConnectionFactory}をJNDIから取得するためのJNDI名を設定する。
*
* @param connectionFactoryJndiName {@link ConnectionFactory}のJNDI名
* @return 本インスタンス
*/
public JndiLookingUpJmsMessagingProvider setConnectionFactoryJndiName(String connectionFactoryJndiName) {
this.connectionFactoryJndiName = connectionFactoryJndiName;
return this;
}
/**
* 初期化が未実行の場合、初期化を行う。
* 既に初期化済みである場合は、何もしない。
*/
private void prepareIfNecessary() {
if (!isInitialized()) {
initialize();
}
}
/**
* JMSプロバイダの初期化を行う。
* {@link ConnectionFactory}および{@link Queue}が設定される。
*/
private void initialize() {
// コネクションファクトリをJNDIからルックアップする。
ConnectionFactory factory = lookUpConnectionFactory();
setConnectionFactory(factory);
// キューをルックアップする。
Map destinations = lookUpQueues(destinationNamePairs);
setDestinations(destinations);
}
/**
* プロバイダが初期化済であるか判定する。
*
* @return {@link ConnectionFactory}が設定済の時、真
*/
private boolean isInitialized() {
return getConnectionFactory() != null;
}
/**
* {@link ConnectionFactory}をJNDIから取得する。
* JNDI名には{@link #setConnectionFactoryJndiName(String)}で
* 設定した値が使用される。
*
* @return JNDIから取得した{@link ConnectionFactory}
*/
private ConnectionFactory lookUpConnectionFactory() {
if (StringUtil.isNullOrEmpty(connectionFactoryJndiName)) {
throw new IllegalStateException("connectionFactoryName must be set.");
}
if (jndiHelper == null) {
throw new IllegalStateException("jndiHelper must be set.");
}
return jndiHelper.lookUp(connectionFactoryJndiName);
}
/**
* {@link Queue}をJNDIから取得する。
* 引数には、key=キュー論理名、value=キューJNDI名をペアにしたMapを渡す。
* Mapの各エントリからキューのJNDI名を取得しルックアップし、
* 取得したキューとそのエントリのキュー論理名とを紐付けたMapを返却する。
*
* @param pairs key=キュー論理名、value=キューJNDI名をペアにしたMap
* @return key=キュー論理名、value={@link Queue}をペアにしたMap
*/
private Map lookUpQueues(Map pairs) {
Map result = new HashMap();
for (Entry pair : pairs.entrySet()) {
String logicalName = pair.getKey();
String nameToLookUpInJndi = pair.getValue();
Queue q = jndiHelper.lookUp(nameToLookUpInJndi);
result.put(logicalName, q);
}
return result;
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy