public class SimpleRemoteSlsbInvokerInterceptor extends AbstractRemoteSlsbInvokerInterceptor implements DisposableBean
呼び出しごとに新しい EJB インスタンスを「作成」するか、すべての呼び出しのためにセッション Bean インスタンスをキャッシュします(setCacheSessionBean(boolean)
を参照)。ターゲット EJB の JNDI ロケーションの指定方法については、JndiObjectLocator
を参照してください。
Bean コンテナーでは、このクラスは通常、シングルトンとして最適に使用されます。ただし、その Bean コンテナーが(XML ApplicationContext バリアントと同様に)シングルトンを事前にインスタンス化する場合、EJB コンテナーがターゲット EJB をロードする前に Bean コンテナーがロードされると問題が発生する可能性があります。これは、デフォルトでは、JNDI ルックアップはこのクラスの init メソッドで実行されてキャッシュされますが、EJB はまだターゲットの場所にバインドされていないためです。最善の解決策は、"lookupHomeOnStartup" プロパティを "false" に設定することです。この場合、EJB への最初のアクセス時にホームがフェッチされます。(このフラグは、下位互換性のためにデフォルトでのみ true です)。
このインボーカは、通常、EJB コンポーネントインターフェースのスーパーインターフェースとして機能する RMI ビジネスインターフェースで使用されます。または、このインボーカーは、リモート SLSB を、対応する非 RMI ビジネスインターフェース、つまり EJB ビジネスメソッドをミラーリングするが RemoteExceptions を宣言しないインターフェースでプロキシすることもできます。後者の場合、EJB スタブによってスローされた RemoteExceptions は自動的に Spring のチェックされていない RemoteAccessException に変換されます。
RemoteAccessException
, AbstractSlsbInvokerInterceptor.setLookupHomeOnStartup(boolean)
, AbstractSlsbInvokerInterceptor.setCacheHome(boolean)
, AbstractRemoteSlsbInvokerInterceptor.setRefreshHomeOnConnectFailure(boolean)
CONTAINER_PREFIX
logger
コンストラクターと説明 |
---|
SimpleRemoteSlsbInvokerInterceptor() |
修飾子と型 | メソッドと説明 |
---|---|
void | destroy() 必要に応じて、キャッシュされたセッション Bean インスタンスを削除します。 |
protected ObjectSE | doInvoke(MethodInvocation invocation) この実装は、呼び出しごとに新しい EJB インスタンスを「作成」します。 |
protected ObjectSE | getSessionBeanInstance() 呼び出しを委譲する EJB コンポーネントインスタンスを返します。 |
protected void | refreshHome() 必要に応じて、キャッシュされたセッション Bean インスタンスをリセットします。 |
protected void | releaseSessionBeanInstance(EJBObjectEE ejb) 指定された EJB インスタンスを解放します。 |
void | setCacheSessionBean(boolean cacheSessionBean) 実際のセッション Bean オブジェクトをキャッシュするかどうかを設定します。 |
getCreateMethod, invokeInContext, isConnectFailure, isHomeRefreshable, newSessionBeanInstance, refreshAndRetry, removeSessionBeanInstance, setRefreshHomeOnConnectFailure
afterPropertiesSet, create, getHome, invoke, setCacheHome, setExposeAccessContext, setLookupHomeOnStartup
getExpectedType, getJndiName, lookup, setExpectedType, setJndiName
convertJndiName, isResourceRef, lookup, lookup, setResourceRef
getJndiEnvironment, getJndiTemplate, setJndiEnvironment, setJndiTemplate
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSE
public void setCacheSessionBean(boolean cacheSessionBean)
標準の EJB 準拠ではデフォルトでオフ。このフラグをオンにして、実際のセッション Bean オブジェクトをキャッシュできることがわかっているサーバーのセッション Bean アクセスを最適化します。
@Nullable protected ObjectSE doInvoke(MethodInvocation invocation) throws ThrowableSE
または、getSessionBeanInstance()
と releaseSessionBeanInstance(javax.ejb.EJBObject)
をオーバーライドして、EJB インスタンスの作成を変更します。たとえば、単一の共有 EJB コンポーネントインスタンスを保持します。
AbstractRemoteSlsbInvokerInterceptor
の doInvoke
invocation
- AOP メソッドの呼び出し ThrowableSE
- 呼び出しが失敗した場合 AbstractSlsbInvokerInterceptor.getHome()
, AbstractRemoteSlsbInvokerInterceptor.newSessionBeanInstance()
protected ObjectSE getSessionBeanInstance() throws NamingExceptionSE, InvocationTargetExceptionSE
デフォルトの実装は AbstractRemoteSlsbInvokerInterceptor.newSessionBeanInstance()
に委譲します。
NamingExceptionSE
- JNDI によってスローされた場合 InvocationTargetExceptionSE
- create メソッドによってスローされた場合 AbstractRemoteSlsbInvokerInterceptor.newSessionBeanInstance()
protected void releaseSessionBeanInstance(EJBObjectEE ejb)
デフォルトの実装は AbstractRemoteSlsbInvokerInterceptor.removeSessionBeanInstance(javax.ejb.EJBObject)
に委譲します。
ejb
- リリースする EJB コンポーネントインスタンス AbstractRemoteSlsbInvokerInterceptor.removeSessionBeanInstance(javax.ejb.EJBObject)
protected void refreshHome() throws NamingExceptionSE
AbstractSlsbInvokerInterceptor
の refreshHome
NamingExceptionSE
- JNDI ルックアップによってスローされた場合 JndiObjectLocator.lookup()
, AbstractSlsbInvokerInterceptor.getCreateMethod(java.lang.Object)
public void destroy()
DisposableBean
の destroy