@DeprecatedSE public class JndiRmiClientInterceptor extends JndiObjectLocator implements MethodInterceptor, InitializingBean
MethodInterceptor
。通常は RMI-IIOP に使用されますが、EJB ホームオブジェクト(たとえば、ステートフルセッション Bean ホーム)にも使用できます。単純な JNDI ルックアップとは対照的に、このアクセサーは PortableRemoteObject を介してナローイングも実行します。従来の RMI サービスでは、この呼び出しは通常 RMI サービスインターフェースで使用されます。または、この呼び出し側は、リモート RMI サービスを、一致する非 RMI ビジネスインターフェース、つまり RMI サービスメソッドをミラーリングするが RemoteExceptions を宣言しないインターフェースでプロキシすることもできます。後者の場合、RMI スタブによってスローされた RemoteExceptions は、Spring の未チェックの RemoteAccessException に自動的に変換されます。
JNDI 環境は、"jndiEnvironment" プロパティとして指定することも、jndi.properties
ファイルまたはシステムプロパティとして構成することもできます。例:
<property name="jndiEnvironment"> <props> <prop key="java.naming.factory.initial">com.sun.jndi.cosnaming.CNCtxFactory</prop> <prop key="java.naming.provider.url">iiop://localhost:1050</prop> </props> </property>
JndiAccessor.setJndiTemplate(org.springframework.jndi.JndiTemplate)
, JndiAccessor.setJndiEnvironment(java.util.Properties)
, JndiObjectLocator.setJndiName(java.lang.String)
, JndiRmiServiceExporter
, JndiRmiProxyFactoryBean
, RemoteAccessException
, RemoteException
SE, Remote
SECONTAINER_PREFIX
logger
コンストラクターと説明 |
---|
JndiRmiClientInterceptor() 使用すべきではありません。 |
修飾子と型 | メソッドと説明 |
---|---|
void | afterPropertiesSet() 使用すべきではありません。 |
protected RemoteInvocation | createRemoteInvocation(MethodInvocation methodInvocation) 使用すべきではありません。 指定された AOP メソッド呼び出し用に新しい RemoteInvocation オブジェクトを作成します。 |
protected ObjectSE | doInvoke(MethodInvocation invocation, ObjectSE stub) 使用すべきではありません。 指定された RMI スタブで指定された呼び出しを実行します。 |
protected ObjectSE | doInvoke(MethodInvocation methodInvocation, RmiInvocationHandler invocationHandler) 使用すべきではありません。 指定された RmiInvocationHandler に指定された AOP メソッド呼び出しを適用します。 |
RemoteInvocationFactory | getRemoteInvocationFactory() 使用すべきではありません。 このアクセサーによって使用される RemoteInvocationFactory を返します。 |
ClassSE<?> | getServiceInterface() 使用すべきではありません。 アクセスするサービスのインターフェースを返します。 |
protected ObjectSE | getStub() 使用すべきではありません。 使用する RMI スタブを返します。 |
ObjectSE | invoke(MethodInvocation invocation) 使用すべきではありません。 RMI スタブをフェッチし、 doInvoke(org.aopalliance.intercept.MethodInvocation, java.lang.Object) に委譲します。 |
protected boolean | isConnectFailure(RemoteExceptionSE ex) 使用すべきではありません。 指定された RMI 例外が接続障害を示しているかどうかを判別します。 |
protected ObjectSE | lookupStub() 使用すべきではありません。 通常は検索して、RMI スタブを作成します。 |
void | prepare() 使用すべきではありません。 必要に応じて、起動時に RMI スタブを取得します。 |
protected ObjectSE | refreshAndRetry(MethodInvocation invocation) 使用すべきではありません。 RMI スタブをリフレッシュし、指定された呼び出しを再試行します。 |
void | setCacheStub(boolean cacheStub) 使用すべきではありません。 RMI スタブが見つかったら、キャッシュするかどうかを設定します。 |
void | setExposeAccessContext(boolean exposeAccessContext) 使用すべきではありません。 ターゲット RMI スタブへのすべてのアクセスに対して JNDI 環境コンテキストを公開するかどうかを設定します。 |
void | setLookupStubOnStartup(boolean lookupStubOnStartup) 使用すべきではありません。 起動時に RMI スタブを検索するかどうかを設定します。 |
void | setRefreshStubOnConnectFailure(boolean refreshStubOnConnectFailure) 使用すべきではありません。 接続障害時に RMI スタブをリフレッシュするかどうかを設定します。 |
void | setRemoteInvocationFactory(RemoteInvocationFactory remoteInvocationFactory) 使用すべきではありません。 このアクセサーに使用する RemoteInvocationFactory を設定します。 |
void | setServiceInterface(ClassSE<?> serviceInterface) 使用すべきではありません。 アクセスするサービスのインターフェースを設定します。 |
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 setServiceInterface(ClassSE<?> serviceInterface)
通常、適切なサービスプロキシを作成できる必要がありますが、ルックアップが型付きスタブを返す場合はオプションにすることもできます。
public ClassSE<?> getServiceInterface()
public void setRemoteInvocationFactory(RemoteInvocationFactory remoteInvocationFactory)
DefaultRemoteInvocationFactory
です。カスタム呼び出しファクトリは、ユーザー資格情報など、さらにコンテキスト情報を呼び出しに追加できます。
public RemoteInvocationFactory getRemoteInvocationFactory()
public void setLookupStubOnStartup(boolean lookupStubOnStartup)
RMI サーバーの開始を遅らせるためにオフにすることができます。この場合、RMI スタブは最初のアクセスで取得されます。
public void setCacheStub(boolean cacheStub)
RMI サーバーのホットリスタートを可能にするためにオフにすることができます。この場合、呼び出しごとに RMI スタブがフェッチされます。
public void setRefreshStubOnConnectFailure(boolean refreshStubOnConnectFailure)
オンにすると、RMI サーバーのホットリスタートが可能になります。キャッシュされた RMI スタブがリモート接続障害を示す RMI 例外をスローした場合、新しいプロキシがフェッチされ、呼び出しが再試行されます。
public void setExposeAccessContext(boolean exposeAccessContext)
デフォルトは "false" です。つまり、オブジェクトルックアップの JNDI コンテキストのみを公開します。認可要件のある RMI スタブの WebLogic の必要に応じて、各 RMI 呼び出しの JNDI 環境(認可コンテキストを含む)を公開するには、このフラグを "true" に切り替えます。
public void afterPropertiesSet() throws NamingExceptionSE
InitializingBean
BeanFactoryAware
、ApplicationContextAware
などを満たした後、包含 BeanFactory
によって呼び出されます。このメソッドにより、Bean インスタンスは、すべての Bean プロパティが設定されたときに、その全体的な構成の検証と最終的な初期化を実行できます。
InitializingBean
の afterPropertiesSet
JndiObjectLocator
の afterPropertiesSet
NamingExceptionSE
public void prepare() throws RemoteLookupFailureException
RemoteLookupFailureException
- RMI スタブの作成が失敗した場合 setLookupStubOnStartup(boolean)
, lookupStub()
protected ObjectSE lookupStub() throws RemoteLookupFailureException
"cacheStub" が "true" の場合はインターセプターの初期化時に呼び出され、それ以外の場合は getStub()
による各呼び出しごとに呼び出されます。
デフォルトの実装では、JNDI 環境からサービスを取得します。これはサブクラスでオーバーライドできます。
RemoteLookupFailureException
- RMI スタブの作成が失敗した場合 setCacheStub(boolean)
, JndiObjectLocator.lookup()
protected ObjectSE getStub() throws NamingExceptionSE, RemoteLookupFailureException
デフォルトの実装は、初期化時に作成されたスタブを返します(存在する場合)。それ以外の場合は、lookupStub()
を呼び出して、呼び出しごとに新しいスタブを取得します。これは、サブクラスでオーバーライドできます。たとえば、スタブを再作成する前に一定の時間キャッシュするため、またはスタブがまだ生きているかどうかをテストするためです。
NamingExceptionSE
- スタブの作成に失敗した場合 RemoteLookupFailureException
- RMI スタブの作成が失敗した場合 @Nullable public ObjectSE invoke(MethodInvocation invocation) throws ThrowableSE
doInvoke(org.aopalliance.intercept.MethodInvocation, java.lang.Object)
に委譲します。接続障害時にリフレッシュするように構成されている場合、対応する RMI 例外で refreshAndRetry(org.aopalliance.intercept.MethodInvocation)
を呼び出します。MethodInterceptor
の invoke
invocation
- メソッド呼び出しジョインポイント Joinpoint.proceed()
の呼び出しの結果。インターセプターによってインターセプトされる可能性があります ThrowableSE
- インターセプターまたはターゲットオブジェクトが例外をスローする場合 getStub()
, doInvoke(org.aopalliance.intercept.MethodInvocation, java.lang.Object)
, refreshAndRetry(org.aopalliance.intercept.MethodInvocation)
, ConnectException
SE, ConnectIOException
SE, NoSuchObjectException
SEprotected boolean isConnectFailure(RemoteExceptionSE ex)
デフォルトの実装は RmiClientInterceptorUtils.isConnectFailure(java.rmi.RemoteException)
に委譲します。
ex
- 確認する RMI 例外 @Nullable protected ObjectSE refreshAndRetry(MethodInvocation invocation) throws ThrowableSE
invocation
- AOP メソッドの呼び出し ThrowableSE
- 呼び出しが失敗した場合 invoke(org.aopalliance.intercept.MethodInvocation)
@Nullable protected ObjectSE doInvoke(MethodInvocation invocation, ObjectSE stub) throws ThrowableSE
invocation
- AOP メソッドの呼び出し stub
- 呼び出す RMI スタブ ThrowableSE
- 呼び出しが失敗した場合 protected ObjectSE doInvoke(MethodInvocation methodInvocation, RmiInvocationHandler invocationHandler) throws RemoteExceptionSE, NoSuchMethodExceptionSE, IllegalAccessExceptionSE, InvocationTargetExceptionSE
RmiInvocationHandler
に指定された AOP メソッド呼び出しを適用します。 デフォルトの実装は createRemoteInvocation(org.aopalliance.intercept.MethodInvocation)
に委譲します。
methodInvocation
- 現在の AOP メソッドの呼び出し invocationHandler
- 呼び出しを適用する RmiInvocationHandlerRemoteExceptionSE
- 通信エラーの場合 NoSuchMethodExceptionSE
- メソッド名を解決できなかった場合 IllegalAccessExceptionSE
- メソッドにアクセスできなかった場合 InvocationTargetExceptionSE
- メソッド呼び出しにより例外が発生した場合 RemoteInvocation
protected RemoteInvocation createRemoteInvocation(MethodInvocation methodInvocation)
デフォルトの実装は、構成された RemoteInvocationFactory
に委譲します。これは、追加の呼び出しパラメーター(ユーザー資格情報など)を含むカスタム RemoteInvocation サブクラスを提供するために、サブクラスでオーバーライドできます。
このメソッドをオーバーライドするのではなく、再利用可能な戦略としてカスタム RemoteInvocationFactory を構築することが望ましいことに注意してください。
methodInvocation
- 現在の AOP メソッドの呼び出し RemoteInvocationFactory.createRemoteInvocation(org.aopalliance.intercept.MethodInvocation)