public abstract class AbstractJmsListeningContainer extends JmsDestinationAccessor implements BeanNameAware, DisposableBean, SmartLifecycle
JmsAccessor
基本クラスから継承します。 このクラスは、基本的なライフサイクル管理、特に共有 JMS 接続の管理を提供します。サブクラスはこのライフサイクルにプラグインされ、sharedConnectionEnabled()
および doInitialize()
および doShutdown()
テンプレートメソッドを実装することになっています。
この基本クラスは、特定のリスナープログラミングモデルまたはリスナー呼び出しメカニズムを想定していません。JMS 接続 / セッションで動作するあらゆる種類の JMS ベースのリスニングメカニズムに必要な一般的なランタイムライフサイクル管理を提供するだけです。
具体的なリスナープログラミングモデルについては、AbstractMessageListenerContainer
サブクラスを確認してください。具体的なリスナー呼び出しメカニズムについては、DefaultMessageListenerContainer
クラスを確認してください。
sharedConnectionEnabled()
, doInitialize()
, doShutdown()
修飾子と型 | クラスと説明 |
---|---|
static class | AbstractJmsListeningContainer.SharedConnectionNotInitializedException このコンテナーの共有 JMS 接続の初期セットアップが失敗したことを示す例外。 |
修飾子と型 | フィールドと説明 |
---|---|
protected ObjectSE | lifecycleMonitor |
protected ObjectSE | sharedConnectionMonitor |
RECEIVE_TIMEOUT_INDEFINITE_WAIT, RECEIVE_TIMEOUT_NO_WAIT
logger
DEFAULT_PHASE
コンストラクターと説明 |
---|
AbstractJmsListeningContainer() |
修飾子と型 | メソッドと説明 |
---|---|
void | afterPropertiesSet() validateConfiguration() および initialize() へのデリゲート。 |
protected ConnectionEE | createSharedConnection() このコンテナーの共有接続を作成します。 |
void | destroy() BeanFactory がコンテナーインスタンスを破棄するときに shutdown() を呼び出します。 |
protected abstract void | doInitialize() このコンテナー内の呼び出し元を登録します。 |
protected void | doRescheduleTask(ObjectSE task) 指定されたタスクオブジェクトをすぐに再スケジュールします。 |
protected abstract void | doShutdown() 登録された呼び出し元を閉じます。 |
protected void | doStart() 共有接続があれば開始し、すべての呼び出し元タスクに通知します。 |
protected void | doStop() すべての呼び出し元タスクに通知し、共有接続があれば停止します。 |
protected void | establishSharedConnection() このコンテナーの共有接続を確立します。 |
protected StringSE | getBeanName() このリスナーコンテナーが含まれている Bean ファクトリで割り当てられている Bean 名を返します(存在する場合)。 |
StringSE | getClientId() このコンテナーによって作成および使用される共有接続の JMS クライアント ID を返します(ある場合)。 |
int | getPausedTaskCount() 現在一時停止しているタスクがある場合は、その数を確認します。 |
int | getPhase() このコンテナーが開始および停止されるフェーズを返します。 |
protected ConnectionEE | getSharedConnection() このコンテナーによって維持されている共有 JMS 接続を返します。 |
void | initialize() このコンテナーを初期化します。 |
boolean | isActive() このコンテナーが現在アクティブであるかどうか、つまり、セットアップされているがまだシャットダウンされていないかどうかを返します。 |
boolean | isAutoStartup() |
boolean | isRunning() このコンテナーが現在実行中かどうか、つまり、コンテナーが開始されていて、まだ停止されていないかどうかを判別してください。 |
protected void | logRejectedTask(ObjectSE task, RuntimeExceptionSE ex) doRescheduleTask(java.lang.Object) によって拒否されたタスクをログに記録します。 |
protected void | prepareSharedConnection(ConnectionEE connection) このコンテナーの共有接続として登録される、指定された接続を準備します。 |
protected void | refreshSharedConnection() このコンテナーが保持している共有接続をリフレッシュします。 |
protected boolean | rescheduleTaskIfNecessary(ObjectSE task) このコンテナーが現在実行されている場合はすぐに、または後でこのコンテナーが再起動されたら、指定されたタスクオブジェクトを取得して再スケジュールします。 |
protected void | resumePausedTasks() 一時停止したすべてのタスクを再開してください。 |
protected boolean | runningAllowed() このコンテナーのリスナーが一般に実行を許可されているかどうかを確認します。 |
void | setAutoStartup(boolean autoStartup) 初期化後にコンテナーを自動的に起動するかどうかを設定します。 |
void | setBeanName(StringSE beanName) この Bean を作成した Bean ファクトリで Bean の名前を設定します。 |
void | setClientId(StringSE clientId) このコンテナーによって作成および使用される共有接続の JMS クライアント ID を指定します。 |
void | setPhase(int phase) このコンテナーを開始および停止するフェーズを指定します。 |
protected abstract boolean | sharedConnectionEnabled() 共有 JMS 接続をこのコンテナー基本クラスで維持する必要があるかどうかを返します。 |
void | shutdown() 共有接続を停止し、 doShutdown() を呼び出して、このコンテナーを閉じます。 |
void | start() このコンテナーを起動します。 |
protected void | startSharedConnection() 共有接続を開始します。 |
void | stop() このコンテナーを停止します。 |
protected void | stopSharedConnection() 共有接続を停止します。 |
protected void | validateConfiguration() このコンテナーの構成を検証します。 |
getDestinationResolver, isPubSubDomain, receiveFromConsumer, resolveDestinationName, setDestinationResolver, setPubSubDomain
convertJmsAccessException, createConnection, createSession, getConnectionFactory, getSessionAcknowledgeMode, isClientAcknowledge, isSessionTransacted, obtainConnectionFactory, setConnectionFactory, setSessionAcknowledgeMode, setSessionAcknowledgeModeName, setSessionTransacted
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSE
stop
protected final ObjectSE sharedConnectionMonitor
protected final ObjectSE lifecycleMonitor
public void setClientId(@Nullable StringSE clientId)
クライアント ID は、基盤となる JMS プロバイダーのすべてのアクティブな接続間で一意である必要があることに注意してください。さらに、クライアント ID は、元の ConnectionFactory がまだ割り当てていない場合にのみ割り当てることができます。
@Nullable public StringSE getClientId()
public void setAutoStartup(boolean autoStartup)
デフォルトは "true" です。これを "false" に設定すると、start()
メソッドによる手動起動が可能になります。
public boolean isAutoStartup()
SmartLifecycle
true
が含まれる ApplicationContext
がリフレッシュされるときに、この Lifecycle
コンポーネントがコンテナーによって自動的に開始される場合、true
を返します。false
の値は、プレーン Lifecycle
実装に類似した、明示的な Lifecycle.start()
呼び出しを介してコンポーネントが開始されることを意図していることを示します。
デフォルトの実装は true
を返します。
public void setPhase(int phase)
public int getPhase()
Phased
の getPhase
SmartLifecycle
の getPhase
SmartLifecycle.isAutoStartup()
, Lifecycle.start()
, SmartLifecycle.stop(Runnable)
, DefaultLifecycleProcessor.getPhase(Lifecycle)
public void setBeanName(@Nullable StringSE beanName)
BeanNameAware
通常の Bean プロパティの設定後、ただし InitializingBean.afterPropertiesSet()
またはカスタム init メソッドなどの init コールバックの前に呼び出されます。
BeanNameAware
の setBeanName
beanName
- ファクトリ内の Bean の名前。この名前は、ファクトリで使用される実際の Bean 名であり、最初に指定した名前とは異なる場合があります。特に内部 Bean 名の場合、実際の Bean 名は "#..." サフィックスを追加することで一意になります。必要に応じて、BeanFactoryUtils.originalBeanName(String)
メソッドを使用して、元の Bean 名(サフィックスなし)を抽出します。@Nullable protected final StringSE getBeanName()
public void afterPropertiesSet()
validateConfiguration()
および initialize()
へのデリゲート。InitializingBean
の afterPropertiesSet
JmsAccessor
の afterPropertiesSet
protected void validateConfiguration()
デフォルトの実装は空です。サブクラスでオーバーライドされます。
public void destroy()
shutdown()
を呼び出します。DisposableBean
の destroy
shutdown()
public void initialize() throws JmsException
JMS 接続を作成し、Connection
EE を開始し("autoStartup"
がオフになっていない場合)、doInitialize()
を呼び出します。
JmsException
- 起動に失敗した場合 public void shutdown() throws JmsException
doShutdown()
を呼び出して、このコンテナーを閉じます。JmsException
- シャットダウンに失敗した場合 public final boolean isActive()
public void start() throws JmsException
Lifecycle
の start
JmsException
- 起動に失敗した場合 doStart()
protected void doStart() throws JMSExceptionEE
JMSExceptionEE
- JMS API メソッドによってスローされた場合 startSharedConnection()
public void stop() throws JmsException
Lifecycle
の stop
JmsException
- 停止に失敗した場合 doStop()
protected void doStop() throws JMSExceptionEE
JMSExceptionEE
- JMS API メソッドによってスローされた場合 stopSharedConnection()
public final boolean isRunning()
Lifecycle
の isRunning
start()
, stop()
, runningAllowed()
protected boolean runningAllowed()
protected void establishSharedConnection() throws JMSExceptionEE
デフォルトの実装は createSharedConnection()
に委譲します。createSharedConnection()
はすぐに 1 回試行し、失敗すると例外をスローします。接続を正常に確立できるまで再試行して、回復プロセスを実行するようにオーバーライドできます。
JMSExceptionEE
- JMS API メソッドによってスローされた場合 protected final void refreshSharedConnection() throws JMSExceptionEE
起動時、および呼び出し元のセットアップや実行中に発生したインフラストラクチャ例外の後に呼び出されます。
JMSExceptionEE
- JMS API メソッドによってスローされた場合 protected ConnectionEE createSharedConnection() throws JMSExceptionEE
デフォルトの実装では、標準接続が作成され、prepareSharedConnection(javax.jms.Connection)
を介して準備されます。
JMSExceptionEE
- 作成に失敗した場合 protected void prepareSharedConnection(ConnectionEE connection) throws JMSExceptionEE
デフォルトの実装では、指定されたクライアント ID があれば設定されます。サブクラスはこれをオーバーライドして、さらに設定を適用できます。
connection
- 準備する接続 JMSExceptionEE
- 準備作業が失敗した場合 getClientId()
protected void startSharedConnection() throws JMSExceptionEE
JMSExceptionEE
- JMS API メソッドによってスローされた場合 Connection.start()
EEprotected void stopSharedConnection() throws JMSExceptionEE
JMSExceptionEE
- JMS API メソッドによってスローされた場合 Connection.start()
EEprotected final ConnectionEE getSharedConnection()
null
)IllegalStateExceptionSE
- このコンテナーが共有接続を維持していない場合、または接続がまだ初期化されていない場合 sharedConnectionEnabled()
protected final boolean rescheduleTaskIfNecessary(ObjectSE task)
このコンテナーがすでにシャットダウンされている場合、タスクは再スケジュールされません。
task
- 再スケジュールするタスクオブジェクト doRescheduleTask(java.lang.Object)
protected void resumePausedTasks()
public int getPausedTaskCount()
protected void doRescheduleTask(ObjectSE task)
rescheduleTaskIfNecessary
を呼び出した場合にサブクラスによって実装されます。この実装は UnsupportedOperationException をスローします。
task
- 再スケジュールするタスクオブジェクト rescheduleTaskIfNecessary(java.lang.Object)
protected void logRejectedTask(ObjectSE task, RuntimeExceptionSE ex)
doRescheduleTask(java.lang.Object)
によって拒否されたタスクをログに記録します。デフォルトの実装では、対応するメッセージをデバッグレベルでログに記録するだけです。
task
- 拒否されたタスクオブジェクト ex
- doRescheduleTask(java.lang.Object)
からスローされた例外 protected abstract boolean sharedConnectionEnabled()
protected abstract void doInitialize() throws JMSExceptionEE
サブクラスは、特定の呼び出し元管理プロセスのためにこのメソッドを実装する必要があります。
共有 JMS 接続がある場合は、この時点ですでに開始されています。
JMSExceptionEE
- 登録に失敗した場合 getSharedConnection()
protected abstract void doShutdown() throws JMSExceptionEE
サブクラスは、特定の呼び出し元管理プロセスのためにこのメソッドを実装する必要があります。
共有 JMS 接続がある場合は、 その後自動的に閉じられます。
JMSExceptionEE
- シャットダウンに失敗した場合 shutdown()