public class SimpleRemoteStatelessSessionProxyFactoryBean extends SimpleRemoteSlsbInvokerInterceptor implements FactoryBean<ObjectSE>, BeanClassLoaderAware
FactoryBean
。EJB 2.x 用に設計されていますが、EJB 3 セッション Bean でも機能します。 ターゲット EJB の JNDI ロケーションを指定する方法については、JndiObjectLocator
を参照してください。
インターセプターチェーンを制御する必要がある場合は、このクラスに依存するのではなく、SimpleRemoteSlsbInvokerInterceptor で AOP ProxyFactoryBean を使用します。
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
OBJECT_TYPE_ATTRIBUTE
コンストラクターと説明 |
---|
SimpleRemoteStatelessSessionProxyFactoryBean() |
修飾子と型 | メソッドと説明 |
---|---|
void | afterPropertiesSet() 必要に応じて、起動時に EJB ホームをフェッチします。 |
ClassSE<?> | getBusinessInterface() プロキシしている EJB のビジネスインターフェースを返します。 |
ObjectSE | getObject() このファクトリによって管理されるオブジェクトのインスタンス(おそらく共有または独立)を返します。 |
ClassSE<?> | getObjectType() この FactoryBean が作成するオブジェクトの型、または事前に不明な場合は null を返します。 |
boolean | isSingleton() このファクトリによって管理されるオブジェクトはシングルトンですか? つまり、 FactoryBean.getObject() は常に同じオブジェクト(キャッシュ可能な参照)を返しますか? |
void | setBeanClassLoader(ClassLoaderSE classLoader) Bean class loader SE を Bean インスタンスに提供するコールバック。 |
void | setBusinessInterface(ClassSE<?> businessInterface) プロキシする EJB のビジネスインターフェースを設定します。 |
destroy, doInvoke, getSessionBeanInstance, refreshHome, releaseSessionBeanInstance, setCacheSessionBean
getCreateMethod, invokeInContext, isConnectFailure, isHomeRefreshable, newSessionBeanInstance, refreshAndRetry, removeSessionBeanInstance, setRefreshHomeOnConnectFailure
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 SimpleRemoteStatelessSessionProxyFactoryBean()
public void setBusinessInterface(@Nullable ClassSE<?> businessInterface)
一致する非 RMI ビジネスインターフェース、つまり、EJB ビジネスメソッドをミラーリングするが RemoteExceptions を宣言しないインターフェースを指定することもできます。この場合、EJB スタブによってスローされた RemoteExceptions は自動的に Spring の汎用 RemoteAccessException に変換されます。
businessInterface
- EJB のビジネスインターフェース @Nullable public ClassSE<?> getBusinessInterface()
public void setBeanClassLoader(ClassLoaderSE classLoader)
BeanClassLoaderAware
class loader
SE を Bean インスタンスに提供するコールバック。 通常の Bean プロパティの設定後、ただし InitializingBean's
InitializingBean.afterPropertiesSet()
メソッドやカスタム init-method などの初期化コールバックの前に呼び出されます。
BeanClassLoaderAware
の setBeanClassLoader
classLoader
- 所有クラスローダー public void afterPropertiesSet() throws NamingExceptionSE
AbstractSlsbInvokerInterceptor
@Nullable public ObjectSE getObject()
FactoryBean
BeanFactory
と同様に、これにより、シングルトンとプロトタイプの両方のデザインパターンをサポートできます。
この FactoryBean が呼び出し時にまだ完全に初期化されていない場合(たとえば、循環参照に関係しているため)、対応する FactoryBeanNotInitializedException
をスローします。
Spring 2.0 以降、FactoryBeans は null
オブジェクトを返すことができます。ファクトリはこれを通常の値として使用します。この場合、FactoryBeanNotInitializedException はスローされません。FactoryBean の実装では、必要に応じて FactoryBeanNotInitializedException 自体をすぐにスローすることをお勧めします。
FactoryBean<ObjectSE>
の getObject
null
にすることができます)FactoryBeanNotInitializedException
public ClassSE<?> getObjectType()
FactoryBean
null
を返します。これにより、たとえばオートワイヤーなどで、オブジェクトをインスタンス化せずに特定の型の Bean を確認できます。
シングルトンオブジェクトを作成している実装の場合、このメソッドはシングルトンの作成を可能な限り回避しようとします。むしろ、事前に型を推定する必要があります。プロトタイプの場合、ここで意味のある型を返すこともお勧めします。
このメソッドは、この FactoryBean が完全に初期化される前に呼び出すことができます。初期化中に作成された状態に依存しないでください。もちろん、利用可能な場合はそのような状態を引き続き使用できます。
注意 : オートワイヤーは、ここで null
を返す FactoryBeans を単に無視します。FactoryBean の現在の状態を使用して、このメソッドを適切に実装することを強くお勧めします。
FactoryBean<ObjectSE>
の getObjectType
null
ListableBeanFactory.getBeansOfType(java.lang.Class<T>)
public boolean isSingleton()
FactoryBean
FactoryBean.getObject()
は常に同じオブジェクト(キャッシュ可能な参照)を返しますか? 注意 : FactoryBean がシングルトンオブジェクトを保持することを示す場合、getObject()
から返されたオブジェクトは所有 BeanFactory によってキャッシュされる可能性があります。FactoryBean が常に同じ参照を公開しない限り、true
を返さないでください。
FactoryBean 自体のシングルトンステータスは、通常、所有する BeanFactory によって提供されます。通常、そこではシングルトンとして定義する必要があります。
注意 : false
を返すこのメソッドは、返されるオブジェクトが独立したインスタンスであることを必ずしも示しません。拡張 SmartFactoryBean
インターフェースの実装は、SmartFactoryBean.isPrototype()
メソッドを通じて独立したインスタンスを明示的に示す場合があります。この拡張インターフェースを実装しないプレーンな FactoryBean
実装は、isSingleton()
実装が false
を返す場合、常に独立したインスタンスを返すと単純に想定されます。
FactoryBean
は通常シングルトンインスタンスを管理するため、デフォルトの実装では true
が返されます。
FactoryBean<ObjectSE>
の isSingleton
FactoryBean.getObject()
, SmartFactoryBean.isPrototype()